From 41c53cb0b46da276b13191b08c67ab18c1a67079 Mon Sep 17 00:00:00 2001 From: Alex Zolotarev Date: Mon, 18 May 2015 14:13:02 +0300 Subject: [PATCH] C++ linkage warning fix. --- android/jni/com/mapswithme/maps/Framework.cpp | 47 ++++++++++--------- 1 file changed, 25 insertions(+), 22 deletions(-) diff --git a/android/jni/com/mapswithme/maps/Framework.cpp b/android/jni/com/mapswithme/maps/Framework.cpp index d5a787f530..fc1cd87c83 100644 --- a/android/jni/com/mapswithme/maps/Framework.cpp +++ b/android/jni/com/mapswithme/maps/Framework.cpp @@ -837,30 +837,33 @@ T const * CastMark(UserMark const * data) * \/ */ +namespace +{ +pair NativeMetadataToJavaMetadata(JNIEnv * env, feature::FeatureMetadata const & metadata) +{ + const vector metaTypes = metadata.GetPresentTypes(); + // FIXME arrays, allocated through NewArray should be deleted manually in the method. + // refactor that to delete refs locally or pass arrays from outside context + const jintArray j_metaTypes = env->NewIntArray(metadata.Size()); + jint * arr = env->GetIntArrayElements(j_metaTypes, 0); + const jobjectArray j_metaValues = env->NewObjectArray(metadata.Size(), jni::GetStringClass(env), 0); + + for (size_t i = 0; i < metaTypes.size(); i++) + { + arr[i] = metaTypes[i]; + feature::FeatureMetadata::EMetadataType metaType = static_cast(metaTypes[i]); + jstring metaString = jni::ToJavaString(env, metadata.Get(metaType)); + env->SetObjectArrayElement(j_metaValues, i, metaString); + env->DeleteLocalRef(metaString); + } + env->ReleaseIntArrayElements(j_metaTypes, arr, 0); + + return make_pair(j_metaTypes, j_metaValues); +} +} // namespace + extern "C" { - pair NativeMetadataToJavaMetadata(JNIEnv * env, feature::FeatureMetadata const & metadata) - { - const vector metaTypes = metadata.GetPresentTypes(); - // FIXME arrays, allocated through NewArray should be deleted manually in the method. - // refactor that to delete refs locally or pass arrays from outside context - const jintArray j_metaTypes = env->NewIntArray(metadata.Size()); - jint * arr = env->GetIntArrayElements(j_metaTypes, 0); - const jobjectArray j_metaValues = env->NewObjectArray(metadata.Size(), jni::GetStringClass(env), 0); - - for (size_t i = 0; i < metaTypes.size(); i++) - { - arr[i] = metaTypes[i]; - feature::FeatureMetadata::EMetadataType metaType = static_cast(metaTypes[i]); - jstring metaString = jni::ToJavaString(env, metadata.Get(metaType)); - env->SetObjectArrayElement(j_metaValues, i, metaString); - env->DeleteLocalRef(metaString); - } - env->ReleaseIntArrayElements(j_metaTypes, arr, 0); - - return make_pair(j_metaTypes, j_metaValues); - } - // API void CallOnApiPointActivatedListener(shared_ptr obj, ApiMarkPoint const * data, double lat, double lon) {