From 42c96d9d099b26b110caa29fc74d332a88f3d845 Mon Sep 17 00:00:00 2001 From: Jonathan Ellis Date: Mon, 9 Oct 2023 11:26:11 -0500 Subject: [PATCH] clarify relationship between size and copy in RAVV --- .../jvector/graph/ListRandomAccessVectorValues.java | 3 +-- .../jvector/graph/RandomAccessVectorValues.java | 10 +++++++++- 2 files changed, 10 insertions(+), 3 deletions(-) diff --git a/jvector-base/src/main/java/io/github/jbellis/jvector/graph/ListRandomAccessVectorValues.java b/jvector-base/src/main/java/io/github/jbellis/jvector/graph/ListRandomAccessVectorValues.java index 8f483ce71..5da042dd7 100644 --- a/jvector-base/src/main/java/io/github/jbellis/jvector/graph/ListRandomAccessVectorValues.java +++ b/jvector-base/src/main/java/io/github/jbellis/jvector/graph/ListRandomAccessVectorValues.java @@ -64,7 +64,6 @@ public boolean isValueShared() { @Override public ListRandomAccessVectorValues copy() { - // our vectorValue is Unshared, but copy anyway in case the underlying List is not threadsafe - return new ListRandomAccessVectorValues(List.copyOf(vectors), dimension); + return this; } } diff --git a/jvector-base/src/main/java/io/github/jbellis/jvector/graph/RandomAccessVectorValues.java b/jvector-base/src/main/java/io/github/jbellis/jvector/graph/RandomAccessVectorValues.java index bd9d1c6b4..21bdcf851 100644 --- a/jvector-base/src/main/java/io/github/jbellis/jvector/graph/RandomAccessVectorValues.java +++ b/jvector-base/src/main/java/io/github/jbellis/jvector/graph/RandomAccessVectorValues.java @@ -30,7 +30,13 @@ */ public interface RandomAccessVectorValues { - /** Return the number of vector values */ + /** + * Return the number of vector values. + *

+ * All copies of a given RAVV should have the same size. Typically this is achieved by either + * (1) implementing a threadsafe, un-shared RAVV, where `copy` returns `this`, or + * (2) implementing a fixed-size RAVV. + */ int size(); /** Return the dimension of the returned vector values */ @@ -58,6 +64,8 @@ public interface RandomAccessVectorValues { * Creates a new copy of this {@link RandomAccessVectorValues}. This is helpful when you need to * access different values at once, to avoid overwriting the underlying float vector returned by * a shared {@link RandomAccessVectorValues#vectorValue}. + *

+ * Un-shared implementations may simply return `this`. */ RandomAccessVectorValues copy(); }