Author: mturk
Date: Fri Apr 17 08:01:37 2009
New Revision: 765892

URL: http://svn.apache.org/viewvc?rev=765892&view=rev
Log:
Code update

Modified:
    commons/sandbox/runtime/trunk/src/main/native/include/acr_pointer.h
    commons/sandbox/runtime/trunk/src/main/native/shared/pointer.c
    commons/sandbox/runtime/trunk/src/main/native/test/testcase.c

Modified: commons/sandbox/runtime/trunk/src/main/native/include/acr_pointer.h
URL: 
http://svn.apache.org/viewvc/commons/sandbox/runtime/trunk/src/main/native/include/acr_pointer.h?rev=765892&r1=765891&r2=765892&view=diff
==============================================================================
--- commons/sandbox/runtime/trunk/src/main/native/include/acr_pointer.h 
(original)
+++ commons/sandbox/runtime/trunk/src/main/native/include/acr_pointer.h Fri Apr 
17 08:01:37 2009
@@ -40,13 +40,29 @@
 
 /**
  * Create new Pointer class instance
- * param env Current JNI environment
- * param p Native pointer to wrap into Pointer class
- * param cb callback function to use on Pointer.finalize()
+ * @param env Current JNI environment
+ * @param p Native pointer to wrap into Pointer class
+ * @param cb callback function to use on Pointer.finalize()
  */
-ACR_DECLARE(jobject) ACR_CreatePointer(JNIEnv *env, void *p,
+ACR_DECLARE(jobject) ACR_PointerCreate(JNIEnv *env, void *p,
                                        acr_pointer_callback_fn_t *cb);
 
+/**
+ * Call pointer cleanup.
+ * @param env Current JNI environment
+ * @param ptr Java Pointer object to clean. The function will
+ * clear the callback and pointer inside Java object.
+ * @return ACR_INCOMPLETE if already cleared.
+ */
+ACR_DECLARE(int) ACR_PointerCleanup(JNIEnv *env, jobject ptr);
+
+/**
+ * Get the native pointer from the Pointer object.
+ * @param env Current JNI environment
+ * @param ptr Java Pointer object use.
+ * @return Underlying wrapped pointer.
+ */
+ACR_DECLARE(void *) ACR_PointerGet(JNIEnv *env, jobject ptr);
 
 #ifdef __cplusplus
 }

Modified: commons/sandbox/runtime/trunk/src/main/native/shared/pointer.c
URL: 
http://svn.apache.org/viewvc/commons/sandbox/runtime/trunk/src/main/native/shared/pointer.c?rev=765892&r1=765891&r2=765892&view=diff
==============================================================================
--- commons/sandbox/runtime/trunk/src/main/native/shared/pointer.c (original)
+++ commons/sandbox/runtime/trunk/src/main/native/shared/pointer.c Fri Apr 17 
08:01:37 2009
@@ -118,7 +118,6 @@
     if (h) {
         SET_IFIELD_I(0000, _O, 0);
     }
-
 #endif
     cleanup = (acr_pointer_callback_fn_t *)((acr_ptr_t)c);
     if (cleanup) {
@@ -130,7 +129,7 @@
     }
 }
 
-ACR_DECLARE(jobject) ACR_CreatePointer(JNIEnv *_E, void *p,
+ACR_DECLARE(jobject) ACR_PointerCreate(JNIEnv *_E, void *p,
                                        acr_pointer_callback_fn_t *cb)
 {
     if (_clazzn.i && _m0000n.i)
@@ -139,3 +138,60 @@
     else
         return NULL;
 }
+
+ACR_DECLARE(int) ACR_PointerCleanup(ACR_JNISTDARGS)
+{
+    if (_clazzn.i && _m0000n.i) {
+        acr_pointer_callback_fn_t *cleanup;
+#if CC_SIZEOF_VOIDP == 8
+        jlong h = GET_IFIELD_J(0000, _O);
+        jlong c = GET_IFIELD_J(0001, _O);
+
+        if (h) {
+            SET_IFIELD_J(0000, _O, 0);
+        }
+        if (c) {
+            SET_IFIELD_J(0001, _O, 0);
+        }
+#else
+        jint h  = GET_IFIELD_I(0000, _O);
+        jint c  = GET_IFIELD_I(0001, _O);
+
+        if (h) {
+            SET_IFIELD_I(0000, _O, 0);
+        }
+        if (c) {
+            SET_IFIELD_I(0001, _O, 0);
+        }
+#endif
+        cleanup = (acr_pointer_callback_fn_t *)((acr_ptr_t)c);
+        if (cleanup) {
+            int rc = (*cleanup)((void *)((acr_ptr_t)h));
+            if (rc) {
+                /* Throw RuntimeException with errno message */
+                ACR_ThrowException(_E, THROW_FMARK, ACR_EX_ERUNTIME, rc);
+            }
+            return rc;
+        }
+        else {
+            /* Already cleared */
+            return ACR_INCOMPLETE;
+        }
+    }
+    else
+        return ACR_ESYMNOTFOUND;
+}
+
+ACR_DECLARE(void *) ACR_PointerGet(ACR_JNISTDARGS)
+{
+    if (_clazzn.i && _m0000n.i) {
+#if CC_SIZEOF_VOIDP == 8
+        jlong h = GET_IFIELD_J(0000, _O);
+#else
+        jint h  = GET_IFIELD_I(0000, _O);
+#endif
+        return (void *)((acr_ptr_t)h);
+    }
+    else
+        return NULL;
+}

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=765892&r1=765891&r2=765892&view=diff
==============================================================================
--- commons/sandbox/runtime/trunk/src/main/native/test/testcase.c (original)
+++ commons/sandbox/runtime/trunk/src/main/native/test/testcase.c Fri Apr 17 
08:01:37 2009
@@ -220,5 +220,5 @@
 ACR_JNI_EXPORT_DECLARE(jobject, TestPrivate, test017)(ACR_JNISTDARGS, jint d)
 {
     
-    return  ACR_CreatePointer(_E, (void *)d, callback);
+    return  ACR_PointerCreate(_E, (void *)d, callback);
 }


Reply via email to