public inbox for frysk-cvs@sourceware.org
help / color / mirror / Atom feed
* [SCM]  master: Generate an instance of the jnixx::array template, when an array-of-object.
@ 2008-05-09 17:29 cagney
  0 siblings, 0 replies; only message in thread
From: cagney @ 2008-05-09 17:29 UTC (permalink / raw)
  To: frysk-cvs

The branch, master has been updated
       via  8b475602893e1d2ce5e8889c60a5913accad3fe5 (commit)
      from  eb784e7bbfbf822114e854b82e4c68ca470ed4f1 (commit)

Those revisions listed above that are new to this repository have
not appeared on any other notification email.

- Log -----------------------------------------------------------------
commit 8b475602893e1d2ce5e8889c60a5913accad3fe5
Author: Andrew Cagney <cagney@redhat.com>
Date:   Fri May 9 13:27:30 2008 -0400

    Generate an instance of the jnixx::array template, when an array-of-object.
    
    frysk-sys/frysk/jnixx/ChangeLog
    2008-05-09  Andrew Cagney  <cagney@redhat.com>
    
    	* jni/Native.cxx (Native::sizeOfObject): Replace sizeOfJnixxObject.
    	(Native::sizeOfObjectArray, Native::sizeOfClass): New.
    	* cni/Native.cxx (Native::sizeOfObject): Replace sizeOfJnixxObject
    	(Native::sizeOfClass, Native::sizeOfObjectArray): New.
    	* TestJnixx.java (testSizeOfObject): Replace testSizeofJnixxObject.
    	(testSizeOfObjectArray, testSizeOfClass): New.
    	* Native.java (sizeOfObjectArray()): New.
    	* Printer.java (printCxxName): For object array's generate a
    	templated class instance.
    	* PrintNamespaces.java: Don't generate array namespace names.
    	* chars.cxx (strings2chars): Use Array templates.
    	* chars.hxx: Ditto.

-----------------------------------------------------------------------

Summary of changes:
 frysk-sys/frysk/jnixx/ChangeLog              |   13 ++++++++++
 frysk-sys/frysk/jnixx/Native.java            |    4 ++-
 frysk-sys/frysk/jnixx/PrintDeclarations.java |   16 ------------
 frysk-sys/frysk/jnixx/PrintNamespaces.java   |   33 +++++++++++---------------
 frysk-sys/frysk/jnixx/Printer.java           |   11 +++++++-
 frysk-sys/frysk/jnixx/TestJnixx.java         |   14 ++++++++---
 frysk-sys/frysk/jnixx/chars.cxx              |    6 +++-
 frysk-sys/frysk/jnixx/chars.hxx              |    6 +---
 frysk-sys/frysk/jnixx/cni/Native.cxx         |   14 +++++++++-
 frysk-sys/frysk/jnixx/jni/Native.cxx         |   20 +++++++++++----
 frysk-sys/frysk/jnixx/jnixx.hxx              |   14 ++++++----
 11 files changed, 90 insertions(+), 61 deletions(-)

First 500 lines of diff:
diff --git a/frysk-sys/frysk/jnixx/ChangeLog b/frysk-sys/frysk/jnixx/ChangeLog
index a21c27d..32f77d0 100644
--- a/frysk-sys/frysk/jnixx/ChangeLog
+++ b/frysk-sys/frysk/jnixx/ChangeLog
@@ -1,5 +1,18 @@
 2008-05-09  Andrew Cagney  <cagney@redhat.com>
 
+	* jni/Native.cxx (Native::sizeOfObject): Replace sizeOfJnixxObject.
+	(Native::sizeOfObjectArray, Native::sizeOfClass): New.
+	* cni/Native.cxx (Native::sizeOfObject): Replace sizeOfJnixxObject
+	(Native::sizeOfClass, Native::sizeOfObjectArray): New.
+	* TestJnixx.java (testSizeOfObject): Replace testSizeofJnixxObject.
+	(testSizeOfObjectArray, testSizeOfClass): New.
+	* Native.java (sizeOfObjectArray()): New.
+	* Printer.java (printCxxName): For object array's generate a
+	templated class instance.
+	* PrintNamespaces.java: Don't generate array namespace names.
+	* chars.cxx (strings2chars): Use Array templates.
+	* chars.hxx: Ditto.
+
 	* ClassWalker.java: Walk an array's component type, and before the
 	wrapping array.
 
diff --git a/frysk-sys/frysk/jnixx/Native.java b/frysk-sys/frysk/jnixx/Native.java
index 066470b..e10f3f5 100644
--- a/frysk-sys/frysk/jnixx/Native.java
+++ b/frysk-sys/frysk/jnixx/Native.java
@@ -42,6 +42,8 @@ package frysk.jnixx;
 class Native {
     static native boolean isJni();
     static native int sizeOfJnixxEnv();
-    static native int sizeOfJnixxObject();
+    static native int sizeOfObject();
+    static native int sizeOfClass();
+    static native int sizeOfObjectArray();
     static native String[] copy(String[] strings);
 }
diff --git a/frysk-sys/frysk/jnixx/PrintDeclarations.java b/frysk-sys/frysk/jnixx/PrintDeclarations.java
index 6aa507f..f50dee5 100644
--- a/frysk-sys/frysk/jnixx/PrintDeclarations.java
+++ b/frysk-sys/frysk/jnixx/PrintDeclarations.java
@@ -118,22 +118,6 @@ class PrintDeclarations extends ClassWalker {
 	};
 
     void acceptArray(Class klass) {
-	for (Class component = klass; component != null;
-	     component = component.getComponentType()) {
-	    if (component.isPrimitive())
-		return;
-	}
-	p.println();
-	p.print("struct ");
-	p.printQualifiedCxxName(klass);
-	p.print(" : public ::jnixx::objectArray");
-	while(p.dent(0, "{", "};")) {
-	    p.printUnqualifiedCxxName(klass);
-	    p.print("(jobject _object)");
-	    p.print(" : ::jnixx::objectArray");
-	    p.print("(_object)");
-	    p.println(" { }");
-	}	
     }
     void acceptPrimitive(Class klass) {
     }
diff --git a/frysk-sys/frysk/jnixx/PrintNamespaces.java b/frysk-sys/frysk/jnixx/PrintNamespaces.java
index 3070c42..70236cd 100644
--- a/frysk-sys/frysk/jnixx/PrintNamespaces.java
+++ b/frysk-sys/frysk/jnixx/PrintNamespaces.java
@@ -49,10 +49,7 @@ class PrintNamespaces extends ClassWalker {
     /**
      * Print the namespace spec for the klass.
      */
-    private void printCxxNamespace(Class klass, int arrays) {
-	p.println();
-	p.print("// ");
-	p.println(klass);
+    private void printCxxNamespace(Class klass) {
 	String[] names = klass.getName().split("\\.");
 	for (int i = 0; i < names.length - 1; i++) {
 	    p.print("namespace ");
@@ -62,9 +59,6 @@ class PrintNamespaces extends ClassWalker {
 	}
 	p.print("struct ");
 	p.print(names[names.length - 1]);
-	for (int i = 0; i < arrays; i++) {
-	    p.print("Array");
-	}
 	p.println(";");
 	for (int i = names.length - 2; i >= 0; i--) {
 	    p.outdent();
@@ -72,22 +66,23 @@ class PrintNamespaces extends ClassWalker {
 	}
     }
 
-    void acceptInterface(Class klass) {
-	printCxxNamespace(klass, 0);
-    }
     void acceptArray(Class klass) {
-	int arrays = 0;
-	while (klass.isArray()) {
-	    arrays++;
-	    klass = klass.getComponentType();
-	}
-	if (klass.isPrimitive())
-	    return;
-	printCxxNamespace(klass, arrays);
+	p.println();
+	p.print("// ");
+	p.println(klass);
     }
     void acceptPrimitive(Class klass) {
+	p.println();
+	p.print("// ");
+	p.println(klass);
     }
     void acceptClass(Class klass) {
-	printCxxNamespace(klass, 0);
+	p.println();
+	p.print("// ");
+	p.println(klass);
+	printCxxNamespace(klass);
+    }
+    void acceptInterface(Class klass) {
+	acceptClass(klass);
     }
 }
diff --git a/frysk-sys/frysk/jnixx/Printer.java b/frysk-sys/frysk/jnixx/Printer.java
index b75968a..15b9509 100644
--- a/frysk-sys/frysk/jnixx/Printer.java
+++ b/frysk-sys/frysk/jnixx/Printer.java
@@ -176,8 +176,15 @@ class Printer {
 		print(componentType.getName());
 		print("Array");
 	    } else {
-		printCxxName(klass.getComponentType(), global);
-		print("Array");
+		if (global) {
+		    print("::");
+		}
+		print("jnixx::array<");
+		printCxxName(klass.getComponentType(), false);
+		if (!componentType.isPrimitive()) {
+		    print(" "); // prevent's ">>".
+		}
+		print(">");
 	    }
 	} else {
 	    if (global) {
diff --git a/frysk-sys/frysk/jnixx/TestJnixx.java b/frysk-sys/frysk/jnixx/TestJnixx.java
index ca08e0b..2e4e9d6 100644
--- a/frysk-sys/frysk/jnixx/TestJnixx.java
+++ b/frysk-sys/frysk/jnixx/TestJnixx.java
@@ -49,11 +49,17 @@ public class TestJnixx extends TestCase {
 	assertEquals("word-size", Host.wordSize(),
 		     Native.sizeOfJnixxEnv() * 8);
     }
-    public void testSizeofJnixxObject() {
-	if (unsupported("CNI", !Native.isJni()))
-	    return;
+    public void testSizeOfObject() {
+	assertEquals("word-size", Host.wordSize(),
+		     Native.sizeOfObject() * 8);
+    }
+    public void testSizeOfClass() {
+	assertEquals("word-size", Host.wordSize(),
+		     Native.sizeOfClass() * 8);
+    }
+    public void testSizeOfObjectArray() {
 	assertEquals("word-size", Host.wordSize(),
-		     Native.sizeOfJnixxObject() * 8);
+		     Native.sizeOfObjectArray() * 8);
     }
     public void testCharsConversion() {
 	if (unsupported("CNI", !Native.isJni()))
diff --git a/frysk-sys/frysk/jnixx/chars.cxx b/frysk-sys/frysk/jnixx/chars.cxx
index f81b6e6..72ae122 100644
--- a/frysk-sys/frysk/jnixx/chars.cxx
+++ b/frysk-sys/frysk/jnixx/chars.cxx
@@ -40,8 +40,10 @@
 #include "jni.hxx"
 #include <malloc.h>
 
+#include "frysk/jnixx/chars.hxx"
+
 char**
-strings2chars(jnixx::env env, ::java::lang::StringArray strings) {
+strings2chars(jnixx::env env, ::jnixx::array<java::lang::String> strings) {
   jsize arrayLength = env.GetArrayLength((jobjectArray)strings._object);
   // compute the allocated size.
   size_t size = 0;
@@ -72,7 +74,7 @@ strings2chars(jnixx::env env, ::java::lang::StringArray strings) {
   return elements;
 }
 
-::java::lang::StringArray
+::jnixx::array<java::lang::String>
 chars2strings(::jnixx::env env, char** argv) {
   int length = 0;
   for (char **p = argv; *p != NULL; p++) {
diff --git a/frysk-sys/frysk/jnixx/chars.hxx b/frysk-sys/frysk/jnixx/chars.hxx
index a0e5deb..02ee457 100644
--- a/frysk-sys/frysk/jnixx/chars.hxx
+++ b/frysk-sys/frysk/jnixx/chars.hxx
@@ -37,8 +37,6 @@
 // version and license this file solely under the GPL without
 // exception.
 
-extern char** strings2chars(jnixx::env env,
-			    ::java::lang::StringArray strings);
+extern char** strings2chars(::jnixx::env, ::jnixx::array<java::lang::String>);
 
-extern ::java::lang::StringArray chars2strings(::jnixx::env env,
-					       char** argv);
+extern ::jnixx::array<java::lang::String> chars2strings(::jnixx::env, char**);
diff --git a/frysk-sys/frysk/jnixx/cni/Native.cxx b/frysk-sys/frysk/jnixx/cni/Native.cxx
index a8a0852..65abe09 100644
--- a/frysk-sys/frysk/jnixx/cni/Native.cxx
+++ b/frysk-sys/frysk/jnixx/cni/Native.cxx
@@ -52,8 +52,18 @@ frysk::jnixx::Native::sizeOfJnixxEnv() {
 }
 
 jint
-frysk::jnixx::Native::sizeOfJnixxObject() {
-  return -1;
+frysk::jnixx::Native::sizeOfClass() {
+  return sizeof(jclass);
+}
+
+jint
+frysk::jnixx::Native::sizeOfObject() {
+  return sizeof(jobject);
+}
+
+jint
+frysk::jnixx::Native::sizeOfObjectArray() {
+  return sizeof(jobjectArray);
 }
 
 JArray<jstring>*
diff --git a/frysk-sys/frysk/jnixx/jni/Native.cxx b/frysk-sys/frysk/jnixx/jni/Native.cxx
index 471d4ad..c11bcb7 100644
--- a/frysk-sys/frysk/jnixx/jni/Native.cxx
+++ b/frysk-sys/frysk/jnixx/jni/Native.cxx
@@ -54,15 +54,25 @@ frysk::jnixx::Native::sizeOfJnixxEnv(::jnixx::env) {
 }
 
 jint
-frysk::jnixx::Native::sizeOfJnixxObject(::jnixx::env) {
-  return sizeof(::jnixx::object);
+frysk::jnixx::Native::sizeOfClass(::jnixx::env) {
+  return sizeof(::java::lang::Class);
 }
 
-::java::lang::StringArray
+jint
+frysk::jnixx::Native::sizeOfObject(::jnixx::env) {
+  return sizeof(::java::lang::Object);
+}
+
+jint
+frysk::jnixx::Native::sizeOfObjectArray(::jnixx::env) {
+  return sizeof(::jnixx::array<java::lang::Object>);
+}
+
+::jnixx::array<java::lang::String>
 frysk::jnixx::Native::copy(::jnixx::env env,
-			   ::java::lang::StringArray strings) {
+			   ::jnixx::array<java::lang::String> strings) {
   char** chars = strings2chars(env, strings);
-  ::java::lang::StringArray copiedStrings = chars2strings(env, chars);
+  ::jnixx::array<java::lang::String> copiedStrings = chars2strings(env, chars);
   ::free(chars);
   return copiedStrings;
 }
diff --git a/frysk-sys/frysk/jnixx/jnixx.hxx b/frysk-sys/frysk/jnixx/jnixx.hxx
index 5e60c10..4f8c999 100644
--- a/frysk-sys/frysk/jnixx/jnixx.hxx
+++ b/frysk-sys/frysk/jnixx/jnixx.hxx
@@ -48,14 +48,15 @@ namespace jnixx {
    * An exception to throw when JNI makes an exception pending, caught
    * by the JNI wrapper stub.
    */
-  struct exception {
+  class exception {
   };
 
   /**
    * JNIXX wrapper for the JNIEnv; just like JNIEnv except it throws
    * an exception for any error or exception check.
    */
-  struct env {
+  class env {
+  public:
 
     JNIEnv* _jni;
     env(JNIEnv* _jni) {
@@ -1468,7 +1469,8 @@ namespace jnixx {
    * The JNIXX root, wraps the jobject pointer, all generated object
    * wrappers extend this.
    */
-  struct object {
+  class object {
+  public:
     jobject _object;
     object(jobject _object) {
       this->_object = _object;
@@ -1482,11 +1484,11 @@ namespace jnixx {
    * The JNIXX array root, any array object extends this (which
    * extends jnixx::object).
    */
-  struct objectArray : public object {
-    objectArray(jobject _object) : object(_object) {
+  template <typename Object> class array : public object {
+  public:
+    array(jobject _object) : object(_object) {
     }
   };
-
 }
 
 #endif


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 17:29 UTC | newest]

Thread overview: (only message) (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2008-05-09 17:29 [SCM] master: Generate an instance of the jnixx::array template, when an array-of-object 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).