summaryrefslogtreecommitdiff
path: root/platform/android/src/geojson/util.hpp
diff options
context:
space:
mode:
authorIvo van Dongen <info@ivovandongen.nl>2018-03-13 12:31:56 +0200
committerIvo van Dongen <ivovandongen@users.noreply.github.com>2018-03-19 11:19:09 +0200
commit2464520da18f0f4cc7532adb3fb7b1f8f195304e (patch)
tree8a391da645a7a84fce5ba2e05a0ef2422474d0cd /platform/android/src/geojson/util.hpp
parentf2fbe69b32d7683d489b1f259b6db49070736980 (diff)
downloadqtlocation-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.hpp38
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