This is the mail archive of the frysk-cvs@sources.redhat.com mailing list for the frysk project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

[SCM] master: Generate an instance of the jnixx::array template, when an array-of-object.


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


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]