public inbox for frysk-cvs@sourceware.org
help / color / mirror / Atom feed
From: cagney@sourceware.org
To: frysk-cvs@sourceware.org
Subject: [SCM]  master: Add templated JNI array methods; use.
Date: Fri, 09 May 2008 18:20:00 -0000	[thread overview]
Message-ID: <20080509182017.16188.qmail@sourceware.org> (raw)

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


                 reply	other threads:[~2008-05-09 18:20 UTC|newest]

Thread overview: [no followups] expand[flat|nested]  mbox.gz  Atom feed

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20080509182017.16188.qmail@sourceware.org \
    --to=cagney@sourceware.org \
    --cc=frysk-cvs@sourceware.org \
    --cc=frysk@sourceware.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
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).