#pragma once #include "conversion.hpp" #include #include #include #include #include #include #include namespace mbgl { namespace android { namespace conversion { template <> struct Converter>, bool> { Result>> operator()(jni::JNIEnv& env, const bool& value) const; }; template <> struct Converter>, float> { Result>> operator()(jni::JNIEnv& env, const float& value) const; }; template <> struct Converter>, double> { Result>> operator()(jni::JNIEnv& env, const double& value) const; }; /** * All integrals. java is limited to 64 bit signed, so... * TODO: use BigDecimal for > 64 / unsigned? */ template struct Converter>, T, typename std::enable_if::value>::type> { Result>> operator()(jni::JNIEnv& env, const T& value) const { return jni::Box(env, jni::jlong(value)); } }; // TODO: convert integral types to primitive jni types template <> struct Converter>, std::string> { Result>> operator()(jni::JNIEnv& env, const std::string& value) const; }; template <> struct Converter>, Color> { Result>> operator()(jni::JNIEnv& env, const Color& value) const; }; template <> struct Converter>, style::expression::Formatted> { Result>> operator()(jni::JNIEnv& env, const style::expression::Formatted& value) const; }; template struct Converter>, std::array> { Result>> operator()(jni::JNIEnv& env, const std::array& value) const { std::vector v; for (const float& id : value) { v.push_back(id); } return convert>, std::vector>(env, v); } }; template <> struct Converter>, std::vector> { Result>> operator()(jni::JNIEnv& env, const std::vector& value) const; }; template <> struct Converter>, std::vector> { Result>> operator()(jni::JNIEnv& env, const std::vector& value) const; }; template <> struct Converter>, style::RadialOffsetType> : public Converter>, std::vector> { }; template struct Converter>, T, typename std::enable_if_t::value>> { Result>> operator()(jni::JNIEnv& env, const T& value) const { return convert>, std::string>(env, Enum::toString(value)); } }; template struct Converter>, std::vector, typename std::enable_if_t::value>> { Result>> operator()(jni::JNIEnv& env, const std::vector& value) const { auto result = jni::Array::New(env, value.size()); for (std::size_t i = 0; i < value.size(); ++i) { result.Set(env, i, jni::Make(env, Enum::toString(value.at(i)))); } return result; } }; } // namespace conversion } // namespace android } // namespace mbgl