[Top][All Lists]
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
libclasspath reformatting patch (was: Re: fix const/non-const warnings i
From: |
Steven Augart |
Subject: |
libclasspath reformatting patch (was: Re: fix const/non-const warnings in jcl.c, jcl.h) |
Date: |
Mon, 21 Jun 2004 15:01:03 -0400 |
User-agent: |
Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.5) Gecko/20031007 |
Michael Koch wrote:
-----BEGIN PGP SIGNED MESSAGE-----
Hash: SHA1
Am Montag, 21. Juni 2004 19:38 schrieb Steven Augart:
2004-06-20 Steven Augart <address@hidden>
* native/jni/classpath/jcl.c, native/jni/classpath/jcl.h
(JCL_FindClass): Fixed const/non-const warning in function
prototype. (JCL_ThrowException): Ditto.
(JCL_free_cstring): Fixed logical const/non-const problem
in function prototype.
* native/jni/classpath/jcl.c: Reformatted according to GNU
standards.
Can you provide two patches, one for functional changes and one for
the reformatting ? This makes it easier later to track changes.
That is indeed a better idea.
I'm attaching the patch for reformatting first.
Will submit the other one shortly. I hate having multiple patches to
the same file outstanding; whine whine.
--Steve Augart
--
Steven Augart
Jikes RVM, a free, open source, Virtual Machine:
http://oss.software.ibm.com/jikesrvm
OK to commit? Thanks to Michael Koch for pointing out that this
should be done separately from any substantive changes.
2004-06-21 Steven Augart <address@hidden>
* native/jni/classpath/jcl.c, native/jni/classpath/jcl.h,
native/jni/classpath/jnilink.c, native/jni/classpath/jnilink.h,
native/jni/classpath/native_state.c,
native/jni/classpath/native_state.h,
native/jni/classpath/primlib.c, native/jni/classpath/primlib.h:
Reformatted according to GNU Coding standards.
Index: native/jni/classpath/jcl.c
===================================================================
RCS file: /cvsroot/classpath/classpath/native/jni/classpath/jcl.c,v
retrieving revision 1.8
diff -I*.class -u -r1.8 jcl.c
--- native/jni/classpath/jcl.c 29 Mar 2004 07:07:26 -0000 1.8
+++ native/jni/classpath/jcl.c 21 Jun 2004 18:58:31 -0000
@@ -43,106 +43,138 @@
#include <jcl.h>
#ifndef __GNUC__
-#define __attribute__(x) /* nothing */
+#define __attribute__(x) /* nothing */
#endif
-JNIEXPORT void JNICALL JCL_ThrowException(JNIEnv * env, char * className, char
* errMsg) {
- jclass excClass;
- if((*env)->ExceptionOccurred(env)) {
- (*env)->ExceptionClear(env);
- }
- excClass = (*env)->FindClass(env, className);
- if(excClass == NULL) {
- jclass errExcClass;
- errExcClass = (*env)->FindClass(env,
"java/lang/ClassNotFoundException");
- if(errExcClass == NULL) {
- errExcClass = (*env)->FindClass(env,
"java/lang/InternalError");
- if(errExcClass == NULL) {
- fprintf(stderr, "JCL: Utterly failed to throw
exeption ");
- fprintf(stderr, className);
- fprintf(stderr, " with message ");
- fprintf(stderr, errMsg);
- return;
- }
- }
- /* Removed this (more comprehensive) error string to avoid the
need for a
- * static variable or allocation of a buffer for this message
in this (unlikely)
- * error case. --Fridi.
- *
- * sprintf(errstr,"JCL: Failed to throw exception %s with
message %s: could not find exception class.", className, errMsg);
- */
- (*env)->ThrowNew(env, errExcClass, className);
- }
- (*env)->ThrowNew(env, excClass, errMsg);
+JNIEXPORT void JNICALL
+JCL_ThrowException (JNIEnv * env, char *className, char *errMsg)
+{
+ jclass excClass;
+ if ((*env)->ExceptionOccurred (env))
+ {
+ (*env)->ExceptionClear (env);
+ }
+ excClass = (*env)->FindClass (env, className);
+ if (excClass == NULL)
+ {
+ jclass errExcClass;
+ errExcClass =
+ (*env)->FindClass (env, "java/lang/ClassNotFoundException");
+ if (errExcClass == NULL)
+ {
+ errExcClass = (*env)->FindClass (env, "java/lang/InternalError");
+ if (errExcClass == NULL)
+ {
+ fprintf (stderr, "JCL: Utterly failed to throw exeption ");
+ fprintf (stderr, className);
+ fprintf (stderr, " with message ");
+ fprintf (stderr, errMsg);
+ return;
+ }
+ }
+ /* Removed this (more comprehensive) error string to avoid the need for
a
+ * static variable or allocation of a buffer for this message in this
(unlikely)
+ * error case. --Fridi.
+ *
+ * sprintf(errstr,"JCL: Failed to throw exception %s with message %s:
could not find exception class.", className, errMsg);
+ */
+ (*env)->ThrowNew (env, errExcClass, className);
+ }
+ (*env)->ThrowNew (env, excClass, errMsg);
}
-JNIEXPORT void * JNICALL JCL_malloc(JNIEnv * env, size_t size) {
- void * mem = malloc(size);
- if(mem == NULL) {
- JCL_ThrowException(env, "java/lang/OutOfMemoryError", "malloc()
failed.");
- return NULL;
- }
- return mem;
+JNIEXPORT void *JNICALL
+JCL_malloc (JNIEnv * env, size_t size)
+{
+ void *mem = malloc (size);
+ if (mem == NULL)
+ {
+ JCL_ThrowException (env, "java/lang/OutOfMemoryError",
+ "malloc() failed.");
+ return NULL;
+ }
+ return mem;
}
-JNIEXPORT void * JNICALL JCL_realloc(JNIEnv *env, void *ptr, size_t size)
+JNIEXPORT void *JNICALL
+JCL_realloc (JNIEnv * env, void *ptr, size_t size)
{
- ptr = realloc(ptr, size);
+ ptr = realloc (ptr, size);
if (ptr == 0)
{
- JCL_ThrowException(env, "java/lang/OutOfMemoryError",
- "malloc() failed.");
+ JCL_ThrowException (env, "java/lang/OutOfMemoryError",
+ "malloc() failed.");
return NULL;
}
- return(ptr);
+ return (ptr);
}
-JNIEXPORT void JNICALL JCL_free(JNIEnv * env __attribute__((unused)),
- void * p)
+JNIEXPORT void JNICALL
+JCL_free (JNIEnv * env __attribute__ ((unused)), void *p)
{
- if(p != NULL) {
- free(p);
- }
+ if (p != NULL)
+ {
+ free (p);
+ }
}
-JNIEXPORT const char * JNICALL JCL_jstring_to_cstring(JNIEnv * env, jstring s)
{
- const char* cstr;
- if(s == NULL) {
- JCL_ThrowException(env, "java/lang/NullPointerException","Null
string");
- return NULL;
- }
- cstr = (const char*)(*env)->GetStringUTFChars(env, s, NULL);
- if(cstr == NULL) {
- JCL_ThrowException(env, "java/lang/InternalError",
"GetStringUTFChars() failed.");
- return NULL;
- }
- return cstr;
+JNIEXPORT const char *JNICALL
+JCL_jstring_to_cstring (JNIEnv * env, jstring s)
+{
+ const char *cstr;
+ if (s == NULL)
+ {
+ JCL_ThrowException (env, "java/lang/NullPointerException",
+ "Null string");
+ return NULL;
+ }
+ cstr = (const char *) (*env)->GetStringUTFChars (env, s, NULL);
+ if (cstr == NULL)
+ {
+ JCL_ThrowException (env, "java/lang/InternalError",
+ "GetStringUTFChars() failed.");
+ return NULL;
+ }
+ return cstr;
}
-JNIEXPORT void JNICALL JCL_free_cstring(JNIEnv * env, jstring s, const char *
cstr) {
- (*env)->ReleaseStringUTFChars(env, s, cstr);
+JNIEXPORT void JNICALL
+JCL_free_cstring (JNIEnv * env, jstring s, const char *cstr)
+{
+ (*env)->ReleaseStringUTFChars (env, s, cstr);
}
-JNIEXPORT jint JNICALL JCL_MonitorEnter(JNIEnv * env, jobject o) {
- jint retval = (*env)->MonitorEnter(env,o);
- if(retval != 0) {
- JCL_ThrowException(env, "java/lang/InternalError",
"MonitorEnter() failed.");
- }
- return retval;
+JNIEXPORT jint JNICALL
+JCL_MonitorEnter (JNIEnv * env, jobject o)
+{
+ jint retval = (*env)->MonitorEnter (env, o);
+ if (retval != 0)
+ {
+ JCL_ThrowException (env, "java/lang/InternalError",
+ "MonitorEnter() failed.");
+ }
+ return retval;
}
-JNIEXPORT jint JNICALL JCL_MonitorExit(JNIEnv * env, jobject o) {
- jint retval = (*env)->MonitorExit(env,o);
- if(retval != 0) {
- JCL_ThrowException(env, "java/lang/InternalError",
"MonitorExit() failed.");
- }
- return retval;
+JNIEXPORT jint JNICALL
+JCL_MonitorExit (JNIEnv * env, jobject o)
+{
+ jint retval = (*env)->MonitorExit (env, o);
+ if (retval != 0)
+ {
+ JCL_ThrowException (env, "java/lang/InternalError",
+ "MonitorExit() failed.");
+ }
+ return retval;
}
-JNIEXPORT jclass JNICALL JCL_FindClass(JNIEnv * env, char * className) {
- jclass retval = (*env)->FindClass(env,className);
- if(retval == NULL) {
- JCL_ThrowException(env, "java/lang/ClassNotFoundException",
className);
- }
- return retval;
+JNIEXPORT jclass JNICALL
+JCL_FindClass (JNIEnv * env, char *className)
+{
+ jclass retval = (*env)->FindClass (env, className);
+ if (retval == NULL)
+ {
+ JCL_ThrowException (env, "java/lang/ClassNotFoundException", className);
+ }
+ return retval;
}
Index: native/jni/classpath/jcl.h
===================================================================
RCS file: /cvsroot/classpath/classpath/native/jni/classpath/jcl.h,v
retrieving revision 1.6
diff -I*.class -u -r1.6 jcl.h
--- native/jni/classpath/jcl.h 29 Mar 2004 07:07:26 -0000 1.6
+++ native/jni/classpath/jcl.h 21 Jun 2004 18:58:31 -0000
@@ -42,15 +42,18 @@
#include <jni.h>
#include <config.h>
-JNIEXPORT jclass JNICALL JCL_FindClass(JNIEnv * env, char * className);
-JNIEXPORT void JNICALL JCL_ThrowException(JNIEnv * env, char * className, char
* errMsg);
-JNIEXPORT void * JNICALL JCL_malloc(JNIEnv *env, size_t size);
-JNIEXPORT void * JNICALL JCL_realloc(JNIEnv *env, void *ptr, size_t size);
-JNIEXPORT void JNICALL JCL_free(JNIEnv *env, void * p);
-JNIEXPORT const char * JNICALL JCL_jstring_to_cstring(JNIEnv *env, jstring s);
-JNIEXPORT void JNICALL JCL_free_cstring(JNIEnv *env, jstring s, const char *
cstr);
-JNIEXPORT jint JNICALL JCL_MonitorEnter(JNIEnv *env, jobject o);
-JNIEXPORT jint JNICALL JCL_MonitorExit(JNIEnv *env, jobject o);
+JNIEXPORT jclass JNICALL JCL_FindClass (JNIEnv * env, char *className);
+JNIEXPORT void JNICALL JCL_ThrowException (JNIEnv * env, char *className,
+ char *errMsg);
+JNIEXPORT void *JNICALL JCL_malloc (JNIEnv * env, size_t size);
+JNIEXPORT void *JNICALL JCL_realloc (JNIEnv * env, void *ptr, size_t size);
+JNIEXPORT void JNICALL JCL_free (JNIEnv * env, void *p);
+JNIEXPORT const char *JNICALL JCL_jstring_to_cstring (JNIEnv * env,
+ jstring s);
+JNIEXPORT void JNICALL JCL_free_cstring (JNIEnv * env, jstring s,
+ const char *cstr);
+JNIEXPORT jint JNICALL JCL_MonitorEnter (JNIEnv * env, jobject o);
+JNIEXPORT jint JNICALL JCL_MonitorExit (JNIEnv * env, jobject o);
#define JCL_RETHROW_EXCEPTION(env) if((*(env))->ExceptionOccurred((env)) !=
NULL) return NULL;
Index: native/jni/classpath/jnilink.c
===================================================================
RCS file: /cvsroot/classpath/classpath/native/jni/classpath/jnilink.c,v
retrieving revision 1.5
diff -I*.class -u -r1.5 jnilink.c
--- native/jni/classpath/jnilink.c 29 Mar 2004 07:07:26 -0000 1.5
+++ native/jni/classpath/jnilink.c 21 Jun 2004 18:58:31 -0000
@@ -45,60 +45,66 @@
#define GETCLASS(c) *(jclass*)(c)
JNIEXPORT jclass JNICALL
-LINK_RelinkClass (JNIEnv * env, linkedClass * c, char * name) {
- jclass found;
- LINK_UnlinkClass(env,*c);
-
- found = (*env)->FindClass(env,name);
- if(found == NULL)
- return NULL;
-
- *c = JCL_malloc(env,sizeof(jclass));
- if(*c == NULL)
- return NULL;
+LINK_RelinkClass (JNIEnv * env, linkedClass * c, char *name)
+{
+ jclass found;
+ LINK_UnlinkClass (env, *c);
+
+ found = (*env)->FindClass (env, name);
+ if (found == NULL)
+ return NULL;
+
+ *c = JCL_malloc (env, sizeof (jclass));
+ if (*c == NULL)
+ return NULL;
- GETCLASS(*c) = (*env)->NewGlobalRef(env,found);
- return GETCLASS(*c);
+ GETCLASS (*c) = (*env)->NewGlobalRef (env, found);
+ return GETCLASS (*c);
}
JNIEXPORT jclass JNICALL
-LINK_RelinkKnownClass(JNIEnv * env, linkedClass * c, jclass newClass) {
- LINK_UnlinkClass(env,*c);
+LINK_RelinkKnownClass (JNIEnv * env, linkedClass * c, jclass newClass)
+{
+ LINK_UnlinkClass (env, *c);
+
+ *c = JCL_malloc (env, sizeof (jclass));
+ if (*c == NULL)
+ return NULL;
- *c = JCL_malloc(env,sizeof(jclass));
- if(*c == NULL)
- return NULL;
-
- GETCLASS(*c) = (*env)->NewGlobalRef(env,newClass);
- return newClass;
+ GETCLASS (*c) = (*env)->NewGlobalRef (env, newClass);
+ return newClass;
}
JNIEXPORT jmethodID JNICALL
-LINK_RelinkMethod (JNIEnv * env, jmethodID * m, linkedClass c,
- char * name, char * sig) {
- *m = (*env)->GetMethodID(env,GETCLASS(c),name,sig);
- return *m;
+LINK_RelinkMethod (JNIEnv * env, jmethodID * m, linkedClass c,
+ char *name, char *sig)
+{
+ *m = (*env)->GetMethodID (env, GETCLASS (c), name, sig);
+ return *m;
}
JNIEXPORT jmethodID JNICALL
-LINK_RelinkStaticMethod(JNIEnv * env, jmethodID * m, linkedClass c,
- char * name, char * sig) {
- *m = (*env)->GetStaticMethodID(env,GETCLASS(c),name,sig);
- return *m;
+LINK_RelinkStaticMethod (JNIEnv * env, jmethodID * m, linkedClass c,
+ char *name, char *sig)
+{
+ *m = (*env)->GetStaticMethodID (env, GETCLASS (c), name, sig);
+ return *m;
}
JNIEXPORT jfieldID JNICALL
-LINK_RelinkField (JNIEnv * env, jfieldID * f, linkedClass c,
- char * name, char * sig) {
- *f = (*env)->GetFieldID(env,GETCLASS(c),name,sig);
- return *f;
+LINK_RelinkField (JNIEnv * env, jfieldID * f, linkedClass c,
+ char *name, char *sig)
+{
+ *f = (*env)->GetFieldID (env, GETCLASS (c), name, sig);
+ return *f;
}
JNIEXPORT jfieldID JNICALL
LINK_RelinkStaticField (JNIEnv * env, jfieldID * f, linkedClass c,
- char * name, char * sig) {
- *f = (*env)->GetStaticFieldID(env,GETCLASS(c),name,sig);
- return *f;
+ char *name, char *sig)
+{
+ *f = (*env)->GetStaticFieldID (env, GETCLASS (c), name, sig);
+ return *f;
}
@@ -106,12 +112,14 @@
destroys any object references
* the linker might have kept around.
*/
-JNIEXPORT void JNICALL LINK_UnlinkClass (JNIEnv * env, linkedClass * c) {
- if(*c != NULL) {
- if(GETCLASS(*c) != NULL)
- (*env)->DeleteGlobalRef(env,GETCLASS(*c));
- JCL_free(env,*c);
- *c = NULL;
- }
+JNIEXPORT void JNICALL
+LINK_UnlinkClass (JNIEnv * env, linkedClass * c)
+{
+ if (*c != NULL)
+ {
+ if (GETCLASS (*c) != NULL)
+ (*env)->DeleteGlobalRef (env, GETCLASS (*c));
+ JCL_free (env, *c);
+ *c = NULL;
+ }
}
-
Index: native/jni/classpath/jnilink.h
===================================================================
RCS file: /cvsroot/classpath/classpath/native/jni/classpath/jnilink.h,v
retrieving revision 1.4
diff -I*.class -u -r1.4 jnilink.h
--- native/jni/classpath/jnilink.h 29 Mar 2004 07:07:26 -0000 1.4
+++ native/jni/classpath/jnilink.h 21 Jun 2004 18:58:31 -0000
@@ -41,7 +41,7 @@
#include <jni.h>
-typedef void* linkedClass;
+typedef void *linkedClass;
#define LINK_LinkClass(env,c,name) ((c)==NULL ?
LINK_ReallyLinkClass((env),&(c),(name)) : (c))
#define LINK_LinkKnownClass(env,c,newClass) ((c)==NULL ?
LINK_ReallyLinkKnownClass((env),&(c),(newClass)) : (c))
@@ -53,34 +53,30 @@
#define LINK_LinkConstructor(env,m,c,sig) ((m)==NULL ?
LINK_RelinkMethod((env),&(m),(c),"<init>",(sig)) : (m))
JNIEXPORT jclass JNICALL
-LINK_ReallyLinkClass (JNIEnv * env, linkedClass * c,
- char * name);
+LINK_ReallyLinkClass (JNIEnv * env, linkedClass * c, char *name);
JNIEXPORT jclass JNICALL
-LINK_ReallyLinkKnownClass(JNIEnv * env, linkedClass * c,
- jclass newClass);
+LINK_ReallyLinkKnownClass (JNIEnv * env, linkedClass * c, jclass newClass);
JNIEXPORT jclass JNICALL
-LINK_RelinkClass (JNIEnv * env, linkedClass * c,
- char * name);
+LINK_RelinkClass (JNIEnv * env, linkedClass * c, char *name);
JNIEXPORT jclass JNICALL
-LINK_RelinkKnownClass (JNIEnv * env, linkedClass * c,
- jclass newClass);
+LINK_RelinkKnownClass (JNIEnv * env, linkedClass * c, jclass newClass);
JNIEXPORT jmethodID JNICALL
-LINK_RelinkMethod (JNIEnv * env, jmethodID * m, linkedClass c,
- char * name, char * sig);
+LINK_RelinkMethod (JNIEnv * env, jmethodID * m, linkedClass c,
+ char *name, char *sig);
JNIEXPORT jmethodID JNICALL
-LINK_RelinkStaticMethod(JNIEnv * env, jmethodID * m, linkedClass c,
- char * name, char * sig);
+LINK_RelinkStaticMethod (JNIEnv * env, jmethodID * m, linkedClass c,
+ char *name, char *sig);
JNIEXPORT jfieldID JNICALL
-LINK_RelinkField (JNIEnv * env, jfieldID * f, linkedClass c,
- char * name, char * sig);
+LINK_RelinkField (JNIEnv * env, jfieldID * f, linkedClass c,
+ char *name, char *sig);
JNIEXPORT jfieldID JNICALL
LINK_RelinkStaticField (JNIEnv * env, jfieldID * f, linkedClass c,
- char * name, char * sig);
+ char *name, char *sig);
/* These are for when the class referencing the symbols is unloaded; it
destroys any object references
* the linker might have kept around.
*/
-JNIEXPORT void JNICALL LINK_UnlinkClass (JNIEnv * env, linkedClass * c);
+JNIEXPORT void JNICALL LINK_UnlinkClass (JNIEnv * env, linkedClass * c);
#endif
Index: native/jni/classpath/native_state.c
===================================================================
RCS file: /cvsroot/classpath/classpath/native/jni/classpath/native_state.c,v
retrieving revision 1.7
diff -I*.class -u -r1.7 native_state.c
--- native/jni/classpath/native_state.c 29 Mar 2004 07:07:26 -0000 1.7
+++ native/jni/classpath/native_state.c 21 Jun 2004 18:58:31 -0000
@@ -42,7 +42,7 @@
#define DEFAULT_TABLE_SIZE 97
struct state_table *
-init_state_table_with_size (JNIEnv *env, jclass clazz, jint size)
+init_state_table_with_size (JNIEnv * env, jclass clazz, jint size)
{
struct state_table *table;
jfieldID hash;
@@ -61,13 +61,13 @@
table->head = (struct state_node **) calloc (sizeof (struct state_node *),
table->size);
table->hash = hash;
- table->clazz = clazz_g;
+ table->clazz = clazz_g;
return table;
}
struct state_table *
-init_state_table (JNIEnv *env, jclass clazz)
+init_state_table (JNIEnv * env, jclass clazz)
{
return init_state_table_with_size (env, clazz, DEFAULT_TABLE_SIZE);
}
@@ -97,7 +97,7 @@
return NULL;
}
-
+
static void *
get_node (struct state_node **head, jint obj_id)
{
@@ -119,7 +119,7 @@
/* Return the match. */
return node->c_state;
}
-
+
back_ptr = node;
node = node->next;
}
@@ -127,7 +127,7 @@
return NULL;
}
-static void
+static void
add_node (struct state_node **head, jint obj_id, void *state)
{
struct state_node *node = *head;
@@ -137,7 +137,7 @@
if (node != NULL)
{
- while (node->next != NULL && obj_id != node->key)
+ while (node->next != NULL && obj_id != node->key)
{
back_ptr = node;
node = node->next;
@@ -164,12 +164,12 @@
*head = new_node;
}
-void
-set_state_oid (JNIEnv *env, jobject lock, struct state_table *table,
+void
+set_state_oid (JNIEnv * env, jobject lock, struct state_table *table,
jint obj_id, void *state)
{
jint hash;
-
+
hash = obj_id % table->size;
(*env)->MonitorEnter (env, lock);
@@ -178,12 +178,12 @@
}
void *
-get_state_oid (JNIEnv *env, jobject lock, struct state_table *table,
+get_state_oid (JNIEnv * env, jobject lock, struct state_table *table,
jint obj_id)
{
jint hash;
void *return_value;
-
+
hash = obj_id % table->size;
(*env)->MonitorEnter (env, lock);
@@ -194,12 +194,12 @@
}
void *
-remove_state_oid (JNIEnv *env, jobject lock, struct state_table *table,
+remove_state_oid (JNIEnv * env, jobject lock, struct state_table *table,
jint obj_id)
{
jint hash;
void *return_value;
-
+
hash = obj_id % table->size;
(*env)->MonitorEnter (env, lock);
@@ -210,7 +210,7 @@
}
int
-set_state (JNIEnv *env, jobject obj, struct state_table *table, void *state)
+set_state (JNIEnv * env, jobject obj, struct state_table *table, void *state)
{
jint obj_id;
obj_id = (*env)->GetIntField (env, obj, table->hash);
@@ -223,7 +223,7 @@
}
void *
-get_state (JNIEnv *env, jobject obj, struct state_table *table)
+get_state (JNIEnv * env, jobject obj, struct state_table *table)
{
jint obj_id;
obj_id = (*env)->GetIntField (env, obj, table->hash);
@@ -235,7 +235,7 @@
}
void *
-remove_state_slot (JNIEnv *env, jobject obj, struct state_table *table)
+remove_state_slot (JNIEnv * env, jobject obj, struct state_table *table)
{
jint obj_id;
obj_id = (*env)->GetIntField (env, obj, table->hash);
Index: native/jni/classpath/native_state.h
===================================================================
RCS file: /cvsroot/classpath/classpath/native/jni/classpath/native_state.h,v
retrieving revision 1.4
diff -I*.class -u -r1.4 native_state.h
--- native/jni/classpath/native_state.h 29 Mar 2004 07:07:26 -0000 1.4
+++ native/jni/classpath/native_state.h 21 Jun 2004 18:58:31 -0000
@@ -55,17 +55,17 @@
struct state_node *next;
};
-struct state_table * init_state_table_with_size (JNIEnv *, jclass, jint);
-struct state_table * init_state_table (JNIEnv *, jclass);
+struct state_table *init_state_table_with_size (JNIEnv *, jclass, jint);
+struct state_table *init_state_table (JNIEnv *, jclass);
/* lowlevel api */
void set_state_oid (JNIEnv *, jobject, struct state_table *, jint, void *);
-void * get_state_oid (JNIEnv *, jobject, struct state_table *, jint);
-void * remove_state_oid (JNIEnv *, jobject, struct state_table *, jint);
+void *get_state_oid (JNIEnv *, jobject, struct state_table *, jint);
+void *remove_state_oid (JNIEnv *, jobject, struct state_table *, jint);
/* highlevel api */
int set_state (JNIEnv *, jobject, struct state_table *, void *);
-void * get_state (JNIEnv *, jobject, struct state_table *);
-void * remove_state_slot (JNIEnv *, jobject, struct state_table *);
+void *get_state (JNIEnv *, jobject, struct state_table *);
+void *remove_state_slot (JNIEnv *, jobject, struct state_table *);
#endif
Index: native/jni/classpath/primlib.c
===================================================================
RCS file: /cvsroot/classpath/classpath/native/jni/classpath/primlib.c,v
retrieving revision 1.4
diff -I*.class -u -r1.4 primlib.c
--- native/jni/classpath/primlib.c 29 Mar 2004 07:07:26 -0000 1.4
+++ native/jni/classpath/primlib.c 21 Jun 2004 18:58:31 -0000
@@ -39,425 +39,686 @@
#include <primlib.h>
#include <jcl.h>
-static jclass nativeWrapClass[PRIMLIB_NUMTYPES] = {NULL,NULL,NULL,
NULL,NULL,NULL,
- NULL,NULL,NULL, NULL,NULL,NULL};
-
-static jclass nativeTypeClass[PRIMLIB_NUMTYPES] = {NULL,NULL,NULL,
NULL,NULL,NULL,
- NULL,NULL,NULL, NULL,NULL,NULL};
-
-static jmethodID nativeWrapClassConstructor[PRIMLIB_NUMTYPES] =
{NULL,NULL,NULL, NULL,NULL,NULL,
- NULL,NULL,NULL, NULL,NULL,NULL};
-
-static jmethodID nativeWrapClassAccessor[PRIMLIB_NUMTYPES] = {NULL,NULL,NULL,
NULL,NULL,NULL,
- NULL,NULL,NULL, NULL,NULL,NULL};
-
-static char * nativeWrapClassName[PRIMLIB_NUMTYPES] = {
- NULL,
- NULL,
- "java/lang/Boolean",
- "java/lang/Byte",
- "java/lang/Character",
- "java/lang/Short",
- "java/lang/Integer",
- "java/lang/Long",
- "java/lang/Float",
- "java/lang/Double",
- "java/lang/Void",
- NULL
- };
-
-static char * nativeWrapClassConstructorSig[PRIMLIB_NUMTYPES] = {
- NULL,
- NULL,
- "(Z)V",
- "(B)V",
- "(C)V",
- "(S)V",
- "(I)V",
- "(J)V",
- "(F)V",
- "(D)V",
- "()V",
- NULL
- };
-
-static char * nativeWrapClassAccessorName[PRIMLIB_NUMTYPES] = {
- NULL,
- NULL,
- "booleanValue",
- "byteValue",
- "charValue",
- "shortValue",
- "intValue",
- "longValue",
- "floatValue",
- "doubleValue",
- NULL,
- NULL
+static jclass nativeWrapClass[PRIMLIB_NUMTYPES] =
+ { NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL
};
-static char * nativeWrapClassAccessorSig[PRIMLIB_NUMTYPES] = {
- NULL,
- NULL,
- "()Z",
- "()B",
- "()C",
- "()S",
- "()I",
- "()J",
- "()F",
- "()D",
- NULL,
- NULL
+static jclass nativeTypeClass[PRIMLIB_NUMTYPES] =
+ { NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL
};
+static jmethodID nativeWrapClassConstructor[PRIMLIB_NUMTYPES] =
+ { NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL
+};
-JNIEXPORT jclass JNICALL PRIMLIB_GetNativeWrapClass(JNIEnv * env, int
reflectType) {
- return
LINK_LinkClass(env,nativeWrapClass[reflectType],nativeWrapClassName[reflectType]);
-}
-
-static jclass ActuallyGetNativeTypeClass(JNIEnv * env, int reflectType) {
- jclass wrapClass;
- jfieldID typeField;
-
- wrapClass = PRIMLIB_GetNativeWrapClass(env, reflectType);
- if(wrapClass == NULL)
- return NULL;
- typeField = (*env)->GetStaticFieldID(env, wrapClass, "TYPE",
"Ljava/lang/Class");
- if(typeField == NULL)
- return NULL;
- return (*env)->GetStaticObjectField(env, wrapClass, typeField);
-}
-
-JNIEXPORT jclass JNICALL PRIMLIB_GetNativeTypeClass(JNIEnv * env, int
reflectType) {
- return LINK_LinkKnownClass(env, nativeTypeClass[reflectType],
ActuallyGetNativeTypeClass(env,reflectType));
-}
-
-JNIEXPORT jmethodID JNICALL PRIMLIB_GetNativeWrapClassConstructor(JNIEnv *
env, int reflectType) {
- PRIMLIB_GetNativeWrapClass(env,reflectType);
- return LINK_LinkConstructor(env,
nativeWrapClassConstructor[reflectType], nativeWrapClass[reflectType],
nativeWrapClassConstructorSig[reflectType]);
-}
-
-JNIEXPORT jmethodID JNICALL PRIMLIB_GetNativeWrapClassAccessor(JNIEnv * env,
int reflectType) {
- PRIMLIB_GetNativeWrapClass(env,reflectType);
- return LINK_LinkMethod(env, nativeWrapClassAccessor[reflectType],
nativeWrapClass[reflectType], nativeWrapClassAccessorName[reflectType],
nativeWrapClassAccessorSig[reflectType]);
-}
-
-
-
-JNIEXPORT jobject JNICALL PRIMLIB_WrapBoolean(JNIEnv * env, jboolean b) {
- jmethodID construct = PRIMLIB_GetNativeWrapClassConstructor(env,
PRIMLIB_BOOLEAN);
- JCL_RETHROW_EXCEPTION(env);
- return (*env)->NewObject(env, PRIMLIB_GetNativeWrapClass(env,
PRIMLIB_BOOLEAN), construct, b);
-}
-
-JNIEXPORT jobject JNICALL PRIMLIB_WrapByte (JNIEnv * env, jbyte b) {
- jmethodID construct = PRIMLIB_GetNativeWrapClassConstructor(env,
PRIMLIB_BYTE);
- JCL_RETHROW_EXCEPTION(env);
- return (*env)->NewObject(env, PRIMLIB_GetNativeWrapClass(env,
PRIMLIB_BYTE), construct, b);
-}
-
-JNIEXPORT jobject JNICALL PRIMLIB_WrapChar (JNIEnv * env, jchar c) {
- jmethodID construct = PRIMLIB_GetNativeWrapClassConstructor(env,
PRIMLIB_CHAR);
- JCL_RETHROW_EXCEPTION(env);
- return (*env)->NewObject(env, PRIMLIB_GetNativeWrapClass(env,
PRIMLIB_CHAR), construct, c);
-}
-
-JNIEXPORT jobject JNICALL PRIMLIB_WrapShort (JNIEnv * env, jshort s) {
- jmethodID construct = PRIMLIB_GetNativeWrapClassConstructor(env,
PRIMLIB_SHORT);
- JCL_RETHROW_EXCEPTION(env);
- return (*env)->NewObject(env, PRIMLIB_GetNativeWrapClass(env,
PRIMLIB_SHORT), construct, s);
-}
-
-JNIEXPORT jobject JNICALL PRIMLIB_WrapInt (JNIEnv * env, jint i) {
- jmethodID construct = PRIMLIB_GetNativeWrapClassConstructor(env,
PRIMLIB_INT);
- JCL_RETHROW_EXCEPTION(env);
- return (*env)->NewObject(env, PRIMLIB_GetNativeWrapClass(env,
PRIMLIB_INT), construct, i);
-}
-
-JNIEXPORT jobject JNICALL PRIMLIB_WrapLong (JNIEnv * env, jlong l) {
- jmethodID construct = PRIMLIB_GetNativeWrapClassConstructor(env,
PRIMLIB_LONG);
- JCL_RETHROW_EXCEPTION(env);
- return (*env)->NewObject(env, PRIMLIB_GetNativeWrapClass(env,
PRIMLIB_LONG), construct, l);
-}
-
-JNIEXPORT jobject JNICALL PRIMLIB_WrapFloat (JNIEnv * env, jfloat f) {
- jmethodID construct = PRIMLIB_GetNativeWrapClassConstructor(env,
PRIMLIB_FLOAT);
- JCL_RETHROW_EXCEPTION(env);
- return (*env)->NewObject(env, PRIMLIB_GetNativeWrapClass(env,
PRIMLIB_FLOAT), construct, f);
-}
-
-JNIEXPORT jobject JNICALL PRIMLIB_WrapDouble (JNIEnv * env, jdouble d) {
- jmethodID construct = PRIMLIB_GetNativeWrapClassConstructor(env,
PRIMLIB_DOUBLE);
- JCL_RETHROW_EXCEPTION(env);
- return (*env)->NewObject(env, PRIMLIB_GetNativeWrapClass(env,
PRIMLIB_DOUBLE), construct, d);
-}
-
-
-JNIEXPORT jboolean JNICALL PRIMLIB_UnwrapBoolean(JNIEnv * env, jobject obj) {
- if((*env)->IsInstanceOf(env, obj, PRIMLIB_GetNativeWrapClass(env,
PRIMLIB_BOOLEAN))) {
- return PRIMLIB_GetBooleanObjectValue(env, obj);
- } else {
- JCL_ThrowException(env, "java/lang/IllegalArgumentException",
"Argument not of correct type.");
- return JNI_FALSE;
- }
-}
-
-JNIEXPORT jbyte JNICALL PRIMLIB_UnwrapByte(JNIEnv * env, jobject obj) {
- if((*env)->IsInstanceOf(env, obj, PRIMLIB_GetNativeWrapClass(env,
PRIMLIB_BYTE))) {
- return PRIMLIB_GetByteObjectValue(env, obj);
- } else {
- JCL_ThrowException(env, "java/lang/IllegalArgumentException",
"Argument not of correct type.");
- return 0;
- }
-}
-
-JNIEXPORT jshort JNICALL PRIMLIB_UnwrapShort(JNIEnv * env, jobject obj) {
- if((*env)->IsInstanceOf(env, obj, PRIMLIB_GetNativeWrapClass(env,
PRIMLIB_SHORT))) {
- return PRIMLIB_GetShortObjectValue(env, obj);
- } else if((*env)->IsInstanceOf(env, obj,
PRIMLIB_GetNativeWrapClass(env, PRIMLIB_BYTE))) {
- return (jshort)PRIMLIB_GetByteObjectValue(env, obj);
- } else {
- JCL_ThrowException(env, "java/lang/IllegalArgumentException",
"Argument not of correct type.");
- return 0;
- }
-}
-
-JNIEXPORT jchar JNICALL PRIMLIB_UnwrapChar(JNIEnv * env, jobject obj) {
- if((*env)->IsInstanceOf(env, obj, PRIMLIB_GetNativeWrapClass(env,
PRIMLIB_CHAR))) {
- return PRIMLIB_GetCharObjectValue(env, obj);
- } else {
- JCL_ThrowException(env, "java/lang/IllegalArgumentException",
"Argument not of correct type.");
- return 0;
- }
-}
-
-JNIEXPORT jint JNICALL PRIMLIB_UnwrapInt(JNIEnv * env, jobject obj) {
- if((*env)->IsInstanceOf(env, obj, PRIMLIB_GetNativeWrapClass(env,
PRIMLIB_INT))) {
- return PRIMLIB_GetIntObjectValue(env, obj);
- } else if((*env)->IsInstanceOf(env, obj,
PRIMLIB_GetNativeWrapClass(env, PRIMLIB_SHORT))) {
- return (jint)PRIMLIB_GetShortObjectValue(env, obj);
- } else if((*env)->IsInstanceOf(env, obj,
PRIMLIB_GetNativeWrapClass(env, PRIMLIB_CHAR))) {
- return (jint)PRIMLIB_GetCharObjectValue(env, obj);
- } else if((*env)->IsInstanceOf(env, obj,
PRIMLIB_GetNativeWrapClass(env, PRIMLIB_BYTE))) {
- return (jint)PRIMLIB_GetByteObjectValue(env, obj);
- } else {
- JCL_ThrowException(env, "java/lang/IllegalArgumentException",
"Argument not of correct type.");
- return 0;
- }
-}
-
-JNIEXPORT jlong JNICALL PRIMLIB_UnwrapLong(JNIEnv * env, jobject obj) {
- if((*env)->IsInstanceOf(env, obj, PRIMLIB_GetNativeWrapClass(env,
PRIMLIB_LONG))) {
- return PRIMLIB_GetLongObjectValue(env, obj);
- } else if((*env)->IsInstanceOf(env, obj,
PRIMLIB_GetNativeWrapClass(env, PRIMLIB_INT))) {
- return (jlong)PRIMLIB_GetIntObjectValue(env, obj);
- } else if((*env)->IsInstanceOf(env, obj,
PRIMLIB_GetNativeWrapClass(env, PRIMLIB_SHORT))) {
- return (jlong)PRIMLIB_GetShortObjectValue(env, obj);
- } else if((*env)->IsInstanceOf(env, obj,
PRIMLIB_GetNativeWrapClass(env, PRIMLIB_CHAR))) {
- return (jlong)PRIMLIB_GetCharObjectValue(env, obj);
- } else if((*env)->IsInstanceOf(env, obj,
PRIMLIB_GetNativeWrapClass(env, PRIMLIB_BYTE))) {
- return (jlong)PRIMLIB_GetByteObjectValue(env, obj);
- } else {
- JCL_ThrowException(env, "java/lang/IllegalArgumentException",
"Argument not of correct type.");
- return 0;
- }
-}
-
-JNIEXPORT jfloat JNICALL PRIMLIB_UnwrapFloat(JNIEnv * env, jobject obj) {
- if((*env)->IsInstanceOf(env, obj, PRIMLIB_GetNativeWrapClass(env,
PRIMLIB_FLOAT))) {
- return PRIMLIB_GetFloatObjectValue(env, obj);
- } else if((*env)->IsInstanceOf(env, obj,
PRIMLIB_GetNativeWrapClass(env, PRIMLIB_LONG))) {
- return (jfloat)PRIMLIB_GetLongObjectValue(env, obj);
- } else if((*env)->IsInstanceOf(env, obj,
PRIMLIB_GetNativeWrapClass(env, PRIMLIB_INT))) {
- return (jfloat)PRIMLIB_GetIntObjectValue(env, obj);
- } else if((*env)->IsInstanceOf(env, obj,
PRIMLIB_GetNativeWrapClass(env, PRIMLIB_SHORT))) {
- return (jfloat)PRIMLIB_GetShortObjectValue(env, obj);
- } else if((*env)->IsInstanceOf(env, obj,
PRIMLIB_GetNativeWrapClass(env, PRIMLIB_CHAR))) {
- return (jfloat)PRIMLIB_GetCharObjectValue(env, obj);
- } else if((*env)->IsInstanceOf(env, obj,
PRIMLIB_GetNativeWrapClass(env, PRIMLIB_BYTE))) {
- return (jfloat)PRIMLIB_GetByteObjectValue(env, obj);
- } else {
- JCL_ThrowException(env, "java/lang/IllegalArgumentException",
"Argument not of correct type.");
- return 0;
- }
-}
-
-JNIEXPORT jdouble JNICALL PRIMLIB_UnwrapDouble(JNIEnv * env, jobject obj) {
- if((*env)->IsInstanceOf(env, obj, PRIMLIB_GetNativeWrapClass(env,
PRIMLIB_DOUBLE))) {
- return PRIMLIB_GetDoubleObjectValue(env, obj);
- } else if((*env)->IsInstanceOf(env, obj,
PRIMLIB_GetNativeWrapClass(env, PRIMLIB_FLOAT))) {
- return (jdouble)PRIMLIB_GetFloatObjectValue(env, obj);
- } else if((*env)->IsInstanceOf(env, obj,
PRIMLIB_GetNativeWrapClass(env, PRIMLIB_LONG))) {
- return (jdouble)PRIMLIB_GetLongObjectValue(env, obj);
- } else if((*env)->IsInstanceOf(env, obj,
PRIMLIB_GetNativeWrapClass(env, PRIMLIB_INT))) {
- return (jdouble)PRIMLIB_GetIntObjectValue(env, obj);
- } else if((*env)->IsInstanceOf(env, obj,
PRIMLIB_GetNativeWrapClass(env, PRIMLIB_SHORT))) {
- return (jdouble)PRIMLIB_GetShortObjectValue(env, obj);
- } else if((*env)->IsInstanceOf(env, obj,
PRIMLIB_GetNativeWrapClass(env, PRIMLIB_CHAR))) {
- return (jdouble)PRIMLIB_GetCharObjectValue(env, obj);
- } else if((*env)->IsInstanceOf(env, obj,
PRIMLIB_GetNativeWrapClass(env, PRIMLIB_BYTE))) {
- return (jdouble)PRIMLIB_GetByteObjectValue(env, obj);
- } else {
- JCL_ThrowException(env, "java/lang/IllegalArgumentException",
"Argument not of correct type.");
- return 0;
- }
-}
-
-JNIEXPORT jint JNICALL PRIMLIB_GetReflectiveWrapperType(JNIEnv * env, jobject
obj) {
- jclass typeClass;
- if(obj == NULL) {
- return PRIMLIB_NULL;
- }
-
- typeClass = PRIMLIB_GetNativeWrapClass(env, PRIMLIB_DOUBLE);
- if((*env)->IsInstanceOf(env, obj, typeClass)) {
- return PRIMLIB_DOUBLE;
- }
- typeClass = PRIMLIB_GetNativeWrapClass(env, PRIMLIB_FLOAT);
- if((*env)->IsInstanceOf(env, obj, typeClass)) {
- return PRIMLIB_FLOAT;
- }
- typeClass = PRIMLIB_GetNativeWrapClass(env, PRIMLIB_LONG);
- if((*env)->IsInstanceOf(env, obj, typeClass)) {
- return PRIMLIB_LONG;
- }
- typeClass = PRIMLIB_GetNativeWrapClass(env, PRIMLIB_INT);
- if((*env)->IsInstanceOf(env, obj, typeClass)) {
- return PRIMLIB_INT;
- }
- typeClass = PRIMLIB_GetNativeWrapClass(env, PRIMLIB_CHAR);
- if((*env)->IsInstanceOf(env, obj, typeClass)) {
- return PRIMLIB_CHAR;
- }
- typeClass = PRIMLIB_GetNativeWrapClass(env, PRIMLIB_SHORT);
- if((*env)->IsInstanceOf(env, obj, typeClass)) {
- return PRIMLIB_SHORT;
- }
- typeClass = PRIMLIB_GetNativeWrapClass(env, PRIMLIB_BYTE);
- if((*env)->IsInstanceOf(env, obj, typeClass)) {
- return PRIMLIB_BYTE;
- }
- typeClass = PRIMLIB_GetNativeWrapClass(env, PRIMLIB_BOOLEAN);
- if((*env)->IsInstanceOf(env, obj, typeClass)) {
- return PRIMLIB_BOOLEAN;
- }
- typeClass = PRIMLIB_GetNativeWrapClass(env, PRIMLIB_VOID);
- if((*env)->IsInstanceOf(env, obj, typeClass)) {
- return PRIMLIB_VOID;
- }
- return PRIMLIB_OBJECT;
-}
-
-JNIEXPORT jint JNICALL PRIMLIB_GetReflectiveType(JNIEnv * env, jclass
returnType) {
- jclass typeClass = PRIMLIB_GetNativeTypeClass(env, PRIMLIB_DOUBLE);
- if((*env)->IsAssignableFrom(env, returnType, typeClass)) {
- return PRIMLIB_DOUBLE;
- }
- typeClass = PRIMLIB_GetNativeTypeClass(env, PRIMLIB_FLOAT);
- if((*env)->IsAssignableFrom(env, returnType, typeClass)) {
- return PRIMLIB_FLOAT;
- }
- typeClass = PRIMLIB_GetNativeTypeClass(env, PRIMLIB_LONG);
- if((*env)->IsAssignableFrom(env, returnType, typeClass)) {
- return PRIMLIB_LONG;
- }
- typeClass = PRIMLIB_GetNativeTypeClass(env, PRIMLIB_INT);
- if((*env)->IsAssignableFrom(env, returnType, typeClass)) {
- return PRIMLIB_INT;
- }
- typeClass = PRIMLIB_GetNativeTypeClass(env, PRIMLIB_CHAR);
- if((*env)->IsAssignableFrom(env, returnType, typeClass)) {
- return PRIMLIB_CHAR;
- }
- typeClass = PRIMLIB_GetNativeTypeClass(env, PRIMLIB_SHORT);
- if((*env)->IsAssignableFrom(env, returnType, typeClass)) {
- return PRIMLIB_SHORT;
- }
- typeClass = PRIMLIB_GetNativeTypeClass(env, PRIMLIB_BYTE);
- if((*env)->IsAssignableFrom(env, returnType, typeClass)) {
- return PRIMLIB_BYTE;
- }
- typeClass = PRIMLIB_GetNativeTypeClass(env, PRIMLIB_BOOLEAN);
- if((*env)->IsAssignableFrom(env, returnType, typeClass)) {
- return PRIMLIB_BOOLEAN;
- }
- typeClass = PRIMLIB_GetNativeTypeClass(env, PRIMLIB_VOID);
- if((*env)->IsAssignableFrom(env, returnType, typeClass)) {
- return PRIMLIB_VOID;
- }
- return PRIMLIB_OBJECT;
-}
-
-
-JNIEXPORT jboolean JNICALL PRIMLIB_GetBooleanObjectValue(JNIEnv * env, jobject
obj) {
- jmethodID acc = PRIMLIB_GetNativeWrapClassAccessor(env,
PRIMLIB_BOOLEAN);
- return (*env)->CallBooleanMethod(env, obj, acc);
-}
-
-JNIEXPORT jbyte JNICALL PRIMLIB_GetByteObjectValue(JNIEnv * env, jobject obj) {
- jmethodID acc = PRIMLIB_GetNativeWrapClassAccessor(env, PRIMLIB_BYTE);
- return (*env)->CallByteMethod(env, obj, acc);
-}
-
-JNIEXPORT jshort JNICALL PRIMLIB_GetShortObjectValue(JNIEnv * env, jobject
obj) {
- jmethodID acc = PRIMLIB_GetNativeWrapClassAccessor(env, PRIMLIB_SHORT);
- return (*env)->CallShortMethod(env, obj, acc);
-}
-
-JNIEXPORT jchar JNICALL PRIMLIB_GetCharObjectValue(JNIEnv * env, jobject obj) {
- jmethodID acc = PRIMLIB_GetNativeWrapClassAccessor(env, PRIMLIB_CHAR);
- return (*env)->CallCharMethod(env, obj, acc);
-}
-
-JNIEXPORT jint JNICALL PRIMLIB_GetIntObjectValue(JNIEnv * env, jobject obj) {
- jmethodID acc = PRIMLIB_GetNativeWrapClassAccessor(env, PRIMLIB_INT);
- return (*env)->CallIntMethod(env, obj, acc);
-}
+static jmethodID nativeWrapClassAccessor[PRIMLIB_NUMTYPES] =
+ { NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL
+};
-JNIEXPORT jlong JNICALL PRIMLIB_GetLongObjectValue(JNIEnv * env, jobject obj) {
- jmethodID acc = PRIMLIB_GetNativeWrapClassAccessor(env, PRIMLIB_LONG);
- return (*env)->CallLongMethod(env, obj, acc);
-}
+static char *nativeWrapClassName[PRIMLIB_NUMTYPES] = {
+ NULL,
+ NULL,
+ "java/lang/Boolean",
+ "java/lang/Byte",
+ "java/lang/Character",
+ "java/lang/Short",
+ "java/lang/Integer",
+ "java/lang/Long",
+ "java/lang/Float",
+ "java/lang/Double",
+ "java/lang/Void",
+ NULL
+};
-JNIEXPORT jfloat JNICALL PRIMLIB_GetFloatObjectValue(JNIEnv * env, jobject
obj) {
- jmethodID acc = PRIMLIB_GetNativeWrapClassAccessor(env, PRIMLIB_FLOAT);
- return (*env)->CallFloatMethod(env, obj, acc);
-}
+static char *nativeWrapClassConstructorSig[PRIMLIB_NUMTYPES] = {
+ NULL,
+ NULL,
+ "(Z)V",
+ "(B)V",
+ "(C)V",
+ "(S)V",
+ "(I)V",
+ "(J)V",
+ "(F)V",
+ "(D)V",
+ "()V",
+ NULL
+};
-JNIEXPORT jdouble JNICALL PRIMLIB_GetDoubleObjectValue(JNIEnv * env, jobject
obj) {
- jmethodID acc = PRIMLIB_GetNativeWrapClassAccessor(env, PRIMLIB_DOUBLE);
- return (*env)->CallDoubleMethod(env, obj, acc);
-}
+static char *nativeWrapClassAccessorName[PRIMLIB_NUMTYPES] = {
+ NULL,
+ NULL,
+ "booleanValue",
+ "byteValue",
+ "charValue",
+ "shortValue",
+ "intValue",
+ "longValue",
+ "floatValue",
+ "doubleValue",
+ NULL,
+ NULL
+};
+static char *nativeWrapClassAccessorSig[PRIMLIB_NUMTYPES] = {
+ NULL,
+ NULL,
+ "()Z",
+ "()B",
+ "()C",
+ "()S",
+ "()I",
+ "()J",
+ "()F",
+ "()D",
+ NULL,
+ NULL
+};
-JNIEXPORT jvalue JNICALL PRIMLIB_UnwrapJValue(JNIEnv* env, jobject obj, jclass
classType) {
- jvalue retval;
- jint objType = PRIMLIB_GetReflectiveType(env, classType);
- if(objType == PRIMLIB_BOOLEAN) {
- retval.z = PRIMLIB_UnwrapBoolean(env,obj);
- } else if(objType == PRIMLIB_BYTE) {
- retval.b = PRIMLIB_UnwrapByte(env,obj);
- } else if(objType == PRIMLIB_CHAR) {
- retval.c = PRIMLIB_UnwrapChar(env,obj);
- } else if(objType == PRIMLIB_SHORT) {
- retval.s = PRIMLIB_UnwrapShort(env,obj);
- } else if(objType == PRIMLIB_INT) {
- retval.i = PRIMLIB_UnwrapInt(env,obj);
- } else if(objType == PRIMLIB_LONG) {
- retval.j = PRIMLIB_UnwrapLong(env,obj);
- } else if(objType == PRIMLIB_FLOAT) {
- retval.f = PRIMLIB_UnwrapFloat(env,obj);
- } else if(objType == PRIMLIB_DOUBLE) {
- retval.d = PRIMLIB_UnwrapDouble(env,obj);
- } else {
- if(obj != NULL && !(*env)->IsInstanceOf(env, obj, classType)) {
- JCL_ThrowException(env,
"java/lang/IllegalArgumentException", "Argument not of correct object type.");
- return retval;
- }
- retval.l = obj;
- }
- return retval;
+JNIEXPORT jclass JNICALL
+PRIMLIB_GetNativeWrapClass (JNIEnv * env, int reflectType)
+{
+ return LINK_LinkClass (env, nativeWrapClass[reflectType],
+ nativeWrapClassName[reflectType]);
+}
+
+static jclass
+ActuallyGetNativeTypeClass (JNIEnv * env, int reflectType)
+{
+ jclass wrapClass;
+ jfieldID typeField;
+
+ wrapClass = PRIMLIB_GetNativeWrapClass (env, reflectType);
+ if (wrapClass == NULL)
+ return NULL;
+ typeField =
+ (*env)->GetStaticFieldID (env, wrapClass, "TYPE", "Ljava/lang/Class");
+ if (typeField == NULL)
+ return NULL;
+ return (*env)->GetStaticObjectField (env, wrapClass, typeField);
+}
+
+JNIEXPORT jclass JNICALL
+PRIMLIB_GetNativeTypeClass (JNIEnv * env, int reflectType)
+{
+ return LINK_LinkKnownClass (env, nativeTypeClass[reflectType],
+ ActuallyGetNativeTypeClass (env, reflectType));
+}
+
+JNIEXPORT jmethodID JNICALL
+PRIMLIB_GetNativeWrapClassConstructor (JNIEnv * env, int reflectType)
+{
+ PRIMLIB_GetNativeWrapClass (env, reflectType);
+ return LINK_LinkConstructor (env, nativeWrapClassConstructor[reflectType],
+ nativeWrapClass[reflectType],
+ nativeWrapClassConstructorSig[reflectType]);
+}
+
+JNIEXPORT jmethodID JNICALL
+PRIMLIB_GetNativeWrapClassAccessor (JNIEnv * env, int reflectType)
+{
+ PRIMLIB_GetNativeWrapClass (env, reflectType);
+ return LINK_LinkMethod (env, nativeWrapClassAccessor[reflectType],
+ nativeWrapClass[reflectType],
+ nativeWrapClassAccessorName[reflectType],
+ nativeWrapClassAccessorSig[reflectType]);
+}
+
+
+
+JNIEXPORT jobject JNICALL
+PRIMLIB_WrapBoolean (JNIEnv * env, jboolean b)
+{
+ jmethodID construct =
+ PRIMLIB_GetNativeWrapClassConstructor (env, PRIMLIB_BOOLEAN);
+ JCL_RETHROW_EXCEPTION (env);
+ return (*env)->NewObject (env,
+ PRIMLIB_GetNativeWrapClass (env, PRIMLIB_BOOLEAN),
+ construct, b);
+}
+
+JNIEXPORT jobject JNICALL
+PRIMLIB_WrapByte (JNIEnv * env, jbyte b)
+{
+ jmethodID construct =
+ PRIMLIB_GetNativeWrapClassConstructor (env, PRIMLIB_BYTE);
+ JCL_RETHROW_EXCEPTION (env);
+ return (*env)->NewObject (env,
+ PRIMLIB_GetNativeWrapClass (env, PRIMLIB_BYTE),
+ construct, b);
+}
+
+JNIEXPORT jobject JNICALL
+PRIMLIB_WrapChar (JNIEnv * env, jchar c)
+{
+ jmethodID construct =
+ PRIMLIB_GetNativeWrapClassConstructor (env, PRIMLIB_CHAR);
+ JCL_RETHROW_EXCEPTION (env);
+ return (*env)->NewObject (env,
+ PRIMLIB_GetNativeWrapClass (env, PRIMLIB_CHAR),
+ construct, c);
+}
+
+JNIEXPORT jobject JNICALL
+PRIMLIB_WrapShort (JNIEnv * env, jshort s)
+{
+ jmethodID construct =
+ PRIMLIB_GetNativeWrapClassConstructor (env, PRIMLIB_SHORT);
+ JCL_RETHROW_EXCEPTION (env);
+ return (*env)->NewObject (env,
+ PRIMLIB_GetNativeWrapClass (env, PRIMLIB_SHORT),
+ construct, s);
+}
+
+JNIEXPORT jobject JNICALL
+PRIMLIB_WrapInt (JNIEnv * env, jint i)
+{
+ jmethodID construct =
+ PRIMLIB_GetNativeWrapClassConstructor (env, PRIMLIB_INT);
+ JCL_RETHROW_EXCEPTION (env);
+ return (*env)->NewObject (env,
+ PRIMLIB_GetNativeWrapClass (env, PRIMLIB_INT),
+ construct, i);
+}
+
+JNIEXPORT jobject JNICALL
+PRIMLIB_WrapLong (JNIEnv * env, jlong l)
+{
+ jmethodID construct =
+ PRIMLIB_GetNativeWrapClassConstructor (env, PRIMLIB_LONG);
+ JCL_RETHROW_EXCEPTION (env);
+ return (*env)->NewObject (env,
+ PRIMLIB_GetNativeWrapClass (env, PRIMLIB_LONG),
+ construct, l);
+}
+
+JNIEXPORT jobject JNICALL
+PRIMLIB_WrapFloat (JNIEnv * env, jfloat f)
+{
+ jmethodID construct =
+ PRIMLIB_GetNativeWrapClassConstructor (env, PRIMLIB_FLOAT);
+ JCL_RETHROW_EXCEPTION (env);
+ return (*env)->NewObject (env,
+ PRIMLIB_GetNativeWrapClass (env, PRIMLIB_FLOAT),
+ construct, f);
+}
+
+JNIEXPORT jobject JNICALL
+PRIMLIB_WrapDouble (JNIEnv * env, jdouble d)
+{
+ jmethodID construct =
+ PRIMLIB_GetNativeWrapClassConstructor (env, PRIMLIB_DOUBLE);
+ JCL_RETHROW_EXCEPTION (env);
+ return (*env)->NewObject (env,
+ PRIMLIB_GetNativeWrapClass (env, PRIMLIB_DOUBLE),
+ construct, d);
+}
+
+
+JNIEXPORT jboolean JNICALL
+PRIMLIB_UnwrapBoolean (JNIEnv * env, jobject obj)
+{
+ if ((*env)->
+ IsInstanceOf (env, obj,
+ PRIMLIB_GetNativeWrapClass (env, PRIMLIB_BOOLEAN)))
+ {
+ return PRIMLIB_GetBooleanObjectValue (env, obj);
+ }
+ else
+ {
+ JCL_ThrowException (env, "java/lang/IllegalArgumentException",
+ "Argument not of correct type.");
+ return JNI_FALSE;
+ }
+}
+
+JNIEXPORT jbyte JNICALL
+PRIMLIB_UnwrapByte (JNIEnv * env, jobject obj)
+{
+ if ((*env)->
+ IsInstanceOf (env, obj, PRIMLIB_GetNativeWrapClass (env, PRIMLIB_BYTE)))
+ {
+ return PRIMLIB_GetByteObjectValue (env, obj);
+ }
+ else
+ {
+ JCL_ThrowException (env, "java/lang/IllegalArgumentException",
+ "Argument not of correct type.");
+ return 0;
+ }
+}
+
+JNIEXPORT jshort JNICALL
+PRIMLIB_UnwrapShort (JNIEnv * env, jobject obj)
+{
+ if ((*env)->
+ IsInstanceOf (env, obj,
+ PRIMLIB_GetNativeWrapClass (env, PRIMLIB_SHORT)))
+ {
+ return PRIMLIB_GetShortObjectValue (env, obj);
+ }
+ else if ((*env)->
+ IsInstanceOf (env, obj,
+ PRIMLIB_GetNativeWrapClass (env, PRIMLIB_BYTE)))
+ {
+ return (jshort) PRIMLIB_GetByteObjectValue (env, obj);
+ }
+ else
+ {
+ JCL_ThrowException (env, "java/lang/IllegalArgumentException",
+ "Argument not of correct type.");
+ return 0;
+ }
+}
+
+JNIEXPORT jchar JNICALL
+PRIMLIB_UnwrapChar (JNIEnv * env, jobject obj)
+{
+ if ((*env)->
+ IsInstanceOf (env, obj, PRIMLIB_GetNativeWrapClass (env, PRIMLIB_CHAR)))
+ {
+ return PRIMLIB_GetCharObjectValue (env, obj);
+ }
+ else
+ {
+ JCL_ThrowException (env, "java/lang/IllegalArgumentException",
+ "Argument not of correct type.");
+ return 0;
+ }
+}
+
+JNIEXPORT jint JNICALL
+PRIMLIB_UnwrapInt (JNIEnv * env, jobject obj)
+{
+ if ((*env)->
+ IsInstanceOf (env, obj, PRIMLIB_GetNativeWrapClass (env, PRIMLIB_INT)))
+ {
+ return PRIMLIB_GetIntObjectValue (env, obj);
+ }
+ else if ((*env)->
+ IsInstanceOf (env, obj,
+ PRIMLIB_GetNativeWrapClass (env, PRIMLIB_SHORT)))
+ {
+ return (jint) PRIMLIB_GetShortObjectValue (env, obj);
+ }
+ else if ((*env)->
+ IsInstanceOf (env, obj,
+ PRIMLIB_GetNativeWrapClass (env, PRIMLIB_CHAR)))
+ {
+ return (jint) PRIMLIB_GetCharObjectValue (env, obj);
+ }
+ else if ((*env)->
+ IsInstanceOf (env, obj,
+ PRIMLIB_GetNativeWrapClass (env, PRIMLIB_BYTE)))
+ {
+ return (jint) PRIMLIB_GetByteObjectValue (env, obj);
+ }
+ else
+ {
+ JCL_ThrowException (env, "java/lang/IllegalArgumentException",
+ "Argument not of correct type.");
+ return 0;
+ }
+}
+
+JNIEXPORT jlong JNICALL
+PRIMLIB_UnwrapLong (JNIEnv * env, jobject obj)
+{
+ if ((*env)->
+ IsInstanceOf (env, obj, PRIMLIB_GetNativeWrapClass (env, PRIMLIB_LONG)))
+ {
+ return PRIMLIB_GetLongObjectValue (env, obj);
+ }
+ else if ((*env)->
+ IsInstanceOf (env, obj,
+ PRIMLIB_GetNativeWrapClass (env, PRIMLIB_INT)))
+ {
+ return (jlong) PRIMLIB_GetIntObjectValue (env, obj);
+ }
+ else if ((*env)->
+ IsInstanceOf (env, obj,
+ PRIMLIB_GetNativeWrapClass (env, PRIMLIB_SHORT)))
+ {
+ return (jlong) PRIMLIB_GetShortObjectValue (env, obj);
+ }
+ else if ((*env)->
+ IsInstanceOf (env, obj,
+ PRIMLIB_GetNativeWrapClass (env, PRIMLIB_CHAR)))
+ {
+ return (jlong) PRIMLIB_GetCharObjectValue (env, obj);
+ }
+ else if ((*env)->
+ IsInstanceOf (env, obj,
+ PRIMLIB_GetNativeWrapClass (env, PRIMLIB_BYTE)))
+ {
+ return (jlong) PRIMLIB_GetByteObjectValue (env, obj);
+ }
+ else
+ {
+ JCL_ThrowException (env, "java/lang/IllegalArgumentException",
+ "Argument not of correct type.");
+ return 0;
+ }
+}
+
+JNIEXPORT jfloat JNICALL
+PRIMLIB_UnwrapFloat (JNIEnv * env, jobject obj)
+{
+ if ((*env)->
+ IsInstanceOf (env, obj,
+ PRIMLIB_GetNativeWrapClass (env, PRIMLIB_FLOAT)))
+ {
+ return PRIMLIB_GetFloatObjectValue (env, obj);
+ }
+ else if ((*env)->
+ IsInstanceOf (env, obj,
+ PRIMLIB_GetNativeWrapClass (env, PRIMLIB_LONG)))
+ {
+ return (jfloat) PRIMLIB_GetLongObjectValue (env, obj);
+ }
+ else if ((*env)->
+ IsInstanceOf (env, obj,
+ PRIMLIB_GetNativeWrapClass (env, PRIMLIB_INT)))
+ {
+ return (jfloat) PRIMLIB_GetIntObjectValue (env, obj);
+ }
+ else if ((*env)->
+ IsInstanceOf (env, obj,
+ PRIMLIB_GetNativeWrapClass (env, PRIMLIB_SHORT)))
+ {
+ return (jfloat) PRIMLIB_GetShortObjectValue (env, obj);
+ }
+ else if ((*env)->
+ IsInstanceOf (env, obj,
+ PRIMLIB_GetNativeWrapClass (env, PRIMLIB_CHAR)))
+ {
+ return (jfloat) PRIMLIB_GetCharObjectValue (env, obj);
+ }
+ else if ((*env)->
+ IsInstanceOf (env, obj,
+ PRIMLIB_GetNativeWrapClass (env, PRIMLIB_BYTE)))
+ {
+ return (jfloat) PRIMLIB_GetByteObjectValue (env, obj);
+ }
+ else
+ {
+ JCL_ThrowException (env, "java/lang/IllegalArgumentException",
+ "Argument not of correct type.");
+ return 0;
+ }
+}
+
+JNIEXPORT jdouble JNICALL
+PRIMLIB_UnwrapDouble (JNIEnv * env, jobject obj)
+{
+ if ((*env)->
+ IsInstanceOf (env, obj,
+ PRIMLIB_GetNativeWrapClass (env, PRIMLIB_DOUBLE)))
+ {
+ return PRIMLIB_GetDoubleObjectValue (env, obj);
+ }
+ else if ((*env)->
+ IsInstanceOf (env, obj,
+ PRIMLIB_GetNativeWrapClass (env, PRIMLIB_FLOAT)))
+ {
+ return (jdouble) PRIMLIB_GetFloatObjectValue (env, obj);
+ }
+ else if ((*env)->
+ IsInstanceOf (env, obj,
+ PRIMLIB_GetNativeWrapClass (env, PRIMLIB_LONG)))
+ {
+ return (jdouble) PRIMLIB_GetLongObjectValue (env, obj);
+ }
+ else if ((*env)->
+ IsInstanceOf (env, obj,
+ PRIMLIB_GetNativeWrapClass (env, PRIMLIB_INT)))
+ {
+ return (jdouble) PRIMLIB_GetIntObjectValue (env, obj);
+ }
+ else if ((*env)->
+ IsInstanceOf (env, obj,
+ PRIMLIB_GetNativeWrapClass (env, PRIMLIB_SHORT)))
+ {
+ return (jdouble) PRIMLIB_GetShortObjectValue (env, obj);
+ }
+ else if ((*env)->
+ IsInstanceOf (env, obj,
+ PRIMLIB_GetNativeWrapClass (env, PRIMLIB_CHAR)))
+ {
+ return (jdouble) PRIMLIB_GetCharObjectValue (env, obj);
+ }
+ else if ((*env)->
+ IsInstanceOf (env, obj,
+ PRIMLIB_GetNativeWrapClass (env, PRIMLIB_BYTE)))
+ {
+ return (jdouble) PRIMLIB_GetByteObjectValue (env, obj);
+ }
+ else
+ {
+ JCL_ThrowException (env, "java/lang/IllegalArgumentException",
+ "Argument not of correct type.");
+ return 0;
+ }
+}
+
+JNIEXPORT jint JNICALL
+PRIMLIB_GetReflectiveWrapperType (JNIEnv * env, jobject obj)
+{
+ jclass typeClass;
+ if (obj == NULL)
+ {
+ return PRIMLIB_NULL;
+ }
+
+ typeClass = PRIMLIB_GetNativeWrapClass (env, PRIMLIB_DOUBLE);
+ if ((*env)->IsInstanceOf (env, obj, typeClass))
+ {
+ return PRIMLIB_DOUBLE;
+ }
+ typeClass = PRIMLIB_GetNativeWrapClass (env, PRIMLIB_FLOAT);
+ if ((*env)->IsInstanceOf (env, obj, typeClass))
+ {
+ return PRIMLIB_FLOAT;
+ }
+ typeClass = PRIMLIB_GetNativeWrapClass (env, PRIMLIB_LONG);
+ if ((*env)->IsInstanceOf (env, obj, typeClass))
+ {
+ return PRIMLIB_LONG;
+ }
+ typeClass = PRIMLIB_GetNativeWrapClass (env, PRIMLIB_INT);
+ if ((*env)->IsInstanceOf (env, obj, typeClass))
+ {
+ return PRIMLIB_INT;
+ }
+ typeClass = PRIMLIB_GetNativeWrapClass (env, PRIMLIB_CHAR);
+ if ((*env)->IsInstanceOf (env, obj, typeClass))
+ {
+ return PRIMLIB_CHAR;
+ }
+ typeClass = PRIMLIB_GetNativeWrapClass (env, PRIMLIB_SHORT);
+ if ((*env)->IsInstanceOf (env, obj, typeClass))
+ {
+ return PRIMLIB_SHORT;
+ }
+ typeClass = PRIMLIB_GetNativeWrapClass (env, PRIMLIB_BYTE);
+ if ((*env)->IsInstanceOf (env, obj, typeClass))
+ {
+ return PRIMLIB_BYTE;
+ }
+ typeClass = PRIMLIB_GetNativeWrapClass (env, PRIMLIB_BOOLEAN);
+ if ((*env)->IsInstanceOf (env, obj, typeClass))
+ {
+ return PRIMLIB_BOOLEAN;
+ }
+ typeClass = PRIMLIB_GetNativeWrapClass (env, PRIMLIB_VOID);
+ if ((*env)->IsInstanceOf (env, obj, typeClass))
+ {
+ return PRIMLIB_VOID;
+ }
+ return PRIMLIB_OBJECT;
+}
+
+JNIEXPORT jint JNICALL
+PRIMLIB_GetReflectiveType (JNIEnv * env, jclass returnType)
+{
+ jclass typeClass = PRIMLIB_GetNativeTypeClass (env, PRIMLIB_DOUBLE);
+ if ((*env)->IsAssignableFrom (env, returnType, typeClass))
+ {
+ return PRIMLIB_DOUBLE;
+ }
+ typeClass = PRIMLIB_GetNativeTypeClass (env, PRIMLIB_FLOAT);
+ if ((*env)->IsAssignableFrom (env, returnType, typeClass))
+ {
+ return PRIMLIB_FLOAT;
+ }
+ typeClass = PRIMLIB_GetNativeTypeClass (env, PRIMLIB_LONG);
+ if ((*env)->IsAssignableFrom (env, returnType, typeClass))
+ {
+ return PRIMLIB_LONG;
+ }
+ typeClass = PRIMLIB_GetNativeTypeClass (env, PRIMLIB_INT);
+ if ((*env)->IsAssignableFrom (env, returnType, typeClass))
+ {
+ return PRIMLIB_INT;
+ }
+ typeClass = PRIMLIB_GetNativeTypeClass (env, PRIMLIB_CHAR);
+ if ((*env)->IsAssignableFrom (env, returnType, typeClass))
+ {
+ return PRIMLIB_CHAR;
+ }
+ typeClass = PRIMLIB_GetNativeTypeClass (env, PRIMLIB_SHORT);
+ if ((*env)->IsAssignableFrom (env, returnType, typeClass))
+ {
+ return PRIMLIB_SHORT;
+ }
+ typeClass = PRIMLIB_GetNativeTypeClass (env, PRIMLIB_BYTE);
+ if ((*env)->IsAssignableFrom (env, returnType, typeClass))
+ {
+ return PRIMLIB_BYTE;
+ }
+ typeClass = PRIMLIB_GetNativeTypeClass (env, PRIMLIB_BOOLEAN);
+ if ((*env)->IsAssignableFrom (env, returnType, typeClass))
+ {
+ return PRIMLIB_BOOLEAN;
+ }
+ typeClass = PRIMLIB_GetNativeTypeClass (env, PRIMLIB_VOID);
+ if ((*env)->IsAssignableFrom (env, returnType, typeClass))
+ {
+ return PRIMLIB_VOID;
+ }
+ return PRIMLIB_OBJECT;
+}
+
+
+JNIEXPORT jboolean JNICALL
+PRIMLIB_GetBooleanObjectValue (JNIEnv * env, jobject obj)
+{
+ jmethodID acc = PRIMLIB_GetNativeWrapClassAccessor (env, PRIMLIB_BOOLEAN);
+ return (*env)->CallBooleanMethod (env, obj, acc);
+}
+
+JNIEXPORT jbyte JNICALL
+PRIMLIB_GetByteObjectValue (JNIEnv * env, jobject obj)
+{
+ jmethodID acc = PRIMLIB_GetNativeWrapClassAccessor (env, PRIMLIB_BYTE);
+ return (*env)->CallByteMethod (env, obj, acc);
+}
+
+JNIEXPORT jshort JNICALL
+PRIMLIB_GetShortObjectValue (JNIEnv * env, jobject obj)
+{
+ jmethodID acc = PRIMLIB_GetNativeWrapClassAccessor (env, PRIMLIB_SHORT);
+ return (*env)->CallShortMethod (env, obj, acc);
+}
+
+JNIEXPORT jchar JNICALL
+PRIMLIB_GetCharObjectValue (JNIEnv * env, jobject obj)
+{
+ jmethodID acc = PRIMLIB_GetNativeWrapClassAccessor (env, PRIMLIB_CHAR);
+ return (*env)->CallCharMethod (env, obj, acc);
+}
+
+JNIEXPORT jint JNICALL
+PRIMLIB_GetIntObjectValue (JNIEnv * env, jobject obj)
+{
+ jmethodID acc = PRIMLIB_GetNativeWrapClassAccessor (env, PRIMLIB_INT);
+ return (*env)->CallIntMethod (env, obj, acc);
+}
+
+JNIEXPORT jlong JNICALL
+PRIMLIB_GetLongObjectValue (JNIEnv * env, jobject obj)
+{
+ jmethodID acc = PRIMLIB_GetNativeWrapClassAccessor (env, PRIMLIB_LONG);
+ return (*env)->CallLongMethod (env, obj, acc);
+}
+
+JNIEXPORT jfloat JNICALL
+PRIMLIB_GetFloatObjectValue (JNIEnv * env, jobject obj)
+{
+ jmethodID acc = PRIMLIB_GetNativeWrapClassAccessor (env, PRIMLIB_FLOAT);
+ return (*env)->CallFloatMethod (env, obj, acc);
+}
+
+JNIEXPORT jdouble JNICALL
+PRIMLIB_GetDoubleObjectValue (JNIEnv * env, jobject obj)
+{
+ jmethodID acc = PRIMLIB_GetNativeWrapClassAccessor (env, PRIMLIB_DOUBLE);
+ return (*env)->CallDoubleMethod (env, obj, acc);
+}
+
+
+
+JNIEXPORT jvalue JNICALL
+PRIMLIB_UnwrapJValue (JNIEnv * env, jobject obj, jclass classType)
+{
+ jvalue retval;
+ jint objType = PRIMLIB_GetReflectiveType (env, classType);
+ if (objType == PRIMLIB_BOOLEAN)
+ {
+ retval.z = PRIMLIB_UnwrapBoolean (env, obj);
+ }
+ else if (objType == PRIMLIB_BYTE)
+ {
+ retval.b = PRIMLIB_UnwrapByte (env, obj);
+ }
+ else if (objType == PRIMLIB_CHAR)
+ {
+ retval.c = PRIMLIB_UnwrapChar (env, obj);
+ }
+ else if (objType == PRIMLIB_SHORT)
+ {
+ retval.s = PRIMLIB_UnwrapShort (env, obj);
+ }
+ else if (objType == PRIMLIB_INT)
+ {
+ retval.i = PRIMLIB_UnwrapInt (env, obj);
+ }
+ else if (objType == PRIMLIB_LONG)
+ {
+ retval.j = PRIMLIB_UnwrapLong (env, obj);
+ }
+ else if (objType == PRIMLIB_FLOAT)
+ {
+ retval.f = PRIMLIB_UnwrapFloat (env, obj);
+ }
+ else if (objType == PRIMLIB_DOUBLE)
+ {
+ retval.d = PRIMLIB_UnwrapDouble (env, obj);
+ }
+ else
+ {
+ if (obj != NULL && !(*env)->IsInstanceOf (env, obj, classType))
+ {
+ JCL_ThrowException (env, "java/lang/IllegalArgumentException",
+ "Argument not of correct object type.");
+ return retval;
+ }
+ retval.l = obj;
+ }
+ return retval;
}
-
Index: native/jni/classpath/primlib.h
===================================================================
RCS file: /cvsroot/classpath/classpath/native/jni/classpath/primlib.h,v
retrieving revision 1.4
diff -I*.class -u -r1.4 primlib.h
--- native/jni/classpath/primlib.h 29 Mar 2004 07:07:26 -0000 1.4
+++ native/jni/classpath/primlib.h 21 Jun 2004 18:58:31 -0000
@@ -55,48 +55,65 @@
#define PRIMLIB_NUMTYPES 12
/* Low-level primitive class accessor functions. */
-JNIEXPORT jclass JNICALL PRIMLIB_GetNativeWrapClass(JNIEnv * env, int
reflectType);
-JNIEXPORT jclass JNICALL PRIMLIB_GetNativeTypeClass(JNIEnv * env, int
reflectType);
-JNIEXPORT jmethodID JNICALL PRIMLIB_GetNativeWrapClassConstructor(JNIEnv *
env, int reflectType);
-JNIEXPORT jmethodID JNICALL PRIMLIB_GetNativeWrapClassAccessor(JNIEnv * env,
int reflectType);
+JNIEXPORT jclass JNICALL PRIMLIB_GetNativeWrapClass (JNIEnv * env,
+ int reflectType);
+JNIEXPORT jclass JNICALL PRIMLIB_GetNativeTypeClass (JNIEnv * env,
+ int reflectType);
+JNIEXPORT jmethodID JNICALL PRIMLIB_GetNativeWrapClassConstructor (JNIEnv *
+ env,
+ int
+ reflectType);
+JNIEXPORT jmethodID JNICALL PRIMLIB_GetNativeWrapClassAccessor (JNIEnv * env,
+ int
+ reflectType);
/* Type discovery functions: WrapperType finds out j.l.Boolean/Byte/etc., and
Type finds out j.l.Boolean.TYPE, etc.
*/
-JNIEXPORT jint JNICALL PRIMLIB_GetReflectiveWrapperType(JNIEnv * env, jobject
obj);
-JNIEXPORT jint JNICALL PRIMLIB_GetReflectiveType(JNIEnv * env, jclass
returnType);
+JNIEXPORT jint JNICALL PRIMLIB_GetReflectiveWrapperType (JNIEnv * env,
+ jobject obj);
+JNIEXPORT jint JNICALL PRIMLIB_GetReflectiveType (JNIEnv * env,
+ jclass returnType);
/* Constructor functions. */
-JNIEXPORT jobject JNICALL PRIMLIB_WrapBoolean(JNIEnv * env, jboolean b);
-JNIEXPORT jobject JNICALL PRIMLIB_WrapByte (JNIEnv * env, jbyte b);
-JNIEXPORT jobject JNICALL PRIMLIB_WrapChar (JNIEnv * env, jchar c);
-JNIEXPORT jobject JNICALL PRIMLIB_WrapShort (JNIEnv * env, jshort s);
-JNIEXPORT jobject JNICALL PRIMLIB_WrapInt (JNIEnv * env, jint i);
-JNIEXPORT jobject JNICALL PRIMLIB_WrapLong (JNIEnv * env, jlong l);
-JNIEXPORT jobject JNICALL PRIMLIB_WrapFloat (JNIEnv * env, jfloat f);
+JNIEXPORT jobject JNICALL PRIMLIB_WrapBoolean (JNIEnv * env, jboolean b);
+JNIEXPORT jobject JNICALL PRIMLIB_WrapByte (JNIEnv * env, jbyte b);
+JNIEXPORT jobject JNICALL PRIMLIB_WrapChar (JNIEnv * env, jchar c);
+JNIEXPORT jobject JNICALL PRIMLIB_WrapShort (JNIEnv * env, jshort s);
+JNIEXPORT jobject JNICALL PRIMLIB_WrapInt (JNIEnv * env, jint i);
+JNIEXPORT jobject JNICALL PRIMLIB_WrapLong (JNIEnv * env, jlong l);
+JNIEXPORT jobject JNICALL PRIMLIB_WrapFloat (JNIEnv * env, jfloat f);
JNIEXPORT jobject JNICALL PRIMLIB_WrapDouble (JNIEnv * env, jdouble d);
/* Widening conversion unwrapping functions. */
-JNIEXPORT jboolean JNICALL PRIMLIB_UnwrapBoolean(JNIEnv * env, jobject obj);
-JNIEXPORT jbyte JNICALL PRIMLIB_UnwrapByte (JNIEnv * env, jobject obj);
-JNIEXPORT jshort JNICALL PRIMLIB_UnwrapShort (JNIEnv * env, jobject obj);
-JNIEXPORT jchar JNICALL PRIMLIB_UnwrapChar (JNIEnv * env, jobject obj);
-JNIEXPORT jint JNICALL PRIMLIB_UnwrapInt (JNIEnv * env, jobject obj);
-JNIEXPORT jlong JNICALL PRIMLIB_UnwrapLong (JNIEnv * env, jobject obj);
-JNIEXPORT jfloat JNICALL PRIMLIB_UnwrapFloat (JNIEnv * env, jobject obj);
-JNIEXPORT jdouble JNICALL PRIMLIB_UnwrapDouble (JNIEnv * env, jobject obj);
+JNIEXPORT jboolean JNICALL PRIMLIB_UnwrapBoolean (JNIEnv * env, jobject obj);
+JNIEXPORT jbyte JNICALL PRIMLIB_UnwrapByte (JNIEnv * env, jobject obj);
+JNIEXPORT jshort JNICALL PRIMLIB_UnwrapShort (JNIEnv * env, jobject obj);
+JNIEXPORT jchar JNICALL PRIMLIB_UnwrapChar (JNIEnv * env, jobject obj);
+JNIEXPORT jint JNICALL PRIMLIB_UnwrapInt (JNIEnv * env, jobject obj);
+JNIEXPORT jlong JNICALL PRIMLIB_UnwrapLong (JNIEnv * env, jobject obj);
+JNIEXPORT jfloat JNICALL PRIMLIB_UnwrapFloat (JNIEnv * env, jobject obj);
+JNIEXPORT jdouble JNICALL PRIMLIB_UnwrapDouble (JNIEnv * env, jobject obj);
/* Simple unwrapping functions. Objects *must* be of correct type. */
-JNIEXPORT jboolean JNICALL PRIMLIB_GetBooleanObjectValue(JNIEnv * env, jobject
obj);
-JNIEXPORT jbyte JNICALL PRIMLIB_GetByteObjectValue (JNIEnv * env, jobject
obj);
-JNIEXPORT jshort JNICALL PRIMLIB_GetShortObjectValue (JNIEnv * env, jobject
obj);
-JNIEXPORT jchar JNICALL PRIMLIB_GetCharObjectValue (JNIEnv * env, jobject
obj);
-JNIEXPORT jint JNICALL PRIMLIB_GetIntObjectValue (JNIEnv * env, jobject
obj);
-JNIEXPORT jlong JNICALL PRIMLIB_GetLongObjectValue (JNIEnv * env, jobject
obj);
-JNIEXPORT jfloat JNICALL PRIMLIB_GetFloatObjectValue (JNIEnv * env, jobject
obj);
-JNIEXPORT jdouble JNICALL PRIMLIB_GetDoubleObjectValue (JNIEnv * env, jobject
obj);
+JNIEXPORT jboolean JNICALL PRIMLIB_GetBooleanObjectValue (JNIEnv * env,
+ jobject obj);
+JNIEXPORT jbyte JNICALL PRIMLIB_GetByteObjectValue (JNIEnv * env,
+ jobject obj);
+JNIEXPORT jshort JNICALL PRIMLIB_GetShortObjectValue (JNIEnv * env,
+ jobject obj);
+JNIEXPORT jchar JNICALL PRIMLIB_GetCharObjectValue (JNIEnv * env,
+ jobject obj);
+JNIEXPORT jint JNICALL PRIMLIB_GetIntObjectValue (JNIEnv * env, jobject obj);
+JNIEXPORT jlong JNICALL PRIMLIB_GetLongObjectValue (JNIEnv * env,
+ jobject obj);
+JNIEXPORT jfloat JNICALL PRIMLIB_GetFloatObjectValue (JNIEnv * env,
+ jobject obj);
+JNIEXPORT jdouble JNICALL PRIMLIB_GetDoubleObjectValue (JNIEnv * env,
+ jobject obj);
/* jvalue conversion: Unwrap obj to the type of classType, with widening
conversion. */
-JNIEXPORT jvalue JNICALL PRIMLIB_UnwrapJValue(JNIEnv* env, jobject obj, jclass
classType);
+JNIEXPORT jvalue JNICALL PRIMLIB_UnwrapJValue (JNIEnv * env, jobject obj,
+ jclass classType);
#endif