diff --git a/jvector-base/src/main/java/io/github/jbellis/jvector/vector/ArrayVectorFloat.java b/jvector-base/src/main/java/io/github/jbellis/jvector/vector/ArrayVectorFloat.java index 32dce1f35..46c7a59dc 100644 --- a/jvector-base/src/main/java/io/github/jbellis/jvector/vector/ArrayVectorFloat.java +++ b/jvector-base/src/main/java/io/github/jbellis/jvector/vector/ArrayVectorFloat.java @@ -18,6 +18,7 @@ import io.github.jbellis.jvector.disk.IndexWriter; import io.github.jbellis.jvector.util.RamUsageEstimator; +import io.github.jbellis.jvector.vector.types.FloatArray; import io.github.jbellis.jvector.vector.types.VectorFloat; import java.io.IOException; @@ -26,7 +27,7 @@ /** * VectorFloat implementation backed by an on-heap float array. */ -final public class ArrayVectorFloat implements VectorFloat +final public class ArrayVectorFloat implements VectorFloat, FloatArray { private final float[] data; @@ -123,5 +124,10 @@ public int hashCode() { return this.getHashCode(); } + + @Override + public float[] array() { + return get(); + } } diff --git a/jvector-base/src/main/java/io/github/jbellis/jvector/vector/types/FloatArray.java b/jvector-base/src/main/java/io/github/jbellis/jvector/vector/types/FloatArray.java new file mode 100644 index 000000000..480943678 --- /dev/null +++ b/jvector-base/src/main/java/io/github/jbellis/jvector/vector/types/FloatArray.java @@ -0,0 +1,25 @@ +/* + * Copyright DataStax, Inc. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package io.github.jbellis.jvector.vector.types; + +/** + * Return the {@code float[]} representation of the {@link VectorFloat} if its type supports + * such conversions. + */ +public interface FloatArray { + float[] array(); +} diff --git a/jvector-native/src/main/java/io/github/jbellis/jvector/vector/MemorySegmentVectorFloat.java b/jvector-native/src/main/java/io/github/jbellis/jvector/vector/MemorySegmentVectorFloat.java index 3e3f67e1f..4227629aa 100644 --- a/jvector-native/src/main/java/io/github/jbellis/jvector/vector/MemorySegmentVectorFloat.java +++ b/jvector-native/src/main/java/io/github/jbellis/jvector/vector/MemorySegmentVectorFloat.java @@ -18,6 +18,7 @@ import io.github.jbellis.jvector.disk.IndexWriter; import io.github.jbellis.jvector.util.RamUsageEstimator; +import io.github.jbellis.jvector.vector.types.FloatArray; import io.github.jbellis.jvector.vector.types.VectorFloat; import java.io.IOException; @@ -27,7 +28,7 @@ /** * VectorFloat implementation backed by an on-heap MemorySegment. */ -final public class MemorySegmentVectorFloat implements VectorFloat +final public class MemorySegmentVectorFloat implements VectorFloat, FloatArray { private final MemorySegment segment; @@ -141,4 +142,9 @@ public boolean equals(Object o) public int hashCode() { return this.getHashCode(); } + + @Override + public float[] array() { + return (float[])segment.heapBase().get(); + } }