in source/neuropod/bindings/java/src/main/native/com_uber_neuropod_NeuropodTensor.cc [134:164]
JNIEXPORT jobject JNICALL Java_com_uber_neuropod_NeuropodTensor_nativeToStringList(JNIEnv *env, jclass, jlong handle)
{
try
{
auto stringTensor = (*reinterpret_cast<std::shared_ptr<neuropod::NeuropodValue> *>(handle))
->as_tensor()
->as_typed_tensor<std::string>();
auto size = stringTensor->get_num_elements();
jobject ret = env->NewObject(njni::java_util_ArrayList, njni::java_util_ArrayList_, size);
if (!ret || env->ExceptionCheck())
{
throw std::runtime_error("NewObject failed: cannot create ArrayList");
}
auto flatAccessor = stringTensor->flat();
for (size_t i = 0; i < size; ++i)
{
const std::string &elem = flatAccessor[i];
jstring convertedElem = njni::to_jstring(env, elem);
env->CallBooleanMethod(ret, njni::java_util_ArrayList_add, convertedElem);
env->DeleteLocalRef(convertedElem);
}
return ret;
}
catch (const std::exception &e)
{
njni::throw_java_exception(env, e.what());
}
return nullptr;
}