Author: mturk
Date: Wed Apr 15 19:31:43 2009
New Revision: 765320

URL: http://svn.apache.org/viewvc?rev=765320&view=rev
Log:
Add core classes initialization.
This is used for creating primitive and object arrays

Modified:
    commons/sandbox/runtime/trunk/src/main/native/include/acr_clazz.h
    commons/sandbox/runtime/trunk/src/main/native/include/acr_types.h
    commons/sandbox/runtime/trunk/src/main/native/os/unix/main.c
    commons/sandbox/runtime/trunk/src/main/native/os/win32/main.c
    commons/sandbox/runtime/trunk/src/main/native/shared/clazz.c
    commons/sandbox/runtime/trunk/src/main/native/test/testcase.c
    
commons/sandbox/runtime/trunk/src/test/org/apache/commons/runtime/TestPrivate.java

Modified: commons/sandbox/runtime/trunk/src/main/native/include/acr_clazz.h
URL: 
http://svn.apache.org/viewvc/commons/sandbox/runtime/trunk/src/main/native/include/acr_clazz.h?rev=765320&r1=765319&r2=765320&view=diff
==============================================================================
--- commons/sandbox/runtime/trunk/src/main/native/include/acr_clazz.h (original)
+++ commons/sandbox/runtime/trunk/src/main/native/include/acr_clazz.h Wed Apr 
15 19:31:43 2009
@@ -18,6 +18,7 @@
 #define _ACR_CLAZZ_H
 
 #include "acr.h"
+#include "acr_types.h"
 
 #ifdef __cplusplus
 extern "C" {
@@ -45,6 +46,12 @@
 ACR_DECLARE(jclass) ACR_AddClassToGlobalCache(JNIEnv *env,
                                               jobject lock, const char *name);
 
+/**
+ * Get core class instance.
+ * @param clazz Class to get. See acr_cclass_e enum
+ */
+ACR_DECLARE(jclass) ACR_GetCoreClass(acr_cclass_e clazz);
+
 
 #ifdef __cplusplus
 }

Modified: commons/sandbox/runtime/trunk/src/main/native/include/acr_types.h
URL: 
http://svn.apache.org/viewvc/commons/sandbox/runtime/trunk/src/main/native/include/acr_types.h?rev=765320&r1=765319&r2=765320&view=diff
==============================================================================
--- commons/sandbox/runtime/trunk/src/main/native/include/acr_types.h (original)
+++ commons/sandbox/runtime/trunk/src/main/native/include/acr_types.h Wed Apr 
15 19:31:43 2009
@@ -63,15 +63,22 @@
 
 /* Standard Java classes */
 typedef enum {
-    ACR_CC_OBJECT,
-    ACR_CC_STRING,
-    ACR_CC_ZARRAY,
-    ACR_CC_BARRAY,
-    ACR_CC_CARRAY,
-    ACR_CC_IARRAY,
-    ACR_CC_JARRAY,
-    ACR_CC_TARRAY,
-    ACR_CC_OARRAY,
+    ACR_CC_OBJECT,  /* Ljava/lang/Object;   - String          */
+    ACR_CC_STRING,  /* Ljava/lang/String;   - Object          */
+    ACR_CC_ZARRAY,  /* [Z                   - boolean[]       */
+    ACR_CC_BARRAY,  /* [B                   - byte[]          */
+    ACR_CC_CARRAY,  /* [C                   - char[]          */
+    ACR_CC_IARRAY,  /* [I                   - int[]           */
+    ACR_CC_JARRAY,  /* [I                   - long[]          */
+    ACR_CC_TARRAY,  /* [Ljava/lang/String;  - String[]        */
+    ACR_CC_OARRAY,  /* [Ljava/lang/Object;  - Object[]        */
+    ACR_CC_ZZ_ARR,  /* [[Z                  - boolean[]       */
+    ACR_CC_BB_ARR,  /* [[B                  - byte[][]        */
+    ACR_CC_CC_ARR,  /* [[C                  - char[][]        */
+    ACR_CC_II_ARR,  /* [[I                  - int[][]         */
+    ACR_CC_JJ_ARR,  /* [[I                  - long[][]        */
+    ACR_CC_TT_ARR,  /* [[Ljava/lang/String; - String[][]      */
+    ACR_CC_OO_ARR,  /* [[Ljava/lang/Object; - Object[][]      */
     ACR_CC_MAX
 } acr_cclass_e;
 

Modified: commons/sandbox/runtime/trunk/src/main/native/os/unix/main.c
URL: 
http://svn.apache.org/viewvc/commons/sandbox/runtime/trunk/src/main/native/os/unix/main.c?rev=765320&r1=765319&r2=765320&view=diff
==============================================================================
--- commons/sandbox/runtime/trunk/src/main/native/os/unix/main.c (original)
+++ commons/sandbox/runtime/trunk/src/main/native/os/unix/main.c Wed Apr 15 
19:31:43 2009
@@ -29,6 +29,7 @@
 static JavaVM       *acr_pvm = NULL;
 static pthread_key_t acr_thread_key;
 
+extern int ACR_InitCoreClasses(JNIEnv *);
 extern int ACR_InitClazzCache(JNIEnv *);
 extern int ACR_DestroyClazzCache(JNIEnv *);
 
@@ -68,6 +69,8 @@
     }
     if ((env = ACR_GetJNIEnv()) == NULL)
         return JNI_ERR;
+    if (ACR_InitCoreClasses(env) != ACR_SUCCESS)
+        return JNI_ERR;
     if (ACR_InitClazzCache(env) != ACR_SUCCESS)
         return JNI_ERR;
 

Modified: commons/sandbox/runtime/trunk/src/main/native/os/win32/main.c
URL: 
http://svn.apache.org/viewvc/commons/sandbox/runtime/trunk/src/main/native/os/win32/main.c?rev=765320&r1=765319&r2=765320&view=diff
==============================================================================
--- commons/sandbox/runtime/trunk/src/main/native/os/win32/main.c (original)
+++ commons/sandbox/runtime/trunk/src/main/native/os/win32/main.c Wed Apr 15 
19:31:43 2009
@@ -38,6 +38,7 @@
 LPOSVERSIONINFOEXA      acr_osver = &osver;
 static JavaVM          *acr_pvm   = NULL;
 
+extern int ACR_InitCoreClasses(JNIEnv *);
 extern int ACR_InitClazzCache(JNIEnv *);
 extern int ACR_DestroyClazzCache(JNIEnv *);
 
@@ -313,6 +314,8 @@
     }
 
     env = epp;
+    if (ACR_InitCoreClasses(env) != ACR_SUCCESS)
+        return JNI_ERR;
     if (ACR_InitClazzCache(env) != ACR_SUCCESS)
         return JNI_ERR;
 

Modified: commons/sandbox/runtime/trunk/src/main/native/shared/clazz.c
URL: 
http://svn.apache.org/viewvc/commons/sandbox/runtime/trunk/src/main/native/shared/clazz.c?rev=765320&r1=765319&r2=765320&view=diff
==============================================================================
--- commons/sandbox/runtime/trunk/src/main/native/shared/clazz.c (original)
+++ commons/sandbox/runtime/trunk/src/main/native/shared/clazz.c Wed Apr 15 
19:31:43 2009
@@ -28,6 +28,27 @@
 #define CLAZZ_INI_SIZE  128
 static acr_table_t *clazz_cache;
 
+struct {
+    const char *name;
+    jclass      clazz;
+} core_classes[] = {
+    { "Ljava/lang/Object;",  NULL },
+    { "Ljava/lang/String;",  NULL },
+    { "[Z",                  NULL },
+    { "[B",                  NULL },
+    { "[C",                  NULL },
+    { "[I",                  NULL },
+    { "[J",                  NULL },
+    { "[Ljava/lang/Object;", NULL },
+    { "[Ljava/lang/String;", NULL },
+    { "[[Z",                 NULL },
+    { "[[B",                 NULL },
+    { "[[C",                 NULL },
+    { "[[I",                 NULL },
+    { "[[J",                 NULL },
+    { NULL,                  NULL }
+};
+
 int ACR_InitClazzCache(JNIEnv *_E)
 {
 
@@ -37,7 +58,28 @@
     if (!clazz_cache)
         return ACR_EISNULL;
 
-    return ACR_SUCCESS;    
+    return ACR_SUCCESS;
+}
+
+int ACR_InitCoreClasses(JNIEnv *_E)
+{
+    int i = 0;
+
+    if (core_classes[0].clazz)
+        return ACR_SUCCESS;
+    while (core_classes[i].name) {
+        jobject o = (jobject)(*_E)->FindClass(_E, core_classes[i].name);
+        if (o != NULL) {
+            core_classes[i].clazz = (jclass)(*_E)->NewGlobalRef(_E, o);
+            (*_E)->DeleteLocalRef(_E, o);
+        }
+        else {
+            return ACR_ESYMNOTFOUND;
+        }
+        i++;
+    }
+
+    return ACR_SUCCESS;
 }
 
 int ACR_DestroyClazzCache(JNIEnv *_E)
@@ -56,29 +98,39 @@
     ACR_TableFree(_E, THROW_FMARK, clazz_cache);
     clazz_cache = NULL;
 
-    return ACR_SUCCESS;    
+    return ACR_SUCCESS;
 }
 
-ACR_DECLARE(jclass) ACR_AddClassToGlobalCache(JNIEnv *_E, 
+ACR_DECLARE(jclass) ACR_AddClassToGlobalCache(JNIEnv *_E,
                                               jobject m, const char *name)
 {
     jobject o;
     jclass  c = NULL;
 
+    if (!name)
+        return NULL;
     o = (jobject)(*_E)->FindClass(_E, name);
     if (o != NULL) {
         c = (jclass)(*_E)->NewGlobalRef(_E, o);
         (*_E)->DeleteLocalRef(_E, o);
         if (m)
-            (*_E)->MonitorEnter(_E, m);    
+            (*_E)->MonitorEnter(_E, m);
         ACR_TableAdd(_E, THROW_FMARK, clazz_cache, name, c, 0);
         if (m)
-            (*_E)->MonitorExit(_E, m);    
+            (*_E)->MonitorExit(_E, m);
     }
 
     return c;
 }
 
+ACR_DECLARE(jclass) ACR_GetCoreClass(acr_cclass_e clazz)
+{
+    if (clazz >= 0 && clazz < ACR_CC_MAX)
+        return core_classes[clazz].clazz;
+    else
+        return NULL;
+}
+
 #ifdef ACR_ENABLE_TEST
 /* Just for testing the cache table */
 int acr_clazz_cache_size()

Modified: commons/sandbox/runtime/trunk/src/main/native/test/testcase.c
URL: 
http://svn.apache.org/viewvc/commons/sandbox/runtime/trunk/src/main/native/test/testcase.c?rev=765320&r1=765319&r2=765320&view=diff
==============================================================================
--- commons/sandbox/runtime/trunk/src/main/native/test/testcase.c (original)
+++ commons/sandbox/runtime/trunk/src/main/native/test/testcase.c Wed Apr 15 
19:31:43 2009
@@ -190,3 +190,8 @@
     return rc;
 }
 
+ACR_JNI_EXPORT_DECLARE(jobject, TestPrivate, test014)(ACR_JNISTDARGS, jint d)
+{
+    jclass c = ACR_GetCoreClass(d);
+    return (jobject)c;
+}

Modified: 
commons/sandbox/runtime/trunk/src/test/org/apache/commons/runtime/TestPrivate.java
URL: 
http://svn.apache.org/viewvc/commons/sandbox/runtime/trunk/src/test/org/apache/commons/runtime/TestPrivate.java?rev=765320&r1=765319&r2=765320&view=diff
==============================================================================
--- 
commons/sandbox/runtime/trunk/src/test/org/apache/commons/runtime/TestPrivate.java
 (original)
+++ 
commons/sandbox/runtime/trunk/src/test/org/apache/commons/runtime/TestPrivate.java
 Wed Apr 15 19:31:43 2009
@@ -39,20 +39,21 @@
 
     private char longChar[] = new char[32768];
     private String longString;
-    private static native void test000(int err);
-    private static native void test001(String msg);
-    private static native void test002(int err);
-    private static native void test003(int d);
-    private static native int  test004(int d);
-    private static native int  test005(String msg);
-    private static native int  test006(String msg);
-    private static native int  test007(int d);
-    private static native int  test008(String msg);
-    private static native int  test009(String msg);
-    private static native int  test010(String msg);
-    private static native int  test011(String msg);
-    private static native int  test012(int d);
-    private static native int  test013(int d);
+    private static native void  test000(int err);
+    private static native void  test001(String msg);
+    private static native void  test002(int err);
+    private static native void  test003(int d);
+    private static native int   test004(int d);
+    private static native int   test005(String msg);
+    private static native int   test006(String msg);
+    private static native int   test007(int d);
+    private static native int   test008(String msg);
+    private static native int   test009(String msg);
+    private static native int   test010(String msg);
+    private static native int   test011(String msg);
+    private static native int   test012(int d);
+    private static native int   test013(int d);
+    private static native Class test014(int d);
 
 
     protected void setUp()
@@ -203,5 +204,13 @@
         assertEquals("Value", 0, i);
     }
 
+    public void testCCore()
+        throws Exception
+    {
+        // Shuold not be called as last
+        Class c = test014(1);
+        assertEquals("Name", "java.lang.String", c.getName());
+    }
+
 
 }


Reply via email to