# HG changeset patch # User Chris Cannam # Date 1328546194 0 # Node ID 47b648d1b261305f96c51d7282ec460b492e8697 # Parent f7ca3afb429c14a776fb23c3d88a6abbb2b8c424 Provisional implementation of convertFeatures diff -r f7ca3afb429c -r 47b648d1b261 src/Plugin.cpp --- a/src/Plugin.cpp Fri Jan 27 18:19:45 2012 +0000 +++ b/src/Plugin.cpp Mon Feb 06 16:36:34 2012 +0000 @@ -281,9 +281,44 @@ jobject result; // FeatureSet is map > where Feature is a struct. + // We need to return a TreeMap> - + jclass treeMapClass = env->FindClass("java/util/TreeMap"); + jmethodID treeMapCtor = env->GetMethodID(treeMapClass, "", "()V"); + jmethodID inserter = env->GetMethodID + (treeMapClass, "put", + "(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;"); + jclass listClass = env->FindClass("java/util/ArrayList"); + jmethodID listCtor = env->GetMethodID(listClass, "", "()V"); + jmethodID adder = env->GetMethodID + (listClass, "add", "(Ljava/lang/Object;)Z"); + + jclass intClass = env->FindClass("java/lang/Integer"); + jmethodID intCtor = env->GetMethodID(intClass, "", "(I)V"); + + result = env->NewObject(treeMapClass, treeMapCtor); + + for (Plugin::FeatureSet::const_iterator i = features.begin(); + i != features.end(); ++i) { + + int output = i->first; + const Plugin::FeatureList &fl = i->second; + + jobject listObject = env->NewObject(listClass, listCtor); + + for (Plugin::FeatureList::const_iterator j = fl.begin(); + j != fl.end(); ++j) { + jobject feature = convertFeature(env, *j); + (void)env->CallBooleanMethod(listObject, adder, feature); + } + + jobject integer = env->NewObject(intClass, intCtor, output); + + (void)env->CallObjectMethod(result, inserter, integer, listObject); + } + + return result; } jobject