in java/com_spotify_voyager_jni_Index.cpp [132:170]
jobject toSpaceType(JNIEnv *env, SpaceType enumVal) {
jclass enumClass = env->FindClass("com/spotify/voyager/jni/Index$SpaceType");
if (!enumClass) {
throw std::runtime_error(
"C++ bindings could not find SpaceType Java enum!");
}
const char *enumValueName = nullptr;
switch (enumVal) {
case SpaceType::Euclidean:
enumValueName = "Euclidean";
break;
case SpaceType::InnerProduct:
enumValueName = "InnerProduct";
break;
case SpaceType::Cosine:
enumValueName = "Cosine";
break;
default:
throw std::runtime_error(
"Voyager C++ bindings received unknown enum value.");
}
jfieldID fieldID = env->GetStaticFieldID(
enumClass, enumValueName, "Lcom/spotify/voyager/jni/Index$SpaceType;");
if (!fieldID) {
throw std::runtime_error(
"C++ bindings could not find value in SpaceType Java enum!");
}
jobject javaValue = env->GetStaticObjectField(enumClass, fieldID);
if (!javaValue) {
throw std::runtime_error("C++ bindings could not find static object field "
"for in SpaceType Java enum!");
}
return javaValue;
}