summaryrefslogtreecommitdiffstats
path: root/linguistics
diff options
context:
space:
mode:
authorBjørn Christian Seime <bjorncs@vespa.ai>2024-04-04 11:35:52 +0200
committerBjørn Christian Seime <bjorncs@vespa.ai>2024-04-04 11:36:01 +0200
commit9f9160985a4f4848fa3f89d83a9f859958bd8e3c (patch)
tree646c33b3b4a23ad58caf73d03c808f50b5ff6e28 /linguistics
parent3aadce672938ac990c261b97d0ca9d752c0d0cf6 (diff)
Add equivalent to `Map.computeIfAbsent()` to simplify typical usage of the cache
Current interface requires a lot of boilerplate code.
Diffstat (limited to 'linguistics')
-rw-r--r--linguistics/abi-spec.json3
-rw-r--r--linguistics/src/main/java/com/yahoo/language/process/Embedder.java8
2 files changed, 9 insertions, 2 deletions
diff --git a/linguistics/abi-spec.json b/linguistics/abi-spec.json
index 0bd4638bb05..91574133658 100644
--- a/linguistics/abi-spec.json
+++ b/linguistics/abi-spec.json
@@ -347,7 +347,8 @@
"public java.lang.String getEmbedderId()",
"public com.yahoo.language.process.Embedder$Context setEmbedderId(java.lang.String)",
"public void putCachedValue(java.lang.String, java.lang.Object)",
- "public java.lang.Object getCachedValue(java.lang.String)"
+ "public java.lang.Object getCachedValue(java.lang.String)",
+ "public java.lang.Object computeCachedValueIfAbsent(java.lang.String, java.util.function.Supplier)"
],
"fields" : [ ]
},
diff --git a/linguistics/src/main/java/com/yahoo/language/process/Embedder.java b/linguistics/src/main/java/com/yahoo/language/process/Embedder.java
index 2ab2de303c2..e53f79d98ec 100644
--- a/linguistics/src/main/java/com/yahoo/language/process/Embedder.java
+++ b/linguistics/src/main/java/com/yahoo/language/process/Embedder.java
@@ -7,10 +7,10 @@ import com.yahoo.language.Language;
import com.yahoo.tensor.Tensor;
import com.yahoo.tensor.TensorType;
-import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.Objects;
+import java.util.function.Supplier;
/**
* An embedder converts a text string to a tensor
@@ -162,6 +162,12 @@ public interface Embedder {
return cache.get(key);
}
+ /** Returns the cached value, or computes and caches it if not present. */
+ @SuppressWarnings("unchecked")
+ public <T> T computeCachedValueIfAbsent(String key, Supplier<? extends T> supplier) {
+ return (T) cache.computeIfAbsent(key, __ -> supplier.get());
+ }
+
}
class FailingEmbedder implements Embedder {