diff options
Diffstat (limited to 'Source/Android/jni/AndroidCommon/AndroidCommon.h')
| -rw-r--r-- | Source/Android/jni/AndroidCommon/AndroidCommon.h | 23 |
1 files changed, 16 insertions, 7 deletions
diff --git a/Source/Android/jni/AndroidCommon/AndroidCommon.h b/Source/Android/jni/AndroidCommon/AndroidCommon.h index cc86795418..e04180ef20 100644 --- a/Source/Android/jni/AndroidCommon/AndroidCommon.h +++ b/Source/Android/jni/AndroidCommon/AndroidCommon.h @@ -4,6 +4,7 @@ #pragma once #include <ios> +#include <span> #include <string> #include <string_view> #include <vector> @@ -14,22 +15,30 @@ std::string GetJString(JNIEnv* env, jstring jstr); jstring ToJString(JNIEnv* env, std::string_view str); std::vector<std::string> JStringArrayToVector(JNIEnv* env, jobjectArray array); -jobjectArray VectorToJStringArray(JNIEnv* env, const std::vector<std::string>& vector); +jobjectArray SpanToJStringArray(JNIEnv* env, std::span<const std::string_view> span); +jobjectArray SpanToJStringArray(JNIEnv* env, std::span<const std::string> span); template <typename T, typename F> -jobjectArray VectorToJObjectArray(JNIEnv* env, const std::vector<T>& vector, jclass clazz, F f) +jobjectArray SpanToJObjectArray(JNIEnv* env, std::span<const T> span, jclass clazz, F f) { - const auto vector_size = static_cast<jsize>(vector.size()); - jobjectArray result = env->NewObjectArray(vector_size, clazz, nullptr); - for (jsize i = 0; i < vector_size; ++i) + const auto span_size = static_cast<jsize>(span.size()); + jobjectArray result = env->NewObjectArray(span_size, clazz, nullptr); + for (jsize i = 0; i < span_size; ++i) { - jobject obj = f(env, vector[i]); + jobject obj = f(env, span[i]); env->SetObjectArrayElement(result, i, obj); env->DeleteLocalRef(obj); } return result; } +template <typename T, typename F> +inline jobjectArray VectorToJObjectArray(JNIEnv* env, const std::vector<T>& vector, jclass clazz, + F f) +{ + return SpanToJObjectArray(env, std::span(vector), clazz, f); +} + // Returns true if the given path should be opened as Android content instead of a normal file. bool IsPathAndroidContent(std::string_view uri); @@ -55,7 +64,7 @@ std::string GetAndroidContentDisplayName(std::string_view uri); std::vector<std::string> GetAndroidContentChildNames(std::string_view uri); std::vector<std::string> DoFileSearchAndroidContent(std::string_view directory, - const std::vector<std::string>& extensions, + std::span<const std::string_view> extensions, bool recursive); int GetNetworkIpAddress(); |
