aboutsummaryrefslogtreecommitdiffstats
path: root/vespajlib/src/main
diff options
context:
space:
mode:
authorHenning Baldersheim <balder@yahoo-inc.com>2024-01-21 22:18:30 +0100
committerHenning Baldersheim <balder@yahoo-inc.com>2024-01-21 22:18:30 +0100
commitd7525c7ef9f63e275b466840dd30dad24e5d4779 (patch)
tree821a2b44ec26ab12c61e6e2c2a8da21521a7b303 /vespajlib/src/main
parent44bea161aac2bf0706dd4b30ac6bab0a63470dfd (diff)
Use lz4-java and xxhash32
Diffstat (limited to 'vespajlib/src/main')
-rw-r--r--vespajlib/src/main/java/com/yahoo/tensor/TensorAddress.java20
1 files changed, 16 insertions, 4 deletions
diff --git a/vespajlib/src/main/java/com/yahoo/tensor/TensorAddress.java b/vespajlib/src/main/java/com/yahoo/tensor/TensorAddress.java
index f841b7757fb..1346ee7cf46 100644
--- a/vespajlib/src/main/java/com/yahoo/tensor/TensorAddress.java
+++ b/vespajlib/src/main/java/com/yahoo/tensor/TensorAddress.java
@@ -3,7 +3,10 @@ package com.yahoo.tensor;
import com.yahoo.tensor.impl.NumericTensorAddress;
import com.yahoo.tensor.impl.StringTensorAddress;
+import net.jpountz.xxhash.XXHash32;
+import net.jpountz.xxhash.XXHashFactory;
+import java.nio.charset.StandardCharsets;
import java.util.Arrays;
import java.util.Objects;
import java.util.Optional;
@@ -16,6 +19,8 @@ import java.util.Optional;
*/
public abstract class TensorAddress implements Comparable<TensorAddress> {
+ private static final XXHash32 hasher = XXHashFactory.fastestJavaInstance().hash32();
+
public static TensorAddress of(String[] labels) {
return StringTensorAddress.of(labels);
}
@@ -28,6 +33,8 @@ public abstract class TensorAddress implements Comparable<TensorAddress> {
return NumericTensorAddress.of(labels);
}
+ private int cached_hash = 0;
+
/** Returns the number of labels in this */
public abstract int size();
@@ -62,12 +69,17 @@ public abstract class TensorAddress implements Comparable<TensorAddress> {
@Override
public int hashCode() {
- int result = 1;
+ if (cached_hash != 0) return cached_hash;
+
+ int hash = 0;
for (int i = 0; i < size(); i++) {
- if (label(i) != null)
- result = 31 * result + label(i).hashCode();
+ String label = label(i);
+ if (label != null) {
+ byte [] buf = label.getBytes(StandardCharsets.UTF_8);
+ hash = hasher.hash(buf, 0, buf.length, hash);
+ }
}
- return result;
+ return cached_hash = hash;
}
@Override