Author: mturk Date: Fri Jun 19 08:32:39 2009 New Revision: 786411 URL: http://svn.apache.org/viewvc?rev=786411&view=rev Log: implement float and double peek/poke
Modified: commons/sandbox/runtime/trunk/src/main/java/org/apache/commons/runtime/Pointer.java commons/sandbox/runtime/trunk/src/main/java/org/apache/commons/runtime/Pointer32.java commons/sandbox/runtime/trunk/src/main/java/org/apache/commons/runtime/Pointer64.java commons/sandbox/runtime/trunk/src/main/native/shared/pointer.c commons/sandbox/runtime/trunk/src/test/org/apache/commons/runtime/TestMemory.java Modified: commons/sandbox/runtime/trunk/src/main/java/org/apache/commons/runtime/Pointer.java URL: http://svn.apache.org/viewvc/commons/sandbox/runtime/trunk/src/main/java/org/apache/commons/runtime/Pointer.java?rev=786411&r1=786410&r2=786411&view=diff ============================================================================== --- commons/sandbox/runtime/trunk/src/main/java/org/apache/commons/runtime/Pointer.java (original) +++ commons/sandbox/runtime/trunk/src/main/java/org/apache/commons/runtime/Pointer.java Fri Jun 19 08:32:39 2009 @@ -176,16 +176,22 @@ * outside the pointer address space. * @throws NullPointerException if pointer is {...@code null}. */ - public abstract int peek(int index) + public abstract int peek(int index) throws IndexOutOfBoundsException, NullPointerException; - public abstract int peek16(int index) + public abstract int peek16(int index) throws IndexOutOfBoundsException, NullPointerException; - public abstract int peek32(int index) + public abstract int peek32(int index) throws IndexOutOfBoundsException, NullPointerException; - public abstract long peek64(int index) + public abstract long peek64(int index) + throws IndexOutOfBoundsException, NullPointerException; + + public abstract float peek32f(int index) + throws IndexOutOfBoundsException, NullPointerException; + + public abstract double peek64f(int index) throws IndexOutOfBoundsException, NullPointerException; /** @@ -206,9 +212,15 @@ public abstract void poke32(int index, int value) throws IndexOutOfBoundsException, NullPointerException; + public abstract void poke32(int index, float value) + throws IndexOutOfBoundsException, NullPointerException; + public abstract void poke64(int index, long value) throws IndexOutOfBoundsException, NullPointerException; + public abstract void poke64(int index, double value) + throws IndexOutOfBoundsException, NullPointerException; + /** * Copy the memory area from {...@code this} pointer to {...@code dst}. * <p> Modified: commons/sandbox/runtime/trunk/src/main/java/org/apache/commons/runtime/Pointer32.java URL: http://svn.apache.org/viewvc/commons/sandbox/runtime/trunk/src/main/java/org/apache/commons/runtime/Pointer32.java?rev=786411&r1=786410&r2=786411&view=diff ============================================================================== --- commons/sandbox/runtime/trunk/src/main/java/org/apache/commons/runtime/Pointer32.java (original) +++ commons/sandbox/runtime/trunk/src/main/java/org/apache/commons/runtime/Pointer32.java Fri Jun 19 08:32:39 2009 @@ -64,10 +64,12 @@ return new Integer(PLENGTH); } - private static native int peek0(int addr); - private static native int peek1(int addr); - private static native int peek2(int addr); - private static native long peek3(int addr); + private static native int peek0(int addr); + private static native int peek1(int addr); + private static native int peek2(int addr); + private static native long peek3(int addr); + private static native float peek4(int addr); + private static native double peek5(int addr); public int peek(int index) throws IndexOutOfBoundsException, NullPointerException @@ -109,10 +111,32 @@ return peek3(POINTER + index / 8); } - private static native void poke0(int addr, int v); - private static native void poke1(int addr, int v); - private static native void poke2(int addr, int v); - private static native void poke3(int addr, long v); + public float peek32f(int index) + throws IndexOutOfBoundsException, NullPointerException + { + if (POINTER == 0) + throw new NullPointerException(); + else if (index < 0 || index >= PLENGTH / 4) + throw new IndexOutOfBoundsException(); + return peek4(POINTER + index / 4); + } + + public double peek64f(int index) + throws IndexOutOfBoundsException, NullPointerException + { + if (POINTER == 0) + throw new NullPointerException(); + else if (index < 0 || index >= PLENGTH / 8) + throw new IndexOutOfBoundsException(); + return peek5(POINTER + index / 8); + } + + private static native void poke0(int addr, int v); + private static native void poke1(int addr, int v); + private static native void poke2(int addr, int v); + private static native void poke3(int addr, long v); + private static native void poke4(int addr, float v); + private static native void poke5(int addr, double v); public void poke(int index, int value) throws IndexOutOfBoundsException, NullPointerException @@ -144,6 +168,16 @@ poke2(POINTER + index / 4, value); } + public void poke32(int index, float value) + throws IndexOutOfBoundsException, NullPointerException + { + if (POINTER == 0) + throw new NullPointerException(); + else if (index < 0 || index >= PLENGTH / 4) + throw new IndexOutOfBoundsException(); + poke4(POINTER + index / 4, value); + } + public void poke64(int index, long value) throws IndexOutOfBoundsException, NullPointerException { @@ -154,6 +188,16 @@ poke3(POINTER + index / 8, value); } + public void poke64(int index, double value) + throws IndexOutOfBoundsException, NullPointerException + { + if (POINTER == 0) + throw new NullPointerException(); + else if (index < 0 || index >= PLENGTH / 8) + throw new IndexOutOfBoundsException(); + poke5(POINTER + index / 8, value); + } + private static native void copy0(int src, int dst, int length); private static native void move0(int src, int dst, int length); Modified: commons/sandbox/runtime/trunk/src/main/java/org/apache/commons/runtime/Pointer64.java URL: http://svn.apache.org/viewvc/commons/sandbox/runtime/trunk/src/main/java/org/apache/commons/runtime/Pointer64.java?rev=786411&r1=786410&r2=786411&view=diff ============================================================================== --- commons/sandbox/runtime/trunk/src/main/java/org/apache/commons/runtime/Pointer64.java (original) +++ commons/sandbox/runtime/trunk/src/main/java/org/apache/commons/runtime/Pointer64.java Fri Jun 19 08:32:39 2009 @@ -64,10 +64,12 @@ return new Long(PLENGTH); } - private static native int peek0(long addr); - private static native int peek1(long addr); - private static native int peek2(long addr); - private static native long peek3(long addr); + private static native int peek0(long addr); + private static native int peek1(long addr); + private static native int peek2(long addr); + private static native long peek3(long addr); + private static native float peek4(long addr); + private static native double peek5(long addr); public int peek(int index) throws IndexOutOfBoundsException, NullPointerException @@ -109,10 +111,32 @@ return peek3(POINTER + index / 8); } - private static native void poke0(long addr, int v); - private static native void poke1(long addr, int v); - private static native void poke2(long addr, int v); - private static native void poke3(long addr, long v); + public float peek32f(int index) + throws IndexOutOfBoundsException, NullPointerException + { + if (POINTER == 0L) + throw new NullPointerException(); + else if (index < 0L || index >= PLENGTH / 4) + throw new IndexOutOfBoundsException(); + return peek4(POINTER + index / 4); + } + + public double peek64f(int index) + throws IndexOutOfBoundsException, NullPointerException + { + if (POINTER == 0L) + throw new NullPointerException(); + else if (index < 0L || index >= PLENGTH / 8) + throw new IndexOutOfBoundsException(); + return peek5(POINTER + index / 8); + } + + private static native void poke0(long addr, int v); + private static native void poke1(long addr, int v); + private static native void poke2(long addr, int v); + private static native void poke3(long addr, long v); + private static native void poke4(long addr, float v); + private static native void poke5(long addr, double v); public void poke(int index, int value) throws IndexOutOfBoundsException, NullPointerException @@ -144,6 +168,16 @@ poke2(POINTER + index / 4, value); } + public void poke32(int index, float value) + throws IndexOutOfBoundsException, NullPointerException + { + if (POINTER == 0L) + throw new NullPointerException(); + else if (index < 0L || index >= PLENGTH / 4) + throw new IndexOutOfBoundsException(); + poke4(POINTER + index / 4, value); + } + public void poke64(int index, long value) throws IndexOutOfBoundsException, NullPointerException { @@ -154,6 +188,16 @@ poke3(POINTER + index / 8, value); } + public void poke64(int index, double value) + throws IndexOutOfBoundsException, NullPointerException + { + if (POINTER == 0L) + throw new NullPointerException(); + else if (index < 0L || index >= PLENGTH / 8) + throw new IndexOutOfBoundsException(); + poke5(POINTER + index / 8, value); + } + private static native void copy0(long src, long dst, long length); private static native void move0(long src, long dst, long length); 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=786411&r1=786410&r2=786411&view=diff ============================================================================== --- commons/sandbox/runtime/trunk/src/main/native/shared/pointer.c (original) +++ commons/sandbox/runtime/trunk/src/main/native/shared/pointer.c Fri Jun 19 08:32:39 2009 @@ -203,6 +203,20 @@ return *(N2P(a, jlong *)); } +ACR_PTR_EXPORT_DECLARE(jfloat, peek4)(ACR_JNISTDARGS, jniptr a) +{ + UNREFERENCED_STDARGS; + + return *(N2P(a, jfloat *)); +} + +ACR_PTR_EXPORT_DECLARE(jdouble, peek5)(ACR_JNISTDARGS, jniptr a) +{ + UNREFERENCED_STDARGS; + + return *(N2P(a, jdouble *)); +} + ACR_PTR_EXPORT_DECLARE(void, poke0)(ACR_JNISTDARGS, jniptr a, jint v) { UNREFERENCED_STDARGS; @@ -231,6 +245,20 @@ *(N2P(a, jlong *)) = v; } +ACR_PTR_EXPORT_DECLARE(void, poke4)(ACR_JNISTDARGS, jniptr a, jfloat v) +{ + UNREFERENCED_STDARGS; + + *(N2P(a, jfloat *)) = v; +} + +ACR_PTR_EXPORT_DECLARE(void, poke5)(ACR_JNISTDARGS, jniptr a, jdouble v) +{ + UNREFERENCED_STDARGS; + + *(N2P(a, jdouble *)) = v; +} + ACR_PTR_EXPORT_DECLARE(void, copy0)(ACR_JNISTDARGS, jniptr s, jniptr d, jniptr l) { Modified: commons/sandbox/runtime/trunk/src/test/org/apache/commons/runtime/TestMemory.java URL: http://svn.apache.org/viewvc/commons/sandbox/runtime/trunk/src/test/org/apache/commons/runtime/TestMemory.java?rev=786411&r1=786410&r2=786411&view=diff ============================================================================== --- commons/sandbox/runtime/trunk/src/test/org/apache/commons/runtime/TestMemory.java (original) +++ commons/sandbox/runtime/trunk/src/test/org/apache/commons/runtime/TestMemory.java Fri Jun 19 08:32:39 2009 @@ -338,6 +338,28 @@ p.free(); } + public void testPeek32f() + throws Throwable + { + Pointer p = Memory.calloc(1000); + assertNotNull("Pointer", p); + p.poke32(246, 2303.64F); + assertEquals("Value", 2303.64F, p.peek32f(246)); + + p.free(); + } + + public void testPeek64f() + throws Throwable + { + Pointer p = Memory.calloc(1000); + assertNotNull("Pointer", p); + p.poke64(117, 2303.1964); + assertEquals("Value", 2303.1964, p.peek64f(117)); + + p.free(); + } + public void testPointerNull() throws Throwable {