public inbox for frysk-cvs@sourceware.org
help / color / mirror / Atom feed
* [SCM]  master: Add templated JNI array methods; use.
@ 2008-05-09 18:20 cagney
  0 siblings, 0 replies; only message in thread
From: cagney @ 2008-05-09 18:20 UTC (permalink / raw)
  To: frysk-cvs

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


^ permalink raw reply	[flat|nested] only message in thread

only message in thread, other threads:[~2008-05-09 18:20 UTC | newest]

Thread overview: (only message) (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2008-05-09 18:20 [SCM] master: Add templated JNI array methods; use cagney

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).