#pragma once #include #include "../../conversion/conversion.hpp" #include "../../conversion/constant.hpp" #include "types.hpp" #include "function.hpp" #include #include #include namespace mbgl { namespace android { namespace conversion { template inline jni::jobject* toFunctionStopJavaArray(jni::JNIEnv& env, std::vector> value) { static jni::jclass* javaClass = jni::NewGlobalRef(env, &jni::FindClass(env, "com/mapbox/mapboxsdk/style/layers/Function$Stop")).release(); static jni::jmethodID* constructor = &jni::GetMethodID(env, *javaClass, "", "(Ljava/lang/Object;Ljava/lang/Object;)V"); jni::jarray& jarray = jni::NewObjectArray(env, value.size(), *javaClass); for(size_t i = 0; i < value.size(); i = i + 1) { jni::jobject* in = *convert(env, value[i].first); jni::jobject* out = *convert(env, value[i].second); jni::SetObjectArrayElement(env, jarray, i, &jni::NewObject(env, *javaClass, *constructor, in, out)); } return &jarray; } template struct Converter> { Result operator()(jni::JNIEnv& env, const mbgl::style::Function& value) const { static jni::jclass* javaClass = jni::NewGlobalRef(env, &jni::FindClass(env, "com/mapbox/mapboxsdk/style/layers/Function")).release(); static jni::jmethodID* constructor = &jni::GetMethodID(env, *javaClass, "", "([Lcom/mapbox/mapboxsdk/style/layers/Function$Stop;)V"); static jni::jmethodID* withBase = &jni::GetMethodID(env, *javaClass, "withBase", "(F)Lcom/mapbox/mapboxsdk/style/layers/Function;"); //Create object jni::jobject* jfunction = &jni::NewObject(env, *javaClass, *constructor, *toFunctionStopJavaArray(env, value.getStops())); //Set base jni::CallMethod(env, jfunction, *withBase, value.getBase()); return {jfunction}; } }; } // namespace conversion } // namespace android } // namespace mbgl