#pragma once #include "conversion.hpp" #include "constant.hpp" #include #include #include namespace mbgl { namespace android { namespace conversion { /** * Convert jarray -> ArrayList */ template inline jni::jobject* toArrayList(JNIEnv& env, jni::jarray& array) { static jni::jclass* javaClass = jni::NewGlobalRef(env, &jni::FindClass(env, "java/util/Arrays")).release(); static jni::jmethodID* asList = &jni::GetStaticMethodID(env, *javaClass, "asList", "([Ljava/lang/Object;)Ljava/util/List;"); return reinterpret_cast(jni::CallStaticMethod(env, *javaClass, *asList, array)); } // Java -> C++ inline std::vector toVector(JNIEnv& env, jni::jarray& array) { std::vector vector; std::size_t len = jni::GetArrayLength(env, array); vector.reserve(len); for (std::size_t i = 0; i < len; i++) { jni::jstring* jstr = reinterpret_cast(jni::GetObjectArrayElement(env, array, i)); vector.push_back(*convert(env, jni::String(jstr))); jni::DeleteLocalRef(env, jstr); } return vector; } inline std::vector toVector(JNIEnv& env, jni::Array array) { std::size_t len = array.Length(env); std::vector vector; vector.reserve(len); for (std::size_t i = 0; i < len; i++) { jni::String jstr = array.Get(env, i); vector.push_back(*convert(env, jstr)); jni::DeleteLocalRef(env, jstr); } return vector; } } } }