The branch, master has been updated via 507270cf6348bdc42d1eed23c7b5eed81cf0b7a6 (commit) from 8b475602893e1d2ce5e8889c60a5913accad3fe5 (commit) Those revisions listed above that are new to this repository have not appeared on any other notification email. - Log ----------------------------------------------------------------- commit 507270cf6348bdc42d1eed23c7b5eed81cf0b7a6 Author: Andrew Cagney <cagney@redhat.com> Date: Fri May 9 14:19:37 2008 -0400 Add templated JNI array methods; use. frysk-sys/frysk/jnixx/ChangeLog 2008-05-09 Andrew Cagney <cagney@redhat.com> * jnixx.hxx (jnixx::array): Add templated JNI array method. * chars.cxx: Use tempated array methods. * JniBindings.java: Drop String parameter to GetStringLength. ----------------------------------------------------------------------- Summary of changes: frysk-sys/frysk/jnixx/ChangeLog | 4 +++ frysk-sys/frysk/jnixx/JniBindings.java | 1 - frysk-sys/frysk/jnixx/chars.cxx | 34 ++++++++++++++++--------------- frysk-sys/frysk/jnixx/jnixx.hxx | 17 ++++++++++++++++ 4 files changed, 39 insertions(+), 17 deletions(-) First 500 lines of diff: diff --git a/frysk-sys/frysk/jnixx/ChangeLog b/frysk-sys/frysk/jnixx/ChangeLog index 32f77d0..1ba36ad 100644 --- a/frysk-sys/frysk/jnixx/ChangeLog +++ b/frysk-sys/frysk/jnixx/ChangeLog @@ -1,5 +1,9 @@ 2008-05-09 Andrew Cagney <cagney@redhat.com> + * jnixx.hxx (jnixx::array): Add templated JNI array method. + * chars.cxx: Use tempated array methods. + * JniBindings.java: Drop String parameter to GetStringLength. + * jni/Native.cxx (Native::sizeOfObject): Replace sizeOfJnixxObject. (Native::sizeOfObjectArray, Native::sizeOfClass): New. * cni/Native.cxx (Native::sizeOfObject): Replace sizeOfJnixxObject diff --git a/frysk-sys/frysk/jnixx/JniBindings.java b/frysk-sys/frysk/jnixx/JniBindings.java index 2e5dd23..8c1ae57 100644 --- a/frysk-sys/frysk/jnixx/JniBindings.java +++ b/frysk-sys/frysk/jnixx/JniBindings.java @@ -159,7 +159,6 @@ class JniBindings { .put(String.class, false, "jsize", "GetStringLength", new String[] { - "String", "string", }, new Object[] { "jsize len = _jni->GetStringLength((jstring)_object);", diff --git a/frysk-sys/frysk/jnixx/chars.cxx b/frysk-sys/frysk/jnixx/chars.cxx index 72ae122..11d2cb9 100644 --- a/frysk-sys/frysk/jnixx/chars.cxx +++ b/frysk-sys/frysk/jnixx/chars.cxx @@ -37,23 +37,25 @@ // version and license this file solely under the GPL without // exception. -#include "jni.hxx" #include <malloc.h> +#include "jni.hxx" #include "frysk/jnixx/chars.hxx" +using namespace java::lang; + char** -strings2chars(jnixx::env env, ::jnixx::array<java::lang::String> strings) { - jsize arrayLength = env.GetArrayLength((jobjectArray)strings._object); +strings2chars(jnixx::env env, ::jnixx::array<String> strings) { + jsize arrayLength = strings.GetArrayLength(env); // compute the allocated size. size_t size = 0; size += sizeof(void*); // NULL for (int i = 0; i < arrayLength; i++) { size += sizeof(void*); // pointer - jstring string = (jstring) env.GetObjectArrayElement((jobjectArray)strings._object, i); - size += env.GetStringUTFLength(string); // chars + String string = strings.GetObjectArrayElement(env, i); + size += string.GetStringUTFLength(env); // chars size += 1; // NUL - env.DeleteLocalRef(string); + string.DeleteLocalRef(env); } // Create the array. char **elements = (char**) ::malloc(size); @@ -63,29 +65,29 @@ strings2chars(jnixx::env env, ::jnixx::array<java::lang::String> strings) { // Copy for (int i = 0; i < arrayLength; i++) { *argv++ = arg; - jstring string = (jstring)env.GetObjectArrayElement((jobjectArray)strings._object, i); - int utfLength = env.GetStringUTFLength(string); - env.GetStringUTFRegion(string, 0, env.GetStringLength(string), arg); + String string = strings.GetObjectArrayElement(env, i); + int utfLength = string.GetStringUTFLength(env); + string.GetStringUTFRegion(env, 0, string.GetStringLength(env), arg); arg += utfLength; - env.DeleteLocalRef(string); + string.DeleteLocalRef(env); *arg++ = '\0'; } *argv = NULL; return elements; } -::jnixx::array<java::lang::String> +::jnixx::array<String> chars2strings(::jnixx::env env, char** argv) { int length = 0; for (char **p = argv; *p != NULL; p++) { length++; } - jclass stringClass = ::java::lang::String::_class_(env); - jobjectArray strings = env.NewObjectArray(length, stringClass, NULL); + ::jnixx::array<String> strings + = ::jnixx::array<String>::NewObjectArray(env, length, NULL); for (int i = 0; i < length; i++) { - jstring string = env.NewStringUTF(argv[i]); - env.SetObjectArrayElement(strings, i, string); - env.DeleteLocalRef(string); + String string = String::NewStringUTF(env, argv[i]); + strings.SetObjectArrayElement(env, i, string); + string.DeleteLocalRef(env); } return strings; } diff --git a/frysk-sys/frysk/jnixx/jnixx.hxx b/frysk-sys/frysk/jnixx/jnixx.hxx index 4f8c999..e894821 100644 --- a/frysk-sys/frysk/jnixx/jnixx.hxx +++ b/frysk-sys/frysk/jnixx/jnixx.hxx @@ -1478,6 +1478,10 @@ namespace jnixx { bool operator==(jobject o) { return _object == o; } + void DeleteLocalRef(jnixx::env env) { + env.DeleteLocalRef(_object); + _object = NULL; + } }; /** @@ -1488,6 +1492,19 @@ namespace jnixx { public: array(jobject _object) : object(_object) { } + jsize GetArrayLength(::jnixx::env env) { + return env.GetArrayLength((jarray)_object); + } + static array<Object> NewObjectArray(::jnixx::env env, jsize length, + ::jnixx::object init) { + return env.NewObjectArray(length, Object::_class_(env), init._object); + } + Object GetObjectArrayElement(::jnixx::env env, jsize index) { + return env.GetObjectArrayElement((jobjectArray)_object, index); + } + void SetObjectArrayElement(::jnixx::env env, jsize index, Object object) { + env.SetObjectArrayElement((jobjectArray)_object, index, object._object); + } }; } hooks/post-receive -- frysk system monitor/debugger