#pragma once #include #include #include "../../conversion/conversion.hpp" #include "../../conversion/constant.hpp" #include "types.hpp" #include "function.hpp" namespace mbgl { namespace android { namespace conversion { /** * Conversion from core property value types to Java property value types */ template class PropertyValueEvaluator { public: PropertyValueEvaluator(jni::JNIEnv& _env) : env(_env) {} jni::jobject* operator()(const mbgl::style::Undefined) const { return nullptr; } jni::jobject* operator()(const T &value) const { Result result = convert(env, value); return *result; } jni::jobject* operator()(const mbgl::style::CameraFunction &value) const { return *convert>(env, value); } jni::jobject* operator()(const mbgl::style::SourceFunction &value) const { return *convert>(env, value); } jni::jobject* operator()(const mbgl::style::CompositeFunction &value) const { return *convert>(env, value); } private: jni::JNIEnv& env; }; /** * Convert core property values to java */ template struct Converter> { Result operator()(jni::JNIEnv& env, const mbgl::style::PropertyValue& value) const { PropertyValueEvaluator evaluator(env); return value.evaluate(evaluator); } }; /** * Convert core data driven property values to java */ template struct Converter> { Result operator()(jni::JNIEnv& env, const mbgl::style::DataDrivenPropertyValue& value) const { PropertyValueEvaluator evaluator(env); return value.evaluate(evaluator); } }; } // namespace conversion } // namespace android } // namespace mbgl