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