#pragma once #include "point.hpp" #include namespace mbgl { namespace android { namespace geojson { // Clang 3.8 fails to implicitly convert matching types, so we'll have to do it explicitly. template To convertExplicit(From&& src) { static_assert(std::is_same::container_type, typename To::container_type>::value, "container types do not match"); static_assert(std::is_rvalue_reference::value, "argument must be rvalue reference"); return *reinterpret_cast>(&src); } /** * Geometry -> List */ template static jni::Local> asPointsList(jni::JNIEnv& env, const T& pointsList) { auto jarray = jni::Array>::New(env, pointsList.size()); for (jni::jsize i = 0; i < pointsList.size(); i++) { jarray.Set(env, i, Point::New(env, pointsList.at(i))); } return java::util::Arrays::asList(env, jarray); } /** * Geometry -> List> */ template static jni::Local> asPointsListsList(JNIEnv& env, const SHAPE& value) { auto jarray = jni::Array>::New(env, value.size()); for (size_t i = 0; i < value.size(); i++) { jarray.Set(env, i, asPointsList(env, value[i])); } return java::util::Arrays::asList(env, jarray); } } // namespace geojson } // namespace android } // namespace mbgl