diff src/getset.cpp @ 7:93dfb83c6f82

Complete implementation of getOutputDescriptors
author Chris Cannam
date Thu, 26 Jan 2012 14:46:45 +0000
parents
children f3fc15d737eb
line wrap: on
line diff
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/src/getset.cpp	Thu Jan 26 14:46:45 2012 +0000
@@ -0,0 +1,74 @@
+
+#include "getset.h"
+
+#include <iostream>
+
+void
+setStringField(JNIEnv *env, jobject obj, std::string name, std::string value)
+{
+    jclass cls = env->GetObjectClass(obj);
+    env->SetObjectField(obj,
+			env->GetFieldID(cls, name.c_str(), "Ljava/lang/String;"),
+			env->NewStringUTF(value.c_str()));
+}
+
+void
+setFloatField(JNIEnv *env, jobject obj, std::string name, float value)
+{
+    jclass cls = env->GetObjectClass(obj);
+    env->SetFloatField(obj,
+		       env->GetFieldID(cls, name.c_str(), "F"),
+		       value);
+}
+
+void
+setBooleanField(JNIEnv *env, jobject obj, std::string name, bool value)
+{
+    jclass cls = env->GetObjectClass(obj);
+    env->SetBooleanField(obj,
+			 env->GetFieldID(cls, name.c_str(), "Z"),
+			 value);
+}
+
+void
+setIntField(JNIEnv *env, jobject obj, std::string name, int value)
+{
+    jclass cls = env->GetObjectClass(obj);
+    env->SetIntField(obj,
+		     env->GetFieldID(cls, name.c_str(), "I"),
+		     value);
+}
+
+void
+setObjectField(JNIEnv *env, jobject obj, std::string name, std::string type, jobject value)
+{
+    jclass cls = env->GetObjectClass(obj);
+    jfieldID field = env->GetFieldID(cls, name.c_str(), type.c_str());
+    std::cerr << "setObjectField: class = " << cls << ", object = " << obj << ", field = " << field << ", value = " << value << std::endl;
+    env->SetObjectField(obj, field, value);
+}
+
+void
+setStringArrayField(JNIEnv *env, jobject obj, std::string name, std::vector<std::string> values)
+{
+    jclass strCls = env->FindClass("java/lang/String");
+    jobjectArray jarr = env->NewObjectArray(values.size(), strCls, 0);
+    for (int i = 0; i < values.size(); ++i) {
+	env->SetObjectArrayElement(jarr, i, env->NewStringUTF(values[i].c_str()));
+    }
+    setObjectField(env, obj, name, "[Ljava/lang/String;", jarr);
+}
+
+jmethodID
+getEnumValueOfMethod(JNIEnv *env)
+{
+    jclass enumClass = env->FindClass("java/lang/Enum");
+
+    // Enum.valueOf(Class, String) returns Enum
+    jmethodID valueOfMethod = env->GetStaticMethodID
+	(enumClass, "valueOf",
+	 "(Ljava/lang/Class;Ljava/lang/String;)Ljava/lang/Enum;");
+
+    return valueOfMethod;
+}
+