in java/com_spotify_voyager_jni_Index.cpp [644:674]
jobjectArray Java_com_spotify_voyager_jni_Index_getVectors(JNIEnv *env,
jobject self,
jlongArray ids) {
try {
std::shared_ptr<Index> index = getHandle<Index>(env, self);
NDArray<float, 2> vectors =
index->getVectors(toUnsignedStdVector(env, ids));
jclass floatArrayClass = env->FindClass("[F");
if (!floatArrayClass) {
throw std::runtime_error("C++ bindings failed to find float[] class.");
}
jobjectArray javaVectors =
env->NewObjectArray(vectors.shape[0], floatArrayClass, NULL);
for (int i = 0; i < vectors.shape[0]; i++) {
jfloatArray vector = env->NewFloatArray(vectors.shape[1]);
env->SetFloatArrayRegion(vector, 0, vectors.shape[1], vectors[i]);
env->SetObjectArrayElement(javaVectors, i, vector);
env->DeleteLocalRef(vector);
}
return javaVectors;
} catch (std::exception const &e) {
if (!env->ExceptionCheck()) {
env->ThrowNew(env->FindClass("java/lang/RuntimeException"), e.what());
}
return nullptr;
}
}