From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 16228 invoked by alias); 9 May 2008 18:20:18 -0000 Received: (qmail 16203 invoked by uid 367); 9 May 2008 18:20:17 -0000 Date: Fri, 09 May 2008 18:20:00 -0000 Message-ID: <20080509182017.16188.qmail@sourceware.org> From: cagney@sourceware.org To: frysk-cvs@sourceware.org Subject: [SCM] master: Add templated JNI array methods; use. X-Git-Refname: refs/heads/master X-Git-Reftype: branch X-Git-Oldrev: 8b475602893e1d2ce5e8889c60a5913accad3fe5 X-Git-Newrev: 507270cf6348bdc42d1eed23c7b5eed81cf0b7a6 Mailing-List: contact frysk-cvs-help@sourceware.org; run by ezmlm Precedence: bulk List-Id: List-Subscribe: List-Post: List-Help: , Sender: frysk-cvs-owner@sourceware.org Reply-To: frysk@sourceware.org X-SW-Source: 2008-q2/txt/msg00216.txt.bz2 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 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 * 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 + * 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 +#include "jni.hxx" #include "frysk/jnixx/chars.hxx" +using namespace java::lang; + char** -strings2chars(jnixx::env env, ::jnixx::array strings) { - jsize arrayLength = env.GetArrayLength((jobjectArray)strings._object); +strings2chars(jnixx::env env, ::jnixx::array 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 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 +::jnixx::array 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 strings + = ::jnixx::array::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 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