JNIEXPORT jobject JNICALL Java_com_uber_neuropod_NeuropodTensor_nativeToStringList()

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