Author: mturk Date: Fri Apr 17 11:53:24 2009 New Revision: 765957 URL: http://svn.apache.org/viewvc?rev=765957&view=rev Log: Add setter API for Pointer and Descriptor classes
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=765957&r1=765956&r2=765957&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 11:53:24 2009 @@ -63,7 +63,7 @@ ACR_DECLARE(int) ACR_DescriptorCleanup(JNIEnv *env, jobject obj); /** - * Get the native pointer from the Pointer object. + * Get the native int descriptor from the Descriptor object. * @param env Current JNI environment * @param obj Java Descriptor object use. * @return Underlying wrapped integer descriptor. @@ -71,13 +71,31 @@ ACR_DECLARE(int) ACR_DescriptorGetInt(JNIEnv *env, jobject obj); /** - * Get the native pointer from the Pointer object. + * Get the native pointer descriptor from the Descriptor object. * @param env Current JNI environment * @param obj Java Descriptor object use. * @return Underlying wrapped pointer descriptor. */ ACR_DECLARE(void *) ACR_DescriptorGetPtr(JNIEnv *env, jobject obj); +/** + * Set the native pointer descriptor to the Descriptor object. + * @param env Current JNI environment + * @param obj Java Descriptor object use. + * @param val Value to set. + * @return ACR error code on failure. + */ +ACR_DECLARE(int) ACR_DescriptorSetPtr(JNIEnv *env, jobject obj, void *val); + +/** + * Set the native int descriptor to the Descriptor object. + * @param env Current JNI environment + * @param obj Java Descriptor object use. + * @param val Value to set. + * @return ACR error code on failure. + */ +ACR_DECLARE(int) ACR_DescriptorSetInt(JNIEnv *env, jobject obj, int val); + #ifdef __cplusplus } #endif 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=765957&r1=765956&r2=765957&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 11:53:24 2009 @@ -64,6 +64,15 @@ */ ACR_DECLARE(void *) ACR_PointerGet(JNIEnv *env, jobject ptr); +/** + * Set the native pointer to the Pointer object. + * @param env Current JNI environment + * @param ptr Java Pointer object use. + * @param val Value to set. + * @return ACR error code on failure. + */ +ACR_DECLARE(int) ACR_PointerSet(JNIEnv *env, jobject ptr, void *val); + #ifdef __cplusplus } #endif 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=765957&r1=765956&r2=765957&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 11:53:24 2009 @@ -258,3 +258,37 @@ return -1; } } + +ACR_DECLARE(int) ACR_DescriptorSetPtr(ACR_JNISTDARGS, void *p) +{ + if (_clazzn.i && _m0000n.i) { +#if CC_SIZEOF_VOIDP == 8 + SET_IFIELD_J(0001, _O, (jlong)((acr_ptr_t)p)); +#else + SET_IFIELD_I(0001, _O, (jint)((acr_ptr_t)p)); +#endif + if ((*_E)->ExceptionCheck(_E)) { + return ACR_EGENERAL; + } + else + return ACR_SUCCESS; + } + else { + return ACR_ECLASSNOTFOUND; + } +} + +ACR_DECLARE(int) ACR_DescriptorSetInt(ACR_JNISTDARGS, int i) +{ + if (_clazzn.i && _m0000n.i) { + SET_IFIELD_I(0000, _O, i); + if ((*_E)->ExceptionCheck(_E)) { + return ACR_EGENERAL; + } + else + return ACR_SUCCESS; + } + else { + return ACR_ECLASSNOTFOUND; + } +} 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=765957&r1=765956&r2=765957&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 11:53:24 2009 @@ -199,3 +199,22 @@ return NULL; } } + +ACR_DECLARE(int) ACR_PointerSet(ACR_JNISTDARGS, void *p) +{ + if (_clazzn.i && _m0000n.i) { +#if CC_SIZEOF_VOIDP == 8 + SET_IFIELD_J(0000, _O, (jlong)((acr_ptr_t)p)); +#else + SET_IFIELD_I(0000, _O, (jint)((acr_ptr_t)p)); +#endif + if ((*_E)->ExceptionCheck(_E)) { + return ACR_EGENERAL; + } + else + return ACR_SUCCESS; + } + else { + return ACR_ECLASSNOTFOUND; + } +} 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=765957&r1=765956&r2=765957&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 11:53:24 2009 @@ -273,3 +273,13 @@ { return ACR_DescriptorGetInt(_E, d); } + +ACR_JNI_EXPORT_DECLARE(jint, TestPrivate, test025)(ACR_JNISTDARGS, jobject d, int v) +{ + return ACR_DescriptorSetPtr(_E, d, (void *)v); +} + +ACR_JNI_EXPORT_DECLARE(jint, TestPrivate, test026)(ACR_JNISTDARGS, jobject d, int v) +{ + return ACR_DescriptorSetInt(_E, d, v); +} 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=765957&r1=765956&r2=765957&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 11:53:24 2009 @@ -68,6 +68,8 @@ private static native int test022(Descriptor p); private static native int test023(Descriptor p); 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); protected void setUp() @@ -429,4 +431,53 @@ Thread.sleep(200); } + public void testDescriptorNativePtrSet() + throws Throwable + { + Descriptor d = test021(-1, 0xcafebabe); + assertNotNull("Descriptor", d); + assertFalse("Closed", d.isClosed()); + int r = test023(d); + assertEquals("Result ", 1, r); + int s = test025(d, 0xdeadbeef); + assertEquals("Result ", 0, s); + int n = test023(d); + assertEquals("Result ", 1, n); + d.close(); + int c = test023(d); + // Second call must return NULL + assertEquals("Result ", 0, c); + + d = null; + System.gc(); + // This should be enough for a gc + // from Pointer.finalize() + Thread.sleep(200); + } + + public void testDescriptorNativeIntSet() + throws Throwable + { + Descriptor d = test021(2303, 0); + assertNotNull("Descriptor", d); + assertFalse("Closed", d.isClosed()); + int r = test024(d); + assertEquals("Result ", 2303, r); + int s = test026(d, 1964); + assertEquals("Result ", 0, s); + int n = test024(d); + assertEquals("Result ", 1964, n); + d.close(); + int c = test024(d); + // Second call must return -1 + assertEquals("Result ", -1, c); + + d = null; + System.gc(); + // This should be enough for a gc + // from Pointer.finalize() + Thread.sleep(200); + } + + }