Author: mturk
Date: Fri Apr 17 12:09:42 2009
New Revision: 765964
URL: http://svn.apache.org/viewvc?rev=765964&view=rev
Log:
Add Pointer and Descriptor array API
Modified:
commons/sandbox/runtime/trunk/src/main/native/include/acr_descriptor.h
commons/sandbox/runtime/trunk/src/main/native/include/acr_pointer.h
commons/sandbox/runtime/trunk/src/main/native/shared/descriptor.c
commons/sandbox/runtime/trunk/src/main/native/shared/pointer.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_descriptor.h
URL:
http://svn.apache.org/viewvc/commons/sandbox/runtime/trunk/src/main/native/include/acr_descriptor.h?rev=765964&r1=765963&r2=765964&view=diff
==============================================================================
--- commons/sandbox/runtime/trunk/src/main/native/include/acr_descriptor.h
(original)
+++ commons/sandbox/runtime/trunk/src/main/native/include/acr_descriptor.h Fri
Apr 17 12:09:42 2009
@@ -54,6 +54,13 @@
acr_descriptor_callback_fn_t *cb);
/**
+ * Create new Descriptor array
+ * @param env Current JNI environment
+ * @param len Size of the new Descriptor array
+ */
+ACR_DECLARE(jobjectArray) ACR_NewDescriptorArray(JNIEnv *env, jsize len);
+
+/**
* Call descriptor cleanup and clear Java object.
* @param env Current JNI environment
* @param obj Java Descriptor object to clean. The function will
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=765964&r1=765963&r2=765964&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 12:09:42 2009
@@ -48,6 +48,13 @@
acr_pointer_cleanup_fn_t *cb);
/**
+ * Create new Pointer array
+ * @param env Current JNI environment
+ * @param len Size of the new Pointer array
+ */
+ACR_DECLARE(jobjectArray) ACR_NewPointerArray(JNIEnv *env, jsize len);
+
+/**
* Call pointer cleanup and clear Java object.
* @param env Current JNI environment
* @param ptr Java Pointer object to clean. The function will
Modified: commons/sandbox/runtime/trunk/src/main/native/shared/descriptor.c
URL:
http://svn.apache.org/viewvc/commons/sandbox/runtime/trunk/src/main/native/shared/descriptor.c?rev=765964&r1=765963&r2=765964&view=diff
==============================================================================
--- commons/sandbox/runtime/trunk/src/main/native/shared/descriptor.c (original)
+++ commons/sandbox/runtime/trunk/src/main/native/shared/descriptor.c Fri Apr
17 12:09:42 2009
@@ -113,6 +113,13 @@
ACR_UnloadClass(_E, &_clazzn);
}
+ACR_DECLARE(jobjectArray) ACR_NewDescriptorArray(JNIEnv *_E, jsize len)
+{
+ if (_clazzn.a)
+ return (*_E)->NewObjectArray(_E, len, _clazzn.a, NULL);
+ else
+ return NULL;
+}
ACR_JNI_EXPORT_DECLARE(void, Descriptor, close0)(ACR_JNISTDARGS)
{
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=765964&r1=765963&r2=765964&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
12:09:42 2009
@@ -100,6 +100,13 @@
ACR_UnloadClass(_E, &_clazzn);
}
+ACR_DECLARE(jobjectArray) ACR_NewPointerArray(JNIEnv *_E, jsize len)
+{
+ if (_clazzn.a)
+ return (*_E)->NewObjectArray(_E, len, _clazzn.a, NULL);
+ else
+ return NULL;
+}
ACR_JNI_EXPORT_DECLARE(void, Pointer, cleanup0)(ACR_JNISTDARGS)
{
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=765964&r1=765963&r2=765964&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
12:09:42 2009
@@ -283,3 +283,14 @@
{
return ACR_DescriptorSetInt(_E, d, v);
}
+
+ACR_JNI_EXPORT_DECLARE(jobjectArray, TestPrivate, test027)(ACR_JNISTDARGS, int
l)
+{
+ int i;
+ jobjectArray a = ACR_NewDescriptorArray(_E, (jsize)l);
+ for (i = 0; i < l; i++) {
+ jobject d = ACR_DescriptorCreate(_E, i, NULL, dcallback);
+ (*_E)->SetObjectArrayElement(_E, a, (jsize)i, d);
+ }
+ return a;
+}
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=765964&r1=765963&r2=765964&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
Fri Apr 17 12:09:42 2009
@@ -70,6 +70,7 @@
private static native int test024(Descriptor p);
private static native int test025(Descriptor p, int i);
private static native int test026(Descriptor p, int i);
+ private static native Descriptor[] test027(int size);
protected void setUp()
@@ -479,5 +480,23 @@
Thread.sleep(200);
}
+ public void testDescriptorArray()
+ throws Throwable
+ {
+ Descriptor [] d = test027(8);
+ assertNotNull("Descriptor", d);
+ assertEquals("Size ", 8, d.length);
+ for (int i = 0; i < 8; i++) {
+ assertFalse("Closed", d[i].isClosed());
+ int r = test024(d[i]);
+ assertEquals("Result ", i, r);
+ }
+ d = null;
+ System.gc();
+ // This should be enough for a gc
+ // from Pointer.finalize()
+ Thread.sleep(200);
+ }
+
}