jobject toSpaceType()

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;
}