annotate src/getset.cpp @ 55:2b8e1416327d tip

Just change a couple of include guards
author Chris Cannam
date Wed, 16 Nov 2016 09:12:46 +0000
parents 2db3640905ef
children
rev   line source
Chris@37 1 /*
Chris@37 2 jVamp
Chris@37 3
Chris@37 4 A Java host interface for Vamp audio analysis plugins
Chris@37 5
Chris@37 6 Centre for Digital Music, Queen Mary, University of London.
Chris@37 7 Copyright 2012 Chris Cannam and QMUL.
Chris@37 8
Chris@37 9 Permission is hereby granted, free of charge, to any person
Chris@37 10 obtaining a copy of this software and associated documentation
Chris@37 11 files (the "Software"), to deal in the Software without
Chris@37 12 restriction, including without limitation the rights to use, copy,
Chris@37 13 modify, merge, publish, distribute, sublicense, and/or sell copies
Chris@37 14 of the Software, and to permit persons to whom the Software is
Chris@37 15 furnished to do so, subject to the following conditions:
Chris@37 16
Chris@37 17 The above copyright notice and this permission notice shall be
Chris@37 18 included in all copies or substantial portions of the Software.
Chris@37 19
Chris@37 20 THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
Chris@37 21 EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
Chris@37 22 MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
Chris@37 23 NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS BE LIABLE FOR
Chris@37 24 ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF
Chris@37 25 CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
Chris@37 26 WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
Chris@37 27
Chris@37 28 Except as contained in this notice, the names of the Centre for
Chris@37 29 Digital Music; Queen Mary, University of London; and Chris Cannam
Chris@37 30 shall not be used in advertising or otherwise to promote the sale,
Chris@37 31 use or other dealings in this Software without prior written
Chris@37 32 authorization.
Chris@37 33 */
Chris@7 34
Chris@7 35 #include "getset.h"
Chris@7 36
Chris@7 37 #include <iostream>
Chris@7 38
Chris@10 39 int
Chris@10 40 getIntField(JNIEnv *env, jobject obj, std::string name)
Chris@10 41 {
Chris@10 42 jclass cls = env->GetObjectClass(obj);
Chris@12 43 return env->GetIntField(obj,
Chris@12 44 env->GetFieldID(cls, name.c_str(), "I"));
Chris@10 45 }
Chris@10 46
Chris@49 47 Vamp::RealTime
Chris@49 48 getRealTime(JNIEnv *env, jobject obj)
Chris@49 49 {
Chris@49 50 int s = getIntField(env, obj, "m_s");
Chris@49 51 int n = getIntField(env, obj, "m_n");
Chris@49 52 return Vamp::RealTime(s, n);
Chris@49 53 }
Chris@49 54
Chris@7 55 void
Chris@7 56 setStringField(JNIEnv *env, jobject obj, std::string name, std::string value)
Chris@7 57 {
Chris@7 58 jclass cls = env->GetObjectClass(obj);
Chris@7 59 env->SetObjectField(obj,
Chris@7 60 env->GetFieldID(cls, name.c_str(), "Ljava/lang/String;"),
Chris@7 61 env->NewStringUTF(value.c_str()));
Chris@7 62 }
Chris@7 63
Chris@7 64 void
Chris@7 65 setFloatField(JNIEnv *env, jobject obj, std::string name, float value)
Chris@7 66 {
Chris@7 67 jclass cls = env->GetObjectClass(obj);
Chris@7 68 env->SetFloatField(obj,
Chris@7 69 env->GetFieldID(cls, name.c_str(), "F"),
Chris@7 70 value);
Chris@7 71 }
Chris@7 72
Chris@7 73 void
Chris@7 74 setBooleanField(JNIEnv *env, jobject obj, std::string name, bool value)
Chris@7 75 {
Chris@7 76 jclass cls = env->GetObjectClass(obj);
Chris@7 77 env->SetBooleanField(obj,
Chris@7 78 env->GetFieldID(cls, name.c_str(), "Z"),
Chris@7 79 value);
Chris@7 80 }
Chris@7 81
Chris@7 82 void
Chris@7 83 setIntField(JNIEnv *env, jobject obj, std::string name, int value)
Chris@7 84 {
Chris@7 85 jclass cls = env->GetObjectClass(obj);
Chris@7 86 env->SetIntField(obj,
Chris@7 87 env->GetFieldID(cls, name.c_str(), "I"),
Chris@7 88 value);
Chris@7 89 }
Chris@7 90
Chris@7 91 void
Chris@14 92 setRealTimeField(JNIEnv *env, jobject obj, std::string name, Vamp::RealTime rt)
Chris@14 93 {
Chris@14 94 jclass rtClass = env->FindClass("org/vamp_plugins/RealTime");
Chris@14 95 jmethodID ctor = env->GetMethodID(rtClass, "<init>", "(II)V");
Chris@14 96 jobject jrt = env->NewObject(rtClass, ctor, rt.sec, rt.nsec);
Chris@14 97 setObjectField(env, obj, name, "Lorg/vamp_plugins/RealTime;", jrt);
Chris@14 98 }
Chris@14 99
Chris@14 100 void
Chris@7 101 setObjectField(JNIEnv *env, jobject obj, std::string name, std::string type, jobject value)
Chris@7 102 {
Chris@7 103 jclass cls = env->GetObjectClass(obj);
Chris@7 104 jfieldID field = env->GetFieldID(cls, name.c_str(), type.c_str());
Chris@7 105 env->SetObjectField(obj, field, value);
Chris@7 106 }
Chris@7 107
Chris@7 108 void
Chris@14 109 setFloatArrayField(JNIEnv *env, jobject obj, std::string name, std::vector<float> values)
Chris@14 110 {
Chris@14 111 jfloatArray jarr = env->NewFloatArray(values.size());
Chris@14 112 env->SetFloatArrayRegion(jarr, 0, values.size(), values.data());
Chris@18 113 setObjectField(env, obj, name, "[F", jarr);
Chris@14 114 }
Chris@14 115
Chris@14 116 void
Chris@7 117 setStringArrayField(JNIEnv *env, jobject obj, std::string name, std::vector<std::string> values)
Chris@7 118 {
Chris@7 119 jclass strCls = env->FindClass("java/lang/String");
Chris@7 120 jobjectArray jarr = env->NewObjectArray(values.size(), strCls, 0);
chris@46 121 for (int i = 0; i < (int)values.size(); ++i) {
Chris@7 122 env->SetObjectArrayElement(jarr, i, env->NewStringUTF(values[i].c_str()));
Chris@7 123 }
Chris@7 124 setObjectField(env, obj, name, "[Ljava/lang/String;", jarr);
Chris@7 125 }
Chris@7 126
Chris@7 127 jmethodID
Chris@7 128 getEnumValueOfMethod(JNIEnv *env)
Chris@7 129 {
Chris@7 130 jclass enumClass = env->FindClass("java/lang/Enum");
Chris@7 131
Chris@7 132 // Enum.valueOf(Class, String) returns Enum
Chris@7 133 jmethodID valueOfMethod = env->GetStaticMethodID
Chris@7 134 (enumClass, "valueOf",
Chris@7 135 "(Ljava/lang/Class;Ljava/lang/String;)Ljava/lang/Enum;");
Chris@7 136
Chris@7 137 return valueOfMethod;
Chris@7 138 }
Chris@7 139