aboutsummaryrefslogtreecommitdiffstats
path: root/container-search
diff options
context:
space:
mode:
authorArne H Juul <arnej@yahooinc.com>2021-11-09 15:09:18 +0000
committerArne H Juul <arnej@yahooinc.com>2021-11-09 15:09:18 +0000
commit5722111fe3a1f675170c42f2298ac70f368d3e6e (patch)
tree2c4120e6ba01c962f1de5fd9d045c5d49a4cd3ab /container-search
parent5b18b3978ee3c8a27c1d544de4ff6a4ea5e6aa9d (diff)
more cleanup of MatchFeatureData
Diffstat (limited to 'container-search')
-rw-r--r--container-search/src/main/java/com/yahoo/search/dispatch/rpc/MatchFeatureData.java12
-rw-r--r--container-search/src/main/java/com/yahoo/search/dispatch/rpc/ProtobufSerialization.java5
-rw-r--r--container-search/src/test/java/com/yahoo/search/dispatch/rpc/MatchFeatureDataTest.java14
3 files changed, 14 insertions, 17 deletions
diff --git a/container-search/src/main/java/com/yahoo/search/dispatch/rpc/MatchFeatureData.java b/container-search/src/main/java/com/yahoo/search/dispatch/rpc/MatchFeatureData.java
index 3a7a1796f04..0a9b64c9b4f 100644
--- a/container-search/src/main/java/com/yahoo/search/dispatch/rpc/MatchFeatureData.java
+++ b/container-search/src/main/java/com/yahoo/search/dispatch/rpc/MatchFeatureData.java
@@ -20,7 +20,7 @@ import java.util.Map;
* for the field names.
* @author arnej
*/
-public class MatchFeatureData {
+class MatchFeatureData {
private final Hashlet<String,Integer> hashlet;
@@ -38,10 +38,9 @@ public class MatchFeatureData {
private final Hashlet<String,Integer> hashlet;
private final byte[][] dataValues;
private final double[] doubleValues;
- private int index = 0;
public Type type() { return Type.OBJECT; }
- public boolean valid() { return index == doubleValues.length; }
+ public boolean valid() { return true; }
public int fieldCount() { return hashlet.size(); }
public void traverse(ObjectTraverser ot) {
for (int i = 0; i < hashlet.size(); i++) {
@@ -52,13 +51,12 @@ public class MatchFeatureData {
}
public Inspector field(String name) {
int offset = hashlet.getIndexOfKey(name);
- if (offset < 0 || ! valid()) {
+ if (offset < 0) {
return invalid();
}
return valueAt(offset);
}
public Iterable<Map.Entry<String,Inspector>> fields() {
- if (! valid()) { return List.of(); }
var list = new ArrayList<Map.Entry<String,Inspector>>(hashlet.size());
for (int i = 0; i < hashlet.size(); i++) {
String fn = hashlet.key(i);
@@ -76,10 +74,10 @@ public class MatchFeatureData {
}
// package-private:
- void add(byte[] data) {
+ void set(int index, byte[] data) {
dataValues[index++] = data;
}
- void add(double value) {
+ void set(int index, double value) {
doubleValues[index++] = value;
}
diff --git a/container-search/src/main/java/com/yahoo/search/dispatch/rpc/ProtobufSerialization.java b/container-search/src/main/java/com/yahoo/search/dispatch/rpc/ProtobufSerialization.java
index 8f8bfb63447..3bb283698ae 100644
--- a/container-search/src/main/java/com/yahoo/search/dispatch/rpc/ProtobufSerialization.java
+++ b/container-search/src/main/java/com/yahoo/search/dispatch/rpc/ProtobufSerialization.java
@@ -231,12 +231,13 @@ public class ProtobufSerialization {
var hitFeatures = matchFeatures.addHit();
var featureList = replyHit.getMatchFeaturesList();
if (featureList.size() == featureNames.size()) {
+ int idx = 0;
for (SearchProtocol.Feature value : featureList) {
ByteString tensorBlob = value.getTensor();
if (tensorBlob.isEmpty()) {
- hitFeatures.add(value.getNumber());
+ hitFeatures.set(idx++, value.getNumber());
} else {
- hitFeatures.add(tensorBlob.toByteArray());
+ hitFeatures.set(idx++, tensorBlob.toByteArray());
}
}
hit.addMatchFeatures(hitFeatures);
diff --git a/container-search/src/test/java/com/yahoo/search/dispatch/rpc/MatchFeatureDataTest.java b/container-search/src/test/java/com/yahoo/search/dispatch/rpc/MatchFeatureDataTest.java
index 0ef6fbae062..6834a5edf9b 100644
--- a/container-search/src/test/java/com/yahoo/search/dispatch/rpc/MatchFeatureDataTest.java
+++ b/container-search/src/test/java/com/yahoo/search/dispatch/rpc/MatchFeatureDataTest.java
@@ -26,15 +26,13 @@ public class MatchFeatureDataTest {
var mf = new MatchFeatureData(names);
var hit = mf.addHit();
assertEquals(hit.type(), Type.OBJECT);
- assertFalse(hit.valid());
- hit.add(1.0);
- hit.add(2.0);
- byte[] somebytes = { 42, 0, 17 };
- hit.add(somebytes);
- hit.add(4.0);
- assertFalse(hit.valid());
- hit.add(5.0);
assertTrue(hit.valid());
+ hit.set(0, 1.0);
+ byte[] somebytes = { 42, 0, 17 };
+ hit.set(2, somebytes);
+ hit.set(4, 5.0);
+ hit.set(1, 2.0);
+ hit.set(3, 4.0);
assertEquals(0, hit.entryCount());
assertEquals(5, hit.fieldCount());
var f0 = hit.field("not");