diff options
author | Ivo van Dongen <info@ivovandongen.nl> | 2018-03-13 12:31:56 +0200 |
---|---|---|
committer | Ivo van Dongen <ivovandongen@users.noreply.github.com> | 2018-03-19 11:19:09 +0200 |
commit | 2464520da18f0f4cc7532adb3fb7b1f8f195304e (patch) | |
tree | 8a391da645a7a84fce5ba2e05a0ef2422474d0cd /platform/android/src/geojson/util.hpp | |
parent | f2fbe69b32d7683d489b1f259b6db49070736980 (diff) | |
download | qtlocation-mapboxgl-2464520da18f0f4cc7532adb3fb7b1f8f195304e.tar.gz |
[android] high-level jni bindings for geojson conversion
Diffstat (limited to 'platform/android/src/geojson/util.hpp')
-rw-r--r-- | platform/android/src/geojson/util.hpp | 38 |
1 files changed, 38 insertions, 0 deletions
diff --git a/platform/android/src/geojson/util.hpp b/platform/android/src/geojson/util.hpp index ece8e52433..5e6d90a953 100644 --- a/platform/android/src/geojson/util.hpp +++ b/platform/android/src/geojson/util.hpp @@ -1,5 +1,7 @@ #pragma once +#include "point.hpp" + #include <type_traits> namespace mbgl { @@ -17,6 +19,42 @@ To convertExplicit(From&& src) { return *reinterpret_cast<std::add_pointer_t<To>>(&src); } +/** + * Geometry -> List<Point> + */ +template <class T> +static jni::Object<java::util::List> asPointsList(jni::JNIEnv& env, const T& pointsList) { + auto jarray = jni::Array<jni::Object<Point>>::New(env, pointsList.size(), Point::javaClass); + + for (jni::jsize i = 0; i < pointsList.size(); i++) { + auto jPoint = Point::New(env, pointsList.at(i)); + jarray.Set(env, i, jPoint); + jni::DeleteLocalRef(env, jPoint); + } + + auto jList = java::util::Arrays::asList(env, jarray); + jni::DeleteLocalRef(env, jarray); + return jList; +} + +/** + * Geometry -> List<List<Point>> + */ +template <class SHAPE> +static jni::Object<java::util::List> asPointsListsList(JNIEnv& env, SHAPE value) { + auto jarray = jni::Array<jni::Object<java::util::List>>::New(env, value.size(), java::util::List::javaClass); + + for (size_t i = 0; i < value.size(); i = i + 1) { + auto pointsList = asPointsList(env, value[i]); + jarray.Set(env, i, pointsList); + jni::DeleteLocalRef(env, pointsList); + } + + auto jList = java::util::Arrays::asList(env, jarray); + jni::DeleteLocalRef(env, jarray); + return jList; +} + } // namespace geojson } // namespace android } // namespace mbgl |