summaryrefslogtreecommitdiffstats
path: root/src/java/com/jogamp/gluegen
diff options
context:
space:
mode:
authorMichael Bien <[email protected]>2010-03-28 18:37:59 +0200
committerMichael Bien <[email protected]>2010-03-28 18:37:59 +0200
commitbe3ddc922fda13c0ba344909b3639a2c78c4b809 (patch)
tree714b2b579927751a6266dcca72c3393e86ef53df /src/java/com/jogamp/gluegen
parentcfe3dcb64d8ddfc941151a2907976adeaec36320 (diff)
(part2) merged all cdc_fp special cases into one common superclass for each special case.
introduced Platform as utility for querying platform information. special cdc build with cdc_fp bootclasspath temporary dissabled.
Diffstat (limited to 'src/java/com/jogamp/gluegen')
-rwxr-xr-xsrc/java/com/jogamp/gluegen/runtime/BufferFactory.java473
-rwxr-xr-xsrc/java/com/jogamp/gluegen/runtime/BufferFactory.java.javame_cdc_fp267
-rwxr-xr-xsrc/java/com/jogamp/gluegen/runtime/CPU.java4
-rw-r--r--src/java/com/jogamp/gluegen/runtime/Platform.java107
-rw-r--r--[-rwxr-xr-x]src/java/com/jogamp/gluegen/runtime/PointerBuffer.java252
-rwxr-xr-xsrc/java/com/jogamp/gluegen/runtime/PointerBuffer.java.javame_cdc_fp180
-rwxr-xr-xsrc/java/com/jogamp/gluegen/runtime/PointerBufferME_CDC_FP.java102
-rwxr-xr-xsrc/java/com/jogamp/gluegen/runtime/PointerBufferSE.java92
-rw-r--r--[-rwxr-xr-x]src/java/com/jogamp/gluegen/runtime/StructAccessor.java494
-rwxr-xr-xsrc/java/com/jogamp/gluegen/runtime/StructAccessor.java.javame_cdc_fp201
10 files changed, 949 insertions, 1223 deletions
diff --git a/src/java/com/jogamp/gluegen/runtime/BufferFactory.java b/src/java/com/jogamp/gluegen/runtime/BufferFactory.java
index 24d842c..1f8182c 100755
--- a/src/java/com/jogamp/gluegen/runtime/BufferFactory.java
+++ b/src/java/com/jogamp/gluegen/runtime/BufferFactory.java
@@ -36,282 +36,299 @@
* Sun gratefully acknowledges that this software was originally authored
* and developed by Kenneth Bradley Russell and Christopher John Kline.
*/
-
package com.jogamp.gluegen.runtime;
import java.nio.*;
+/**
+ * @author Kenneth Russel
+ * @author Sven Gothel
+ * @author Michael Bien
+ */
public class BufferFactory {
- public static final int SIZEOF_BYTE = 1;
- public static final int SIZEOF_SHORT = 2;
- public static final int SIZEOF_CHAR = 2;
- public static final int SIZEOF_INT = 4;
- public static final int SIZEOF_FLOAT = 4;
- public static final int SIZEOF_LONG = 8;
- public static final int SIZEOF_DOUBLE = 8;
-
- private static final boolean isLittleEndian;
-
- static {
- ByteBuffer tst_b = BufferFactory.newDirectByteBuffer(BufferFactory.SIZEOF_INT); // 32bit in native order
- IntBuffer tst_i = tst_b.asIntBuffer();
- ShortBuffer tst_s = tst_b.asShortBuffer();
- tst_i.put(0, 0x0A0B0C0D);
- isLittleEndian = 0x0C0D == tst_s.get(0) ;
- }
- public static boolean isLittleEndian() {
- return isLittleEndian;
- }
+ public static final int SIZEOF_BYTE = 1;
+ public static final int SIZEOF_SHORT = 2;
+ public static final int SIZEOF_CHAR = 2;
+ public static final int SIZEOF_INT = 4;
+ public static final int SIZEOF_FLOAT = 4;
+ public static final int SIZEOF_LONG = 8;
+ public static final int SIZEOF_DOUBLE = 8;
- /** Helper routine to create a direct ByteBuffer with native order */
- public static ByteBuffer newDirectByteBuffer(int size) {
- return nativeOrder(ByteBuffer.allocateDirect(size));
- }
-
- /** Helper routine to set a ByteBuffer to the native byte order, if
- that operation is supported by the underlying NIO
- implementation. */
- public static ByteBuffer nativeOrder(ByteBuffer buf) {
- return buf.order(ByteOrder.nativeOrder());
- }
-
- /** Helper routine to tell whether a buffer is direct or not. Null
- pointers are considered NOT direct. isDirect() should really be
- public in Buffer and not replicated in all subclasses. */
- public static boolean isDirect(Object buf) {
- if (buf == null) {
- return true;
- }
- if (buf instanceof ByteBuffer) {
- return ((ByteBuffer) buf).isDirect();
- } else if (buf instanceof FloatBuffer) {
- return ((FloatBuffer) buf).isDirect();
- } else if (buf instanceof DoubleBuffer) {
- return ((DoubleBuffer) buf).isDirect();
- } else if (buf instanceof CharBuffer) {
- return ((CharBuffer) buf).isDirect();
- } else if (buf instanceof ShortBuffer) {
- return ((ShortBuffer) buf).isDirect();
- } else if (buf instanceof IntBuffer) {
- return ((IntBuffer) buf).isDirect();
- } else if (buf instanceof LongBuffer) {
- return ((LongBuffer) buf).isDirect();
- } else if (buf instanceof PointerBuffer) {
- return ((PointerBuffer) buf).isDirect();
+ public static boolean isLittleEndian() {
+ return Platform.isLittleEndian();
}
- throw new RuntimeException("Unexpected buffer type " + buf.getClass().getName());
- }
+ /**
+ * Helper routine to create a direct ByteBuffer with native order
+ */
+ public static ByteBuffer newDirectByteBuffer(int size) {
+ return nativeOrder(ByteBuffer.allocateDirect(size));
+ }
- /** Helper routine to get the Buffer byte offset by taking into
- account the Buffer position and the underlying type. This is
- the total offset for Direct Buffers. */
-
- public static int getDirectBufferByteOffset(Object buf) {
- if(buf == null) {
- return 0;
+ /**
+ * Helper routine to set a ByteBuffer to the native byte order, if
+ * that operation is supported by the underlying NIO
+ * implementation.
+ */
+ public static ByteBuffer nativeOrder(ByteBuffer buf) {
+ if (Platform.isJavaSE()) {
+ return buf.order(ByteOrder.nativeOrder());
+ } else {
+ // JSR 239 does not support the ByteOrder class or the order methods.
+ // The initial order of a byte buffer is the platform byte order.
+ return buf;
+ }
}
- if(buf instanceof Buffer) {
- int pos = ((Buffer)buf).position();
- if(buf instanceof ByteBuffer) {
- return pos;
+
+ /**
+ * Helper routine to tell whether a buffer is direct or not. Null
+ * pointers are considered NOT direct. isDirect() should really be
+ * public in Buffer and not replicated in all subclasses.
+ */
+ public static boolean isDirect(Object buf) {
+ if (buf == null) {
+ return true;
+ }
+ if (buf instanceof ByteBuffer) {
+ return ((ByteBuffer) buf).isDirect();
} else if (buf instanceof FloatBuffer) {
- return pos * SIZEOF_FLOAT;
+ return ((FloatBuffer) buf).isDirect();
} else if (buf instanceof IntBuffer) {
- return pos * SIZEOF_INT;
+ return ((IntBuffer) buf).isDirect();
} else if (buf instanceof ShortBuffer) {
- return pos * SIZEOF_SHORT;
- } else if (buf instanceof DoubleBuffer) {
- return pos * SIZEOF_DOUBLE;
- } else if (buf instanceof LongBuffer) {
- return pos * SIZEOF_LONG;
- } else if (buf instanceof CharBuffer) {
- return pos * SIZEOF_CHAR;
+ return ((ShortBuffer) buf).isDirect();
+ } else if (buf instanceof PointerBuffer) {
+ return ((PointerBuffer) buf).isDirect();
+ } else if (Platform.isJavaSE()) {
+ if (buf instanceof DoubleBuffer) {
+ return ((DoubleBuffer) buf).isDirect();
+ } else if (buf instanceof LongBuffer) {
+ return ((LongBuffer) buf).isDirect();
+ }else if (buf instanceof CharBuffer) {
+ return ((CharBuffer) buf).isDirect();
+ }
}
- } else if (buf instanceof PointerBuffer) {
- PointerBuffer pb = (PointerBuffer)buf;
- return pb.position() * pb.elementSize();
- }
+ throw new RuntimeException("Unexpected buffer type " + buf.getClass().getName());
+ }
- throw new RuntimeException("Disallowed array backing store type in buffer "
- + buf.getClass().getName());
- }
+ /**
+ * Helper routine to get the Buffer byte offset by taking into
+ * account the Buffer position and the underlying type. This is
+ * the total offset for Direct Buffers.
+ */
+ public static int getDirectBufferByteOffset(Object buf) {
+ if (buf == null) {
+ return 0;
+ }
+ if (buf instanceof Buffer) {
+ int pos = ((Buffer) buf).position();
+ if (buf instanceof ByteBuffer) {
+ return pos;
+ } else if (buf instanceof FloatBuffer) {
+ return pos * SIZEOF_FLOAT;
+ } else if (buf instanceof IntBuffer) {
+ return pos * SIZEOF_INT;
+ } else if (buf instanceof ShortBuffer) {
+ return pos * SIZEOF_SHORT;
+ }else if(Platform.isJavaSE()) {
+ if (buf instanceof DoubleBuffer) {
+ return pos * SIZEOF_DOUBLE;
+ } else if (buf instanceof LongBuffer) {
+ return pos * SIZEOF_LONG;
+ } else if (buf instanceof CharBuffer) {
+ return pos * SIZEOF_CHAR;
+ }
+ }
+ } else if (buf instanceof PointerBuffer) {
+ PointerBuffer pointerBuffer = (PointerBuffer) buf;
+ return pointerBuffer.position() * PointerBuffer.elementSize();
+ }
+ throw new RuntimeException("Disallowed array backing store type in buffer "
+ + buf.getClass().getName());
+ }
- /** Helper routine to return the array backing store reference from
- a Buffer object. */
+ /**
+ * Helper routine to return the array backing store reference from
+ * a Buffer object.
+ */
+ public static Object getArray(Object buf) {
+ if (buf == null) {
+ return null;
+ }
+ if (buf instanceof ByteBuffer) {
+ return ((ByteBuffer) buf).array();
+ } else if (buf instanceof FloatBuffer) {
+ return ((FloatBuffer) buf).array();
+ } else if (buf instanceof IntBuffer) {
+ return ((IntBuffer) buf).array();
+ } else if (buf instanceof ShortBuffer) {
+ return ((ShortBuffer) buf).array();
+ } else if (buf instanceof PointerBuffer) {
+ return ((PointerBuffer) buf).array();
+ }else if(Platform.isJavaSE()) {
+ if (buf instanceof DoubleBuffer) {
+ return ((DoubleBuffer) buf).array();
+ } else if (buf instanceof LongBuffer) {
+ return ((LongBuffer) buf).array();
+ } else if (buf instanceof CharBuffer) {
+ return ((CharBuffer) buf).array();
+ }
+ }
- public static Object getArray(Object buf) {
- if (buf == null) {
- return null;
- }
- if(buf instanceof ByteBuffer) {
- return ((ByteBuffer) buf).array();
- } else if (buf instanceof FloatBuffer) {
- return ((FloatBuffer) buf).array();
- } else if (buf instanceof IntBuffer) {
- return ((IntBuffer) buf).array();
- } else if (buf instanceof ShortBuffer) {
- return ((ShortBuffer) buf).array();
- } else if (buf instanceof DoubleBuffer) {
- return ((DoubleBuffer) buf).array();
- } else if (buf instanceof LongBuffer) {
- return ((LongBuffer) buf).array();
- } else if (buf instanceof CharBuffer) {
- return ((CharBuffer) buf).array();
- } else if (buf instanceof PointerBuffer) {
- return ((PointerBuffer) buf).array();
- }
+ throw new RuntimeException("Disallowed array backing store type in buffer "
+ + buf.getClass().getName());
+ }
- throw new RuntimeException("Disallowed array backing store type in buffer "
- + buf.getClass().getName());
- }
+ /**
+ * Helper routine to get the full byte offset from the beginning of
+ * the array that is the storage for the indirect Buffer
+ * object. The array offset also includes the position offset
+ * within the buffer, in addition to any array offset.
+ */
+ public static int getIndirectBufferByteOffset(Object buf) {
+ if (buf == null) {
+ return 0;
+ }
+ if (buf instanceof Buffer) {
+ int pos = ((Buffer) buf).position();
+ if (buf instanceof ByteBuffer) {
+ return (((ByteBuffer) buf).arrayOffset() + pos);
+ } else if (buf instanceof FloatBuffer) {
+ return (SIZEOF_FLOAT * (((FloatBuffer) buf).arrayOffset() + pos));
+ } else if (buf instanceof IntBuffer) {
+ return (SIZEOF_INT * (((IntBuffer) buf).arrayOffset() + pos));
+ } else if (buf instanceof ShortBuffer) {
+ return (SIZEOF_SHORT * (((ShortBuffer) buf).arrayOffset() + pos));
+ }else if(Platform.isJavaSE()) {
+ if (buf instanceof DoubleBuffer) {
+ return (SIZEOF_DOUBLE * (((DoubleBuffer) buf).arrayOffset() + pos));
+ } else if (buf instanceof LongBuffer) {
+ return (SIZEOF_LONG * (((LongBuffer) buf).arrayOffset() + pos));
+ } else if (buf instanceof CharBuffer) {
+ return (SIZEOF_CHAR * (((CharBuffer) buf).arrayOffset() + pos));
+ }
+ }
+ } else if (buf instanceof PointerBuffer) {
+ PointerBuffer pointerBuffer = (PointerBuffer) buf;
+ return PointerBuffer.elementSize() * (pointerBuffer.arrayOffset() + pointerBuffer.position());
+ }
+ throw new RuntimeException("Unknown buffer type " + buf.getClass().getName());
+ }
- /** Helper routine to get the full byte offset from the beginning of
- the array that is the storage for the indirect Buffer
- object. The array offset also includes the position offset
- within the buffer, in addition to any array offset. */
+ public static void rangeCheck(byte[] array, int offset, int minElementsRemaining) {
+ if (array == null) {
+ return;
+ }
- public static int getIndirectBufferByteOffset(Object buf) {
- if(buf == null) {
- return 0;
- }
- if (buf instanceof Buffer) {
- int pos = ((Buffer)buf).position();
- if(buf instanceof ByteBuffer) {
- return (((ByteBuffer)buf).arrayOffset() + pos);
- } else if(buf instanceof FloatBuffer) {
- return (SIZEOF_FLOAT*(((FloatBuffer)buf).arrayOffset() + pos));
- } else if(buf instanceof IntBuffer) {
- return (SIZEOF_INT*(((IntBuffer)buf).arrayOffset() + pos));
- } else if(buf instanceof ShortBuffer) {
- return (SIZEOF_SHORT*(((ShortBuffer)buf).arrayOffset() + pos));
- } else if(buf instanceof DoubleBuffer) {
- return (SIZEOF_DOUBLE*(((DoubleBuffer)buf).arrayOffset() + pos));
- } else if(buf instanceof LongBuffer) {
- return (SIZEOF_LONG*(((LongBuffer)buf).arrayOffset() + pos));
- } else if(buf instanceof CharBuffer) {
- return (SIZEOF_CHAR*(((CharBuffer)buf).arrayOffset() + pos));
+ if (array.length < offset + minElementsRemaining) {
+ throw new ArrayIndexOutOfBoundsException("Required " + minElementsRemaining + " elements in array, only had " + (array.length - offset));
}
- } else if(buf instanceof PointerBuffer) {
- PointerBuffer pb = (PointerBuffer)buf;
- return pb.elementSize()*(pb.arrayOffset() + pb.position());
}
- throw new RuntimeException("Unknown buffer type " + buf.getClass().getName());
- }
-
- public static void rangeCheck(byte[] array, int offset, int minElementsRemaining) {
- if (array == null) {
- return;
- }
+ public static void rangeCheck(char[] array, int offset, int minElementsRemaining) {
+ if (array == null) {
+ return;
+ }
- if (array.length < offset + minElementsRemaining) {
- throw new ArrayIndexOutOfBoundsException("Required " + minElementsRemaining + " elements in array, only had " + (array.length - offset));
+ if (array.length < offset + minElementsRemaining) {
+ throw new ArrayIndexOutOfBoundsException("Required " + minElementsRemaining + " elements in array, only had " + (array.length - offset));
+ }
}
- }
- public static void rangeCheck(char[] array, int offset, int minElementsRemaining) {
- if (array == null) {
- return;
- }
+ public static void rangeCheck(short[] array, int offset, int minElementsRemaining) {
+ if (array == null) {
+ return;
+ }
- if (array.length < offset + minElementsRemaining) {
- throw new ArrayIndexOutOfBoundsException("Required " + minElementsRemaining + " elements in array, only had " + (array.length - offset));
+ if (array.length < offset + minElementsRemaining) {
+ throw new ArrayIndexOutOfBoundsException("Required " + minElementsRemaining + " elements in array, only had " + (array.length - offset));
+ }
}
- }
- public static void rangeCheck(short[] array, int offset, int minElementsRemaining) {
- if (array == null) {
- return;
- }
+ public static void rangeCheck(int[] array, int offset, int minElementsRemaining) {
+ if (array == null) {
+ return;
+ }
- if (array.length < offset + minElementsRemaining) {
- throw new ArrayIndexOutOfBoundsException("Required " + minElementsRemaining + " elements in array, only had " + (array.length - offset));
+ if (array.length < offset + minElementsRemaining) {
+ throw new ArrayIndexOutOfBoundsException("Required " + minElementsRemaining + " elements in array, only had " + (array.length - offset));
+ }
}
- }
- public static void rangeCheck(int[] array, int offset, int minElementsRemaining) {
- if (array == null) {
- return;
- }
+ public static void rangeCheck(long[] array, int offset, int minElementsRemaining) {
+ if (array == null) {
+ return;
+ }
- if (array.length < offset + minElementsRemaining) {
- throw new ArrayIndexOutOfBoundsException("Required " + minElementsRemaining + " elements in array, only had " + (array.length - offset));
+ if (array.length < offset + minElementsRemaining) {
+ throw new ArrayIndexOutOfBoundsException("Required " + minElementsRemaining + " elements in array, only had " + (array.length - offset));
+ }
}
- }
- public static void rangeCheck(long[] array, int offset, int minElementsRemaining) {
- if (array == null) {
- return;
- }
-
- if (array.length < offset + minElementsRemaining) {
- throw new ArrayIndexOutOfBoundsException("Required " + minElementsRemaining + " elements in array, only had " + (array.length - offset));
- }
- }
+ public static void rangeCheck(float[] array, int offset, int minElementsRemaining) {
+ if (array == null) {
+ return;
+ }
- public static void rangeCheck(float[] array, int offset, int minElementsRemaining) {
- if (array == null) {
- return;
+ if (array.length < offset + minElementsRemaining) {
+ throw new ArrayIndexOutOfBoundsException("Required " + minElementsRemaining + " elements in array, only had " + (array.length - offset));
+ }
}
- if (array.length < offset + minElementsRemaining) {
- throw new ArrayIndexOutOfBoundsException("Required " + minElementsRemaining + " elements in array, only had " + (array.length - offset));
- }
- }
+ public static void rangeCheck(double[] array, int offset, int minElementsRemaining) {
+ if (array == null) {
+ return;
+ }
- public static void rangeCheck(double[] array, int offset, int minElementsRemaining) {
- if (array == null) {
- return;
- }
-
- if (array.length < offset + minElementsRemaining) {
- throw new ArrayIndexOutOfBoundsException("Required " + minElementsRemaining + " elements in array, only had " + (array.length - offset));
+ if (array.length < offset + minElementsRemaining) {
+ throw new ArrayIndexOutOfBoundsException("Required " + minElementsRemaining + " elements in array, only had " + (array.length - offset));
+ }
}
- }
- public static void rangeCheck(Buffer buffer, int minElementsRemaining) {
- if (buffer == null) {
- return;
- }
+ public static void rangeCheck(Buffer buffer, int minElementsRemaining) {
+ if (buffer == null) {
+ return;
+ }
- if (buffer.remaining() < minElementsRemaining) {
- throw new IndexOutOfBoundsException("Required " + minElementsRemaining + " remaining elements in buffer, only had " + buffer.remaining());
+ if (buffer.remaining() < minElementsRemaining) {
+ throw new IndexOutOfBoundsException("Required " + minElementsRemaining + " remaining elements in buffer, only had " + buffer.remaining());
+ }
}
- }
- public static void rangeCheckBytes(Object buffer, int minBytesRemaining) {
- if (buffer == null) {
- return;
- }
+ public static void rangeCheckBytes(Object buffer, int minBytesRemaining) {
+ if (buffer == null) {
+ return;
+ }
- int bytesRemaining = 0;
- if (buffer instanceof Buffer) {
- int elementsRemaining = ((Buffer)buffer).remaining();
- if (buffer instanceof ByteBuffer) {
- bytesRemaining = elementsRemaining;
- } else if (buffer instanceof FloatBuffer) {
- bytesRemaining = elementsRemaining * SIZEOF_FLOAT;
- } else if (buffer instanceof IntBuffer) {
- bytesRemaining = elementsRemaining * SIZEOF_INT;
- } else if (buffer instanceof ShortBuffer) {
- bytesRemaining = elementsRemaining * SIZEOF_SHORT;
- } else if (buffer instanceof DoubleBuffer) {
- bytesRemaining = elementsRemaining * SIZEOF_DOUBLE;
- } else if (buffer instanceof LongBuffer) {
- bytesRemaining = elementsRemaining * SIZEOF_LONG;
- } else if (buffer instanceof CharBuffer) {
- bytesRemaining = elementsRemaining * SIZEOF_CHAR;
+ int bytesRemaining = 0;
+ if (buffer instanceof Buffer) {
+ int elementsRemaining = ((Buffer) buffer).remaining();
+ if (buffer instanceof ByteBuffer) {
+ bytesRemaining = elementsRemaining;
+ } else if (buffer instanceof FloatBuffer) {
+ bytesRemaining = elementsRemaining * SIZEOF_FLOAT;
+ } else if (buffer instanceof IntBuffer) {
+ bytesRemaining = elementsRemaining * SIZEOF_INT;
+ } else if (buffer instanceof ShortBuffer) {
+ bytesRemaining = elementsRemaining * SIZEOF_SHORT;
+ }else if(Platform.isJavaSE()) {
+ if (buffer instanceof DoubleBuffer) {
+ bytesRemaining = elementsRemaining * SIZEOF_DOUBLE;
+ } else if (buffer instanceof LongBuffer) {
+ bytesRemaining = elementsRemaining * SIZEOF_LONG;
+ } else if (buffer instanceof CharBuffer) {
+ bytesRemaining = elementsRemaining * SIZEOF_CHAR;
+ }
+ }
+ } else if (buffer instanceof PointerBuffer) {
+ PointerBuffer pointerBuffer = (PointerBuffer) buffer;
+ bytesRemaining = pointerBuffer.remaining() * PointerBuffer.elementSize();
+ }
+ if (bytesRemaining < minBytesRemaining) {
+ throw new IndexOutOfBoundsException("Required " + minBytesRemaining + " remaining bytes in buffer, only had " + bytesRemaining);
}
- } else if (buffer instanceof PointerBuffer) {
- PointerBuffer pb = (PointerBuffer)buffer;
- bytesRemaining = pb.remaining() * pb.elementSize();
- }
- if (bytesRemaining < minBytesRemaining) {
- throw new IndexOutOfBoundsException("Required " + minBytesRemaining + " remaining bytes in buffer, only had " + bytesRemaining);
}
- }
}
diff --git a/src/java/com/jogamp/gluegen/runtime/BufferFactory.java.javame_cdc_fp b/src/java/com/jogamp/gluegen/runtime/BufferFactory.java.javame_cdc_fp
deleted file mode 100755
index de09ef3..0000000
--- a/src/java/com/jogamp/gluegen/runtime/BufferFactory.java.javame_cdc_fp
+++ /dev/null
@@ -1,267 +0,0 @@
-/*
- * Copyright (c) 2003 Sun Microsystems, Inc. All Rights Reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions are
- * met:
- *
- * - Redistribution of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- *
- * - Redistribution in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- *
- * Neither the name of Sun Microsystems, Inc. or the names of
- * contributors may be used to endorse or promote products derived from
- * this software without specific prior written permission.
- *
- * This software is provided "AS IS," without a warranty of any kind. ALL
- * EXPRESS OR IMPLIED CONDITIONS, REPRESENTATIONS AND WARRANTIES,
- * INCLUDING ANY IMPLIED WARRANTY OF MERCHANTABILITY, FITNESS FOR A
- * PARTICULAR PURPOSE OR NON-INFRINGEMENT, ARE HEREBY EXCLUDED. SUN
- * MICROSYSTEMS, INC. ("SUN") AND ITS LICENSORS SHALL NOT BE LIABLE FOR
- * ANY DAMAGES SUFFERED BY LICENSEE AS A RESULT OF USING, MODIFYING OR
- * DISTRIBUTING THIS SOFTWARE OR ITS DERIVATIVES. IN NO EVENT WILL SUN OR
- * ITS LICENSORS BE LIABLE FOR ANY LOST REVENUE, PROFIT OR DATA, OR FOR
- * DIRECT, INDIRECT, SPECIAL, CONSEQUENTIAL, INCIDENTAL OR PUNITIVE
- * DAMAGES, HOWEVER CAUSED AND REGARDLESS OF THE THEORY OF LIABILITY,
- * ARISING OUT OF THE USE OF OR INABILITY TO USE THIS SOFTWARE, EVEN IF
- * SUN HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.
- *
- * You acknowledge that this software is not designed or intended for use
- * in the design, construction, operation or maintenance of any nuclear
- * facility.
- *
- * Sun gratefully acknowledges that this software was originally authored
- * and developed by Kenneth Bradley Russell and Christopher John Kline.
- */
-
-package com.jogamp.gluegen.runtime;
-
-import java.nio.*;
-
-public class BufferFactory {
- public static final int SIZEOF_BYTE = 1;
- public static final int SIZEOF_SHORT = 2;
- public static final int SIZEOF_CHAR = 2;
- public static final int SIZEOF_INT = 4;
- public static final int SIZEOF_FLOAT = 4;
- public static final int SIZEOF_LONG = 8;
- public static final int SIZEOF_DOUBLE = 8;
-
- private static final boolean isLittleEndian;
-
- static {
- ByteBuffer tst_b = BufferFactory.newDirectByteBuffer(BufferFactory.SIZEOF_INT); // 32bit in native order
- IntBuffer tst_i = tst_b.asIntBuffer();
- ShortBuffer tst_s = tst_b.asShortBuffer();
- tst_i.put(0, 0x0A0B0C0D);
- isLittleEndian = 0x0C0D == tst_s.get(0) ;
- }
-
- public static boolean isLittleEndian() {
- return isLittleEndian;
- }
-
- /** Helper routine to create a direct ByteBuffer with native order */
- public static ByteBuffer newDirectByteBuffer(int size) {
- return nativeOrder(ByteBuffer.allocateDirect(size));
- }
-
- /** Helper routine to set a ByteBuffer to the native byte order, if
- that operation is supported by the underlying NIO
- implementation. */
- public static ByteBuffer nativeOrder(ByteBuffer buf) {
- // JSR 239 does not support the ByteOrder class or the order methods. The initial order of a byte buffer is the platform byte order.
- return buf;
- }
-
- /** Helper routine to tell whether a buffer is direct or not. Null
- pointers are considered NOT direct. isDirect() should really be
- public in Buffer and not replicated in all subclasses. */
- public static boolean isDirect(Object buf) {
- if (buf == null) {
- return true;
- }
- if (buf instanceof ByteBuffer) {
- return ((ByteBuffer) buf).isDirect();
- } else if (buf instanceof FloatBuffer) {
- return ((FloatBuffer) buf).isDirect();
- } else if (buf instanceof ShortBuffer) {
- return ((ShortBuffer) buf).isDirect();
- } else if (buf instanceof IntBuffer) {
- return ((IntBuffer) buf).isDirect();
- } else if (buf instanceof PointerBuffer) {
- return ((PointerBuffer) buf).isDirect();
- }
- throw new RuntimeException("Unexpected buffer type " + buf.getClass().getName());
- }
-
-
- /** Helper routine to get the Buffer byte offset by taking into
- account the Buffer position and the underlying type. This is
- the total offset for Direct Buffers. */
-
- public static int getDirectBufferByteOffset(Object buf) {
- if(buf == null) {
- return 0;
- }
- if(buf instanceof Buffer) {
- int pos = ((Buffer)buf).position();
- if(buf instanceof ByteBuffer) {
- return pos;
- } else if (buf instanceof FloatBuffer) {
- return pos * SIZEOF_FLOAT;
- } else if (buf instanceof IntBuffer) {
- return pos * SIZEOF_INT;
- } else if (buf instanceof ShortBuffer) {
- return pos * SIZEOF_SHORT;
- }
- } else if (buf instanceof PointerBuffer) {
- return (((PointerBuffer)buf).position() * SIZEOF_LONG);
- }
-
- throw new RuntimeException("Disallowed array backing store type in buffer "
- + buf.getClass().getName());
- }
-
-
- /** Helper routine to return the array backing store reference from
- a Buffer object. */
-
- public static Object getArray(Object buf) {
- if (buf == null) {
- return null;
- }
- if(buf instanceof ByteBuffer) {
- return ((ByteBuffer) buf).array();
- } else if (buf instanceof FloatBuffer) {
- return ((FloatBuffer) buf).array();
- } else if (buf instanceof IntBuffer) {
- return ((IntBuffer) buf).array();
- } else if (buf instanceof ShortBuffer) {
- return ((ShortBuffer) buf).array();
- } else if (buf instanceof ShortBuffer) {
- return ((ShortBuffer) buf).array();
- } else if (buf instanceof PointerBuffer) {
- return ((PointerBuffer) buf).array();
- }
-
- throw new RuntimeException("Disallowed array backing store type in buffer "
- + buf.getClass().getName());
- }
-
-
- /** Helper routine to get the full byte offset from the beginning of
- the array that is the storage for the indirect Buffer
- object. The array offset also includes the position offset
- within the buffer, in addition to any array offset. */
-
- public static int getIndirectBufferByteOffset(Object buf) {
- if(buf == null) {
- return 0;
- }
- if(buf instanceof Buffer) {
- int pos = ((Buffer)buf).position();
- if(buf instanceof ByteBuffer) {
- return (((ByteBuffer)buf).arrayOffset() + pos);
- } else if(buf instanceof FloatBuffer) {
- return (SIZEOF_FLOAT*(((FloatBuffer)buf).arrayOffset() + pos));
- } else if(buf instanceof IntBuffer) {
- return (SIZEOF_INT*(((IntBuffer)buf).arrayOffset() + pos));
- } else if(buf instanceof ShortBuffer) {
- return (SIZEOF_SHORT*(((ShortBuffer)buf).arrayOffset() + pos));
- }
- } else if(buf instanceof PointerBuffer) {
- return (SIZEOF_LONG*(((PointerBuffer)buf).arrayOffset() + ((PointerBuffer)buf).position()));
- }
-
- throw new RuntimeException("Unknown buffer type " + buf.getClass().getName());
- }
-
- public static void rangeCheck(byte[] array, int offset, int minElementsRemaining) {
- if (array == null) {
- return;
- }
-
- if (array.length < offset + minElementsRemaining) {
- throw new ArrayIndexOutOfBoundsException("Required " + minElementsRemaining + " elements in array, only had " + (array.length - offset));
- }
- }
-
- public static void rangeCheck(char[] array, int offset, int minElementsRemaining) {
- if (array == null) {
- return;
- }
-
- if (array.length < offset + minElementsRemaining) {
- throw new ArrayIndexOutOfBoundsException("Required " + minElementsRemaining + " elements in array, only had " + (array.length - offset));
- }
- }
-
- public static void rangeCheck(short[] array, int offset, int minElementsRemaining) {
- if (array == null) {
- return;
- }
-
- if (array.length < offset + minElementsRemaining) {
- throw new ArrayIndexOutOfBoundsException("Required " + minElementsRemaining + " elements in array, only had " + (array.length - offset));
- }
- }
-
- public static void rangeCheck(int[] array, int offset, int minElementsRemaining) {
- if (array == null) {
- return;
- }
-
- if (array.length < offset + minElementsRemaining) {
- throw new ArrayIndexOutOfBoundsException("Required " + minElementsRemaining + " elements in array, only had " + (array.length - offset));
- }
- }
-
- public static void rangeCheck(float[] array, int offset, int minElementsRemaining) {
- if (array == null) {
- return;
- }
-
- if (array.length < offset + minElementsRemaining) {
- throw new ArrayIndexOutOfBoundsException("Required " + minElementsRemaining + " elements in array, only had " + (array.length - offset));
- }
- }
-
- public static void rangeCheck(Buffer buffer, int minElementsRemaining) {
- if (buffer == null) {
- return;
- }
-
- if (buffer.remaining() < minElementsRemaining) {
- throw new IndexOutOfBoundsException("Required " + minElementsRemaining + " remaining elements in buffer, only had " + buffer.remaining());
- }
- }
-
- public static void rangeCheckBytes(Object buffer, int minBytesRemaining) {
- if (buffer == null) {
- return;
- }
-
- int bytesRemaining = 0;
- if (buffer instanceof Buffer) {
- int elementsRemaining = ((Buffer)buffer).remaining();
- if (buffer instanceof ByteBuffer) {
- bytesRemaining = elementsRemaining;
- } else if (buffer instanceof FloatBuffer) {
- bytesRemaining = elementsRemaining * SIZEOF_FLOAT;
- } else if (buffer instanceof IntBuffer) {
- bytesRemaining = elementsRemaining * SIZEOF_INT;
- } else if (buffer instanceof ShortBuffer) {
- bytesRemaining = elementsRemaining * SIZEOF_SHORT;
- }
- } else if (buffer instanceof PointerBuffer) {
- bytesRemaining = ((PointerBuffer)buffer).remaining() * SIZEOF_LONG;
- }
- if (bytesRemaining < minBytesRemaining) {
- throw new IndexOutOfBoundsException("Required " + minBytesRemaining + " remaining bytes in buffer, only had " + bytesRemaining);
- }
- }
-}
diff --git a/src/java/com/jogamp/gluegen/runtime/CPU.java b/src/java/com/jogamp/gluegen/runtime/CPU.java
index 027b602..9c2f81e 100755
--- a/src/java/com/jogamp/gluegen/runtime/CPU.java
+++ b/src/java/com/jogamp/gluegen/runtime/CPU.java
@@ -60,8 +60,8 @@ public class CPU {
// here as these system properties are visible even to unsigned
// applets
// Note: this code is replicated in StructLayout.java
- String os = System.getProperty("os.name").toLowerCase();
- String cpu = System.getProperty("os.arch").toLowerCase();
+ String os = Platform.getOS().toLowerCase();
+ String cpu = Platform.getArch().toLowerCase();
if ((os.startsWith("windows") && cpu.equals("x86")) ||
(os.startsWith("windows") && cpu.equals("arm")) ||
diff --git a/src/java/com/jogamp/gluegen/runtime/Platform.java b/src/java/com/jogamp/gluegen/runtime/Platform.java
new file mode 100644
index 0000000..7c5e97e
--- /dev/null
+++ b/src/java/com/jogamp/gluegen/runtime/Platform.java
@@ -0,0 +1,107 @@
+/*
+ * Copyright (c) 2010, Michael Bien
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are met:
+ * * Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * * Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ * * Neither the name of Michael Bien nor the
+ * names of its contributors may be used to endorse or promote products
+ * derived from this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
+ * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+ * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+ * DISCLAIMED. IN NO EVENT SHALL Michael Bien BE LIABLE FOR ANY
+ * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+ * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+ * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
+ * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+ * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+/*
+ * Created on Sunday, March 28 2010 14:43
+ */
+package com.jogamp.gluegen.runtime;
+
+import java.nio.ByteBuffer;
+import java.nio.IntBuffer;
+import java.nio.ShortBuffer;
+
+/**
+ * Utility class for querying platform specific properties.
+ * @author Michael Bien
+ */
+public class Platform {
+
+ public static final boolean JAVA_SE;
+ public static final boolean LITTLE_ENDIAN;
+
+ static {
+ // platform
+ // fast path
+ boolean se = System.getProperty("java.runtime.name").indexOf("Java SE") != -1;
+
+ if(!se) {
+ try{
+ Class.forName("java.nio.LongBuffer");
+ Class.forName("java.nio.DoubleBuffer");
+ se = true;
+ }catch(ClassNotFoundException ex) {
+ se = false;
+ }
+ }
+ JAVA_SE = se;
+
+ // byte order
+ ByteBuffer tst_b = BufferFactory.newDirectByteBuffer(BufferFactory.SIZEOF_INT); // 32bit in native order
+ IntBuffer tst_i = tst_b.asIntBuffer();
+ ShortBuffer tst_s = tst_b.asShortBuffer();
+ tst_i.put(0, 0x0A0B0C0D);
+ LITTLE_ENDIAN = 0x0C0D == tst_s.get(0);
+ }
+
+ private Platform() {}
+
+ /**
+ * Returns true only if this program is running on the Java Standard Edition.
+ */
+ public static boolean isJavaSE() {
+ return JAVA_SE;
+ }
+
+ /**
+ * Returns true only if this system uses little endian byte ordering.
+ */
+ public static boolean isLittleEndian() {
+ return LITTLE_ENDIAN;
+ }
+
+ /**
+ * Returns the OS name.
+ */
+ public static String getOS() {
+ return System.getProperty("os.name");
+ }
+
+ /**
+ * Returns the CPU architecture String.
+ */
+ public static String getArch() {
+ return System.getProperty("os.arch");
+ }
+
+ /**
+ * Returns true if this JVM is a 32bit JVM.
+ */
+ public static boolean is32Bit() {
+ return CPU.is32Bit();
+ }
+
+}
diff --git a/src/java/com/jogamp/gluegen/runtime/PointerBuffer.java b/src/java/com/jogamp/gluegen/runtime/PointerBuffer.java
index 09ca2db..bd73e56 100755..100644
--- a/src/java/com/jogamp/gluegen/runtime/PointerBuffer.java
+++ b/src/java/com/jogamp/gluegen/runtime/PointerBuffer.java
@@ -1,169 +1,155 @@
/*
- * Copyright (c) 2003 Sun Microsystems, Inc. All Rights Reserved.
+ * Copyright (c) 2010, Michael Bien
+ * All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions are
- * met:
+ * modification, are permitted provided that the following conditions are met:
+ * * Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * * Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ * * Neither the name of Michael Bien nor the
+ * names of its contributors may be used to endorse or promote products
+ * derived from this software without specific prior written permission.
*
- * - Redistribution of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- *
- * - Redistribution in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- *
- * Neither the name of Sun Microsystems, Inc. or the names of
- * contributors may be used to endorse or promote products derived from
- * this software without specific prior written permission.
- *
- * This software is provided "AS IS," without a warranty of any kind. ALL
- * EXPRESS OR IMPLIED CONDITIONS, REPRESENTATIONS AND WARRANTIES,
- * INCLUDING ANY IMPLIED WARRANTY OF MERCHANTABILITY, FITNESS FOR A
- * PARTICULAR PURPOSE OR NON-INFRINGEMENT, ARE HEREBY EXCLUDED. SUN
- * MICROSYSTEMS, INC. ("SUN") AND ITS LICENSORS SHALL NOT BE LIABLE FOR
- * ANY DAMAGES SUFFERED BY LICENSEE AS A RESULT OF USING, MODIFYING OR
- * DISTRIBUTING THIS SOFTWARE OR ITS DERIVATIVES. IN NO EVENT WILL SUN OR
- * ITS LICENSORS BE LIABLE FOR ANY LOST REVENUE, PROFIT OR DATA, OR FOR
- * DIRECT, INDIRECT, SPECIAL, CONSEQUENTIAL, INCIDENTAL OR PUNITIVE
- * DAMAGES, HOWEVER CAUSED AND REGARDLESS OF THE THEORY OF LIABILITY,
- * ARISING OUT OF THE USE OF OR INABILITY TO USE THIS SOFTWARE, EVEN IF
- * SUN HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.
- *
- * You acknowledge that this software is not designed or intended for use
- * in the design, construction, operation or maintenance of any nuclear
- * facility.
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
+ * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+ * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+ * DISCLAIMED. IN NO EVENT SHALL Michael Bien BE LIABLE FOR ANY
+ * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+ * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+ * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
+ * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+ * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
+/*
+ * Created on Saturday, March 27 2010 11:55
+ */
package com.jogamp.gluegen.runtime;
-import java.nio.*;
+import java.nio.ByteBuffer;
-public class PointerBuffer {
- private ByteBuffer bb;
- private Buffer pb;
- private int capacity, position;
- private long[] backup;
+/**
+ * Hardware independent container for native long- and pointer arrays.
+ * @author Michael Bien
+ * @author Sven Gothel
+ */
+public abstract class PointerBuffer {
- private PointerBuffer(ByteBuffer bb) {
- this.bb = bb;
+ protected final ByteBuffer bb;
+ protected int capacity;
+ protected int position;
+ protected long[] backup;
- if(CPU.is32Bit()) {
- this.pb = bb.asIntBuffer();
- }else{
- this.pb = bb.asLongBuffer();
+ protected PointerBuffer(ByteBuffer bb) {
+ this.bb = bb;
}
- capacity = bb.capacity() / elementSize();
-
- position=0;
- backup = new long[capacity];
- }
+ public static PointerBuffer allocate(int size) {
+ if (Platform.isJavaSE()) {
+ return new PointerBufferSE(ByteBuffer.wrap(new byte[elementSize() * size]));
+ } else {
+ return new PointerBufferME_CDC_FP(ByteBuffer.wrap(new byte[elementSize() * size]));
+ }
+ }
- public final int limit() {
- return capacity;
- }
- public final int capacity() {
- return capacity;
- }
+ public static PointerBuffer allocateDirect(int size) {
+ if (Platform.isJavaSE()) {
+ return new PointerBufferSE(BufferFactory.newDirectByteBuffer(elementSize() * size));
+ } else {
+ return new PointerBufferME_CDC_FP(BufferFactory.newDirectByteBuffer(elementSize() * size));
+ }
+ }
- public final int position() {
- return position;
- }
+ public static PointerBuffer wrap(ByteBuffer src) {
+ PointerBuffer res;
+ if (Platform.isJavaSE()) {
+ res = new PointerBufferSE(src);
+ } else {
+ res = new PointerBufferME_CDC_FP(src);
+ }
+ res.updateBackup();
+ return res;
- public final PointerBuffer position(int newPos) {
- if(0>newPos || newPos>=capacity) {
- throw new IndexOutOfBoundsException();
}
- position = newPos;
- return this;
- }
-
- public final int remaining() {
- return capacity - position;
- }
- public final boolean hasRemaining() {
- return position < capacity;
- }
+ void updateBackup() {
+ for (int i = 0; i < capacity; i++) {
+ backup[i] = get(i);
+ }
+ }
- public final PointerBuffer rewind() {
- position=0;
- return this;
- }
+ int arrayOffset() {
+ return 0;
+ }
- int arrayOffset() { return 0; }
+ public static int elementSize() {
+ return CPU.is32Bit() ? BufferFactory.SIZEOF_INT : BufferFactory.SIZEOF_LONG;
+ }
- boolean hasArray() { return true; }
+ public int limit() {
+ return capacity;
+ }
- public long[] array() {
- return backup;
- }
+ public int capacity() {
+ return capacity;
+ }
- public static PointerBuffer allocate(int size) {
- return new PointerBuffer(ByteBuffer.wrap(new byte[elementSize()* size]));
- }
+ public int position() {
+ return position;
+ }
- public static PointerBuffer allocateDirect(int size) {
- return new PointerBuffer(BufferFactory.newDirectByteBuffer(elementSize() * size));
- }
+ public PointerBuffer position(int newPos) {
+ if (0 > newPos || newPos >= capacity) {
+ throw new IndexOutOfBoundsException("Sorry to interrupt, but the position "+newPos+" was out of bounds. " +
+ "My capacity is "+capacity()+".");
+ }
+ position = newPos;
+ return this;
+ }
- public static PointerBuffer wrap(ByteBuffer src) {
- PointerBuffer res = new PointerBuffer(src);
- res.updateBackup();
- return res;
- }
+ public int remaining() {
+ return capacity - position;
+ }
- public ByteBuffer getBuffer() {
- return bb;
- }
+ public boolean hasRemaining() {
+ return position < capacity;
+ }
- public boolean isDirect() {
- return bb.isDirect();
- }
+ public PointerBuffer rewind() {
+ position = 0;
+ return this;
+ }
- public long get(int idx) {
- if(0>idx || idx>=capacity) {
- throw new IndexOutOfBoundsException();
+ boolean hasArray() {
+ return true;
}
- if(CPU.is32Bit()) {
- return ((IntBuffer)pb).get(idx);
- } else {
- return ((LongBuffer)pb).get(idx);
+
+ public long[] array() {
+ return backup;
}
- }
- public long get() {
- long r = get(position);
- position++;
- return r;
- }
+ public ByteBuffer getBuffer() {
+ return bb;
+ }
- public PointerBuffer put(int idx, long v) {
- if(0>idx || idx>=capacity) {
- throw new IndexOutOfBoundsException();
+ public boolean isDirect() {
+ return bb.isDirect();
}
- backup[idx] = v;
- if(CPU.is32Bit()) {
- ((IntBuffer)pb).put(idx, (int)v);
- } else {
- ((LongBuffer)pb).put(idx, v);
+
+ public long get() {
+ long r = get(position);
+ position++;
+ return r;
}
- return this;
- }
- public PointerBuffer put(long v) {
- put(position, v);
- position++;
- return this;
- }
-
- private void updateBackup() {
- for (int i = 0; i < capacity; i++) {
- backup[i] = get(i);
- }
- }
-
- public static int elementSize() {
- return CPU.is32Bit() ? BufferFactory.SIZEOF_INT : BufferFactory.SIZEOF_LONG;
- }
+ public abstract long get(int idx);
+
+ public abstract PointerBuffer put(int index, long value);
+
+ public abstract PointerBuffer put(long value);
+
}
diff --git a/src/java/com/jogamp/gluegen/runtime/PointerBuffer.java.javame_cdc_fp b/src/java/com/jogamp/gluegen/runtime/PointerBuffer.java.javame_cdc_fp
deleted file mode 100755
index 20a70c1..0000000
--- a/src/java/com/jogamp/gluegen/runtime/PointerBuffer.java.javame_cdc_fp
+++ /dev/null
@@ -1,180 +0,0 @@
-/*
- * Copyright (c) 2003 Sun Microsystems, Inc. All Rights Reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions are
- * met:
- *
- * - Redistribution of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- *
- * - Redistribution in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- *
- * Neither the name of Sun Microsystems, Inc. or the names of
- * contributors may be used to endorse or promote products derived from
- * this software without specific prior written permission.
- *
- * This software is provided "AS IS," without a warranty of any kind. ALL
- * EXPRESS OR IMPLIED CONDITIONS, REPRESENTATIONS AND WARRANTIES,
- * INCLUDING ANY IMPLIED WARRANTY OF MERCHANTABILITY, FITNESS FOR A
- * PARTICULAR PURPOSE OR NON-INFRINGEMENT, ARE HEREBY EXCLUDED. SUN
- * MICROSYSTEMS, INC. ("SUN") AND ITS LICENSORS SHALL NOT BE LIABLE FOR
- * ANY DAMAGES SUFFERED BY LICENSEE AS A RESULT OF USING, MODIFYING OR
- * DISTRIBUTING THIS SOFTWARE OR ITS DERIVATIVES. IN NO EVENT WILL SUN OR
- * ITS LICENSORS BE LIABLE FOR ANY LOST REVENUE, PROFIT OR DATA, OR FOR
- * DIRECT, INDIRECT, SPECIAL, CONSEQUENTIAL, INCIDENTAL OR PUNITIVE
- * DAMAGES, HOWEVER CAUSED AND REGARDLESS OF THE THEORY OF LIABILITY,
- * ARISING OUT OF THE USE OF OR INABILITY TO USE THIS SOFTWARE, EVEN IF
- * SUN HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.
- *
- * You acknowledge that this software is not designed or intended for use
- * in the design, construction, operation or maintenance of any nuclear
- * facility.
- */
-
-package com.jogamp.gluegen.runtime;
-
-import java.nio.*;
-
-public class PointerBuffer {
- private ByteBuffer bb;
- private IntBuffer ib;
- private int capacity, position;
- private long[] backup;
-
- private PointerBuffer(ByteBuffer bb) {
- this.bb = bb;
- this.ib = bb.asIntBuffer();
-
- capacity = bb.capacity() / elementSize();
-
- position=0;
- backup = new long[capacity];
- }
-
- public final int limit() {
- return capacity;
- }
- public final int capacity() {
- return capacity;
- }
-
- public final int position() {
- return position;
- }
-
- public final PointerBuffer position(int newPos) {
- if(0>newPos || newPos>=capacity) {
- throw new IndexOutOfBoundsException();
- }
- position = newPos;
- return this;
- }
-
- public final int remaining() {
- return capacity - position;
- }
-
- public final boolean hasRemaining() {
- return position < capacity;
- }
-
- public final PointerBuffer rewind() {
- position=0;
- return this;
- }
-
- int arrayOffset() { return 0; }
-
- boolean hasArray() { return true; }
-
- public long[] array() {
- return backup;
- }
-
- public static PointerBuffer allocate(int size) {
- return new PointerBuffer(ByteBuffer.wrap(new byte[elementSize()* size]));
- }
-
- public static PointerBuffer allocateDirect(int size) {
- return new PointerBuffer(BufferFactory.newDirectByteBuffer(elementSize() * size));
- }
-
- public static PointerBuffer wrap(ByteBuffer src) {
- PointerBuffer res = new PointerBuffer(src);
- res.updateBackup();
- return res;
- }
-
- public ByteBuffer getBuffer() {
- return bb;
- }
-
- public boolean isDirect() {
- return bb.isDirect();
- }
-
- public long get(int idx) {
- if(0>idx || idx>=capacity) {
- throw new IndexOutOfBoundsException();
- }
- if(CPU.is32Bit()) {
- return ib.get(idx);
- } else {
- idx = idx << 1 ; // 8-byte to 4-byte offset
- long lo = 0x00000000FFFFFFFFL & ( (long) ib.get(idx) );
- long hi = 0x00000000FFFFFFFFL & ( (long) ib.get(idx+1) );
- if(BufferFactory.isLittleEndian()) {
- return hi << 32 | lo ;
- }
- return lo << 32 | hi ;
- }
- }
-
- public long get() {
- long r = get(position);
- position++;
- return r;
- }
-
- public PointerBuffer put(int idx, long v) {
- if(0>idx || idx>=capacity) {
- throw new IndexOutOfBoundsException();
- }
- backup[idx] = v;
- if(CPU.is32Bit()) {
- ib.put(idx, (int)v);
- } else {
- idx = idx << 1 ; // 8-byte to 4-byte offset
- int lo = (int) ( ( v ) & 0x00000000FFFFFFFFL ) ;
- int hi = (int) ( ( v >> 32 ) & 0x00000000FFFFFFFFL ) ;
- if(BufferFactory.isLittleEndian()) {
- ib.put(idx, lo);
- ib.put(idx+1, hi);
- } else {
- ib.put(idx, hi);
- ib.put(idx+1, lo);
- }
- }
- return this;
- }
-
- public PointerBuffer put(long v) {
- put(position, v);
- position++;
- return this;
- }
-
- private void updateBackup() {
- for (int i = 0; i < capacity; i++) {
- backup[i] = get(i);
- }
- }
-
- public static int elementSize() {
- return CPU.is32Bit() ? BufferFactory.SIZEOF_INT : BufferFactory.SIZEOF_LONG;
- }
-
-}
diff --git a/src/java/com/jogamp/gluegen/runtime/PointerBufferME_CDC_FP.java b/src/java/com/jogamp/gluegen/runtime/PointerBufferME_CDC_FP.java
new file mode 100755
index 0000000..27082b6
--- /dev/null
+++ b/src/java/com/jogamp/gluegen/runtime/PointerBufferME_CDC_FP.java
@@ -0,0 +1,102 @@
+/*
+ * Copyright (c) 2003 Sun Microsystems, Inc. All Rights Reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are
+ * met:
+ *
+ * - Redistribution of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ *
+ * - Redistribution in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ *
+ * Neither the name of Sun Microsystems, Inc. or the names of
+ * contributors may be used to endorse or promote products derived from
+ * this software without specific prior written permission.
+ *
+ * This software is provided "AS IS," without a warranty of any kind. ALL
+ * EXPRESS OR IMPLIED CONDITIONS, REPRESENTATIONS AND WARRANTIES,
+ * INCLUDING ANY IMPLIED WARRANTY OF MERCHANTABILITY, FITNESS FOR A
+ * PARTICULAR PURPOSE OR NON-INFRINGEMENT, ARE HEREBY EXCLUDED. SUN
+ * MICROSYSTEMS, INC. ("SUN") AND ITS LICENSORS SHALL NOT BE LIABLE FOR
+ * ANY DAMAGES SUFFERED BY LICENSEE AS A RESULT OF USING, MODIFYING OR
+ * DISTRIBUTING THIS SOFTWARE OR ITS DERIVATIVES. IN NO EVENT WILL SUN OR
+ * ITS LICENSORS BE LIABLE FOR ANY LOST REVENUE, PROFIT OR DATA, OR FOR
+ * DIRECT, INDIRECT, SPECIAL, CONSEQUENTIAL, INCIDENTAL OR PUNITIVE
+ * DAMAGES, HOWEVER CAUSED AND REGARDLESS OF THE THEORY OF LIABILITY,
+ * ARISING OUT OF THE USE OF OR INABILITY TO USE THIS SOFTWARE, EVEN IF
+ * SUN HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.
+ *
+ * You acknowledge that this software is not designed or intended for use
+ * in the design, construction, operation or maintenance of any nuclear
+ * facility.
+ */
+package com.jogamp.gluegen.runtime;
+
+import java.nio.*;
+
+/**
+ * @author Sven Gothel
+ * @author Michael Bien
+ */
+final class PointerBufferME_CDC_FP extends PointerBuffer {
+
+ private IntBuffer pb;
+
+ PointerBufferME_CDC_FP(ByteBuffer bb) {
+ super(bb);
+ this.pb = bb.asIntBuffer();
+
+ capacity = bb.capacity() / elementSize();
+
+ position = 0;
+ backup = new long[capacity];
+ }
+
+ public long get(int idx) {
+ if (0 > idx || idx >= capacity) {
+ throw new IndexOutOfBoundsException();
+ }
+ if (CPU.is32Bit()) {
+ return pb.get(idx);
+ } else {
+ idx = idx << 1; // 8-byte to 4-byte offset
+ long lo = 0x00000000FFFFFFFFL & ((long) pb.get(idx));
+ long hi = 0x00000000FFFFFFFFL & ((long) pb.get(idx + 1));
+ if (BufferFactory.isLittleEndian()) {
+ return hi << 32 | lo;
+ }
+ return lo << 32 | hi;
+ }
+ }
+
+ public PointerBuffer put(int idx, long v) {
+ if (0 > idx || idx >= capacity) {
+ throw new IndexOutOfBoundsException();
+ }
+ backup[idx] = v;
+ if (CPU.is32Bit()) {
+ pb.put(idx, (int) v);
+ } else {
+ idx = idx << 1; // 8-byte to 4-byte offset
+ int lo = (int) ((v) & 0x00000000FFFFFFFFL);
+ int hi = (int) ((v >> 32) & 0x00000000FFFFFFFFL);
+ if (BufferFactory.isLittleEndian()) {
+ pb.put(idx, lo);
+ pb.put(idx + 1, hi);
+ } else {
+ pb.put(idx, hi);
+ pb.put(idx + 1, lo);
+ }
+ }
+ return this;
+ }
+
+ public PointerBuffer put(long v) {
+ put(position, v);
+ position++;
+ return this;
+ }
+}
diff --git a/src/java/com/jogamp/gluegen/runtime/PointerBufferSE.java b/src/java/com/jogamp/gluegen/runtime/PointerBufferSE.java
new file mode 100755
index 0000000..9c67dda
--- /dev/null
+++ b/src/java/com/jogamp/gluegen/runtime/PointerBufferSE.java
@@ -0,0 +1,92 @@
+/*
+ * Copyright (c) 2003 Sun Microsystems, Inc. All Rights Reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are
+ * met:
+ *
+ * - Redistribution of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ *
+ * - Redistribution in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ *
+ * Neither the name of Sun Microsystems, Inc. or the names of
+ * contributors may be used to endorse or promote products derived from
+ * this software without specific prior written permission.
+ *
+ * This software is provided "AS IS," without a warranty of any kind. ALL
+ * EXPRESS OR IMPLIED CONDITIONS, REPRESENTATIONS AND WARRANTIES,
+ * INCLUDING ANY IMPLIED WARRANTY OF MERCHANTABILITY, FITNESS FOR A
+ * PARTICULAR PURPOSE OR NON-INFRINGEMENT, ARE HEREBY EXCLUDED. SUN
+ * MICROSYSTEMS, INC. ("SUN") AND ITS LICENSORS SHALL NOT BE LIABLE FOR
+ * ANY DAMAGES SUFFERED BY LICENSEE AS A RESULT OF USING, MODIFYING OR
+ * DISTRIBUTING THIS SOFTWARE OR ITS DERIVATIVES. IN NO EVENT WILL SUN OR
+ * ITS LICENSORS BE LIABLE FOR ANY LOST REVENUE, PROFIT OR DATA, OR FOR
+ * DIRECT, INDIRECT, SPECIAL, CONSEQUENTIAL, INCIDENTAL OR PUNITIVE
+ * DAMAGES, HOWEVER CAUSED AND REGARDLESS OF THE THEORY OF LIABILITY,
+ * ARISING OUT OF THE USE OF OR INABILITY TO USE THIS SOFTWARE, EVEN IF
+ * SUN HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.
+ *
+ * You acknowledge that this software is not designed or intended for use
+ * in the design, construction, operation or maintenance of any nuclear
+ * facility.
+ */
+package com.jogamp.gluegen.runtime;
+
+import java.nio.*;
+
+/**
+ * @author Sven Gothel
+ * @author Michael Bien
+ */
+final class PointerBufferSE extends PointerBuffer {
+
+ private Buffer pb;
+
+ PointerBufferSE(ByteBuffer bb) {
+ super(bb);
+
+ if (CPU.is32Bit()) {
+ this.pb = bb.asIntBuffer();
+ } else {
+ this.pb = bb.asLongBuffer();
+ }
+
+ capacity = bb.capacity() / elementSize();
+
+ position = 0;
+ backup = new long[capacity];
+ }
+
+ public long get(int idx) {
+ if (0 > idx || idx >= capacity) {
+ throw new IndexOutOfBoundsException();
+ }
+ if (CPU.is32Bit()) {
+ return ((IntBuffer) pb).get(idx);
+ } else {
+ return ((LongBuffer) pb).get(idx);
+ }
+ }
+
+ public PointerBuffer put(int idx, long v) {
+ if (0 > idx || idx >= capacity) {
+ throw new IndexOutOfBoundsException();
+ }
+ backup[idx] = v;
+ if (CPU.is32Bit()) {
+ ((IntBuffer) pb).put(idx, (int) v);
+ } else {
+ ((LongBuffer) pb).put(idx, v);
+ }
+ return this;
+ }
+
+ public PointerBuffer put(long v) {
+ put(position, v);
+ position++;
+ return this;
+ }
+}
diff --git a/src/java/com/jogamp/gluegen/runtime/StructAccessor.java b/src/java/com/jogamp/gluegen/runtime/StructAccessor.java
index 4101571..80673a3 100755..100644
--- a/src/java/com/jogamp/gluegen/runtime/StructAccessor.java
+++ b/src/java/com/jogamp/gluegen/runtime/StructAccessor.java
@@ -36,221 +36,291 @@
* Sun gratefully acknowledges that this software was originally authored
* and developed by Kenneth Bradley Russell and Christopher John Kline.
*/
-
package com.jogamp.gluegen.runtime;
import java.nio.*;
+/**
+ * @author Kenneth Russel
+ * @author Michael Bien
+ */
public class StructAccessor {
- private ByteBuffer bb;
- private CharBuffer cb;
- private DoubleBuffer db;
- private FloatBuffer fb;
- private IntBuffer ib;
- private LongBuffer lb;
- private ShortBuffer sb;
-
- public StructAccessor(ByteBuffer bb) {
- // Setting of byte order is concession to native code which needs
- // to instantiate these
- this.bb = bb.order(ByteOrder.nativeOrder());
- }
-
- public ByteBuffer getBuffer() {
- return bb;
- }
-
- /** Return a slice of the current ByteBuffer starting at the
- specified byte offset and extending the specified number of
- bytes. Note that this method is not thread-safe with respect to
- the other methods in this class. */
- public ByteBuffer slice(int byteOffset, int byteLength) {
- bb.position(byteOffset);
- bb.limit(byteOffset + byteLength);
- ByteBuffer newBuf = bb.slice();
- bb.position(0);
- bb.limit(bb.capacity());
- return newBuf;
- }
-
- /** Retrieves the byte at the specified slot (byte offset). */
- public byte getByteAt(int slot) {
- return bb.get(slot);
- }
-
- /** Puts a byte at the specified slot (byte offset). */
- public void setByteAt(int slot, byte v) {
- bb.put(slot, v);
- }
-
- /** Retrieves the char at the specified slot (2-byte offset). */
- public char getCharAt(int slot) {
- return charBuffer().get(slot);
- }
-
- /** Puts a char at the specified slot (2-byte offset). */
- public void setCharAt(int slot, char v) {
- charBuffer().put(slot, v);
- }
-
- /** Retrieves the double at the specified slot (8-byte offset). */
- public double getDoubleAt(int slot) {
- return doubleBuffer().get(slot);
- }
-
- /** Puts a double at the specified slot (8-byte offset). */
- public void setDoubleAt(int slot, double v) {
- doubleBuffer().put(slot, v);
- }
-
- /** Retrieves the float at the specified slot (4-byte offset). */
- public float getFloatAt(int slot) {
- return floatBuffer().get(slot);
- }
-
- /** Puts a float at the specified slot (4-byte offset). */
- public void setFloatAt(int slot, float v) {
- floatBuffer().put(slot, v);
- }
-
- /** Retrieves the int at the specified slot (4-byte offset). */
- public int getIntAt(int slot) {
- return intBuffer().get(slot);
- }
-
- /** Puts a int at the specified slot (4-byte offset). */
- public void setIntAt(int slot, int v) {
- intBuffer().put(slot, v);
- }
-
- /** Retrieves the long at the specified slot (8-byte offset). */
- public long getLongAt(int slot) {
- return longBuffer().get(slot);
- }
-
- /** Puts a long at the specified slot (8-byte offset). */
- public void setLongAt(int slot, long v) {
- longBuffer().put(slot, v);
- }
-
- /** Retrieves the short at the specified slot (2-byte offset). */
- public short getShortAt(int slot) {
- return shortBuffer().get(slot);
- }
-
- /** Puts a short at the specified slot (2-byte offset). */
- public void setShortAt(int slot, short v) {
- shortBuffer().put(slot, v);
- }
-
- public void setBytesAt(int slot, byte[] v) {
- for (int i = 0; i < v.length; i++) {
- bb.put(slot++, v[i]);
- }
- }
-
- public byte[] getBytesAt(int slot, byte[] v) {
- for (int i = 0; i < v.length; i++) {
- v[i] = bb.get(slot++);
- }
- return v;
- }
-
- public void setCharsAt(int slot, char[] v) {
- for (int i = 0; i < v.length; i++) {
- charBuffer().put(slot++, v[i]);
- }
- }
-
- public char[] getCharsAt(int slot, char[] v) {
- for (int i = 0; i < v.length; i++) {
- v[i] = charBuffer().get(slot++);
- }
- return v;
- }
-
- public void setIntsAt(int slot, int[] v) {
- for (int i = 0; i < v.length; i++) {
- intBuffer().put(slot++, v[i]);
- }
- }
-
- public int[] getIntsAt(int slot, int[] v) {
- for (int i = 0; i < v.length; i++) {
- v[i] = intBuffer().get(slot++);
- }
- return v;
- }
-
- public void setFloatsAt(int slot, float[] v) {
- for (int i = 0; i < v.length; i++) {
- floatBuffer().put(slot++, v[i]);
- }
- }
-
- public float[] getFloatsAt(int slot, float[] v) {
- for (int i = 0; i < v.length; i++) {
- v[i] = floatBuffer().get(slot++);
- }
- return v;
- }
-
- public void setDoublesAt(int slot, double[] v) {
- for (int i = 0; i < v.length; i++) {
- doubleBuffer().put(slot++, v[i]);
- }
- }
-
- public double[] getDoublesAt(int slot, double[] v) {
- for (int i = 0; i < v.length; i++) {
- v[i] = doubleBuffer().get(slot++);
- }
- return v;
- }
-
- //----------------------------------------------------------------------
- // Internals only below this point
- //
-
- private CharBuffer charBuffer() {
- if (cb == null) {
- cb = bb.asCharBuffer();
- }
- return cb;
- }
-
- private DoubleBuffer doubleBuffer() {
- if (db == null) {
- db = bb.asDoubleBuffer();
- }
- return db;
- }
-
- private FloatBuffer floatBuffer() {
- if (fb == null) {
- fb = bb.asFloatBuffer();
- }
- return fb;
- }
-
- private IntBuffer intBuffer() {
- if (ib == null) {
- ib = bb.asIntBuffer();
- }
- return ib;
- }
-
- private LongBuffer longBuffer() {
- if (lb == null) {
- lb = bb.asLongBuffer();
- }
- return lb;
- }
-
- private ShortBuffer shortBuffer() {
- if (sb == null) {
- sb = bb.asShortBuffer();
- }
- return sb;
- }
+
+ private ByteBuffer bb;
+ private FloatBuffer fb;
+ private IntBuffer ib;
+ private ShortBuffer sb;
+
+ //Java SE only
+ private CharBuffer cb;
+ private DoubleBuffer db;
+ private LongBuffer lb;
+
+ public StructAccessor(ByteBuffer bb) {
+ // Setting of byte order is concession to native code which needs
+ // to instantiate these
+ if(Platform.isJavaSE()) {
+ this.bb = bb.order(ByteOrder.nativeOrder());
+ }else{
+ // JSR 239 does not support the ByteOrder class or the order methods.
+ // The initial order of a byte buffer is the platform byte order.
+ this.bb = bb;
+ }
+ }
+
+ public ByteBuffer getBuffer() {
+ return bb;
+ }
+
+ /**
+ * Returns a slice of the current ByteBuffer starting at the
+ * specified byte offset and extending the specified number of
+ * bytes. Note that this method is not thread-safe with respect to
+ * the other methods in this class.
+ */
+ public ByteBuffer slice(int byteOffset, int byteLength) {
+ bb.position(byteOffset);
+ bb.limit(byteOffset + byteLength);
+ ByteBuffer newBuf = bb.slice();
+ bb.position(0);
+ bb.limit(bb.capacity());
+ return newBuf;
+ }
+
+ /** Retrieves the byte at the specified slot (byte offset). */
+ public byte getByteAt(int slot) {
+ return bb.get(slot);
+ }
+
+ /** Puts a byte at the specified slot (byte offset). */
+ public void setByteAt(int slot, byte v) {
+ bb.put(slot, v);
+ }
+
+ /** Retrieves the char at the specified slot (2-byte offset). */
+ public char getCharAt(int slot) {
+ return charBuffer().get(slot);
+ }
+
+ /** Puts a char at the specified slot (2-byte offset). */
+ public void setCharAt(int slot, char v) {
+ charBuffer().put(slot, v);
+ }
+
+ /** Retrieves the double at the specified slot (8-byte offset). */
+ public double getDoubleAt(int slot) {
+ return doubleBuffer().get(slot);
+ }
+
+ /** Puts a double at the specified slot (8-byte offset). */
+ public void setDoubleAt(int slot, double v) {
+ doubleBuffer().put(slot, v);
+ }
+
+ /** Retrieves the float at the specified slot (4-byte offset). */
+ public float getFloatAt(int slot) {
+ return floatBuffer().get(slot);
+ }
+
+ /** Puts a float at the specified slot (4-byte offset). */
+ public void setFloatAt(int slot, float v) {
+ floatBuffer().put(slot, v);
+ }
+
+ /** Retrieves the int at the specified slot (4-byte offset). */
+ public int getIntAt(int slot) {
+ return intBuffer().get(slot);
+ }
+
+ /** Puts a int at the specified slot (4-byte offset). */
+ public void setIntAt(int slot, int v) {
+ intBuffer().put(slot, v);
+ }
+
+ /** Retrieves the short at the specified slot (2-byte offset). */
+ public short getShortAt(int slot) {
+ return shortBuffer().get(slot);
+ }
+
+ /** Puts a short at the specified slot (2-byte offset). */
+ public void setShortAt(int slot, short v) {
+ shortBuffer().put(slot, v);
+ }
+
+ public void setBytesAt(int slot, byte[] v) {
+ for (int i = 0; i < v.length; i++) {
+ bb.put(slot++, v[i]);
+ }
+ }
+
+ public byte[] getBytesAt(int slot, byte[] v) {
+ for (int i = 0; i < v.length; i++) {
+ v[i] = bb.get(slot++);
+ }
+ return v;
+ }
+
+ public void setCharsAt(int slot, char[] v) {
+ for (int i = 0; i < v.length; i++) {
+ charBuffer().put(slot++, v[i]);
+ }
+ }
+
+ public char[] getCharsAt(int slot, char[] v) {
+ for (int i = 0; i < v.length; i++) {
+ v[i] = charBuffer().get(slot++);
+ }
+ return v;
+ }
+
+ public void setIntsAt(int slot, int[] v) {
+ for (int i = 0; i < v.length; i++) {
+ intBuffer().put(slot++, v[i]);
+ }
+ }
+
+ public int[] getIntsAt(int slot, int[] v) {
+ for (int i = 0; i < v.length; i++) {
+ v[i] = intBuffer().get(slot++);
+ }
+ return v;
+ }
+
+ public void setFloatsAt(int slot, float[] v) {
+ for (int i = 0; i < v.length; i++) {
+ floatBuffer().put(slot++, v[i]);
+ }
+ }
+
+ public float[] getFloatsAt(int slot, float[] v) {
+ for (int i = 0; i < v.length; i++) {
+ v[i] = floatBuffer().get(slot++);
+ }
+ return v;
+ }
+
+ /**
+ * Puts a double at the specified slot (8-byte offset).
+ * May throw an {@link UnsupportedOperationException}
+ */
+ public void setDoublesAt(int slot, double[] v) {
+ for (int i = 0; i < v.length; i++) {
+ doubleBuffer().put(slot++, v[i]);
+ }
+ }
+
+ /**
+ * Retrieves the long at the specified slot (8-byte offset).
+ * May throw an {@link UnsupportedOperationException}
+ */
+ public double[] getDoublesAt(int slot, double[] v) {
+ for (int i = 0; i < v.length; i++) {
+ v[i] = doubleBuffer().get(slot++);
+ }
+ return v;
+ }
+
+ /**
+ * Retrieves the long at the specified slot (8-byte offset).
+ */
+ public long getLongAt(int slot) {
+ if(Platform.isJavaSE()){
+ return longBuffer().get(slot);
+ }else{
+ return getLongCDCAt(slot);
+ }
+ }
+
+ /**
+ * Puts a long at the specified slot (8-byte offset).
+ */
+ public void setLongAt(int slot, long v) {
+ if(Platform.isJavaSE()){
+ longBuffer().put(slot, v);
+ }else{
+ setLongCDCAt(slot, v);
+ }
+ }
+
+ //----------------------------------------------------------------------
+ // Internals only below this point
+ //
+
+ private final long getLongCDCAt(int slot) {
+ slot = slot << 1; // 8-byte to 4-byte offset
+ IntBuffer intBuffer = intBuffer();
+ long lo = 0x00000000FFFFFFFFL & ((long) intBuffer.get(slot));
+ long hi = 0x00000000FFFFFFFFL & ((long) intBuffer.get(slot + 1));
+ if (BufferFactory.isLittleEndian()) {
+ return hi << 32 | lo;
+ }
+ return lo << 32 | hi;
+ }
+
+ private final void setLongCDCAt(int slot, long v) {
+ slot = slot << 1; // 8-byte to 4-byte offset
+ IntBuffer intBuffer = intBuffer();
+ int lo = (int) ((v) & 0x00000000FFFFFFFFL);
+ int hi = (int) ((v >> 32) & 0x00000000FFFFFFFFL);
+ if (BufferFactory.isLittleEndian()) {
+ intBuffer.put(slot, lo);
+ intBuffer.put(slot + 1, hi);
+ } else {
+ intBuffer.put(slot, hi);
+ intBuffer.put(slot + 1, lo);
+ }
+ }
+
+ private final FloatBuffer floatBuffer() {
+ if (fb == null) {
+ fb = bb.asFloatBuffer();
+ }
+ return fb;
+ }
+
+ private final IntBuffer intBuffer() {
+ if (ib == null) {
+ ib = bb.asIntBuffer();
+ }
+ return ib;
+ }
+
+ private final ShortBuffer shortBuffer() {
+ if (sb == null) {
+ sb = bb.asShortBuffer();
+ }
+ return sb;
+ }
+
+ // - - Java SE only - -
+
+ private final LongBuffer longBuffer() {
+ checkSE();
+ if (lb == null) {
+ lb = bb.asLongBuffer();
+ }
+ return lb;
+ }
+
+ private final DoubleBuffer doubleBuffer() {
+ checkSE();
+ if (db == null) {
+ db = bb.asDoubleBuffer();
+ }
+ return db;
+ }
+
+ private final CharBuffer charBuffer() {
+ checkSE();
+ if (cb == null) {
+ cb = bb.asCharBuffer();
+ }
+ return cb;
+ }
+
+ private static void checkSE() {
+ if (!Platform.isJavaSE()) {
+ throw new UnsupportedOperationException("I am affraid, this Operation is not supportet on this platform.");
+ }
+ }
}
diff --git a/src/java/com/jogamp/gluegen/runtime/StructAccessor.java.javame_cdc_fp b/src/java/com/jogamp/gluegen/runtime/StructAccessor.java.javame_cdc_fp
deleted file mode 100755
index 28a8339..0000000
--- a/src/java/com/jogamp/gluegen/runtime/StructAccessor.java.javame_cdc_fp
+++ /dev/null
@@ -1,201 +0,0 @@
-/*
- * Copyright (c) 2003 Sun Microsystems, Inc. All Rights Reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions are
- * met:
- *
- * - Redistribution of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- *
- * - Redistribution in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- *
- * Neither the name of Sun Microsystems, Inc. or the names of
- * contributors may be used to endorse or promote products derived from
- * this software without specific prior written permission.
- *
- * This software is provided "AS IS," without a warranty of any kind. ALL
- * EXPRESS OR IMPLIED CONDITIONS, REPRESENTATIONS AND WARRANTIES,
- * INCLUDING ANY IMPLIED WARRANTY OF MERCHANTABILITY, FITNESS FOR A
- * PARTICULAR PURPOSE OR NON-INFRINGEMENT, ARE HEREBY EXCLUDED. SUN
- * MICROSYSTEMS, INC. ("SUN") AND ITS LICENSORS SHALL NOT BE LIABLE FOR
- * ANY DAMAGES SUFFERED BY LICENSEE AS A RESULT OF USING, MODIFYING OR
- * DISTRIBUTING THIS SOFTWARE OR ITS DERIVATIVES. IN NO EVENT WILL SUN OR
- * ITS LICENSORS BE LIABLE FOR ANY LOST REVENUE, PROFIT OR DATA, OR FOR
- * DIRECT, INDIRECT, SPECIAL, CONSEQUENTIAL, INCIDENTAL OR PUNITIVE
- * DAMAGES, HOWEVER CAUSED AND REGARDLESS OF THE THEORY OF LIABILITY,
- * ARISING OUT OF THE USE OF OR INABILITY TO USE THIS SOFTWARE, EVEN IF
- * SUN HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.
- *
- * You acknowledge that this software is not designed or intended for use
- * in the design, construction, operation or maintenance of any nuclear
- * facility.
- *
- * Sun gratefully acknowledges that this software was originally authored
- * and developed by Kenneth Bradley Russell and Christopher John Kline.
- */
-
-package com.jogamp.gluegen.runtime;
-
-import java.nio.*;
-
-public class StructAccessor {
- private ByteBuffer bb;
- private FloatBuffer fb;
- private IntBuffer ib;
- private ShortBuffer sb;
-
- public StructAccessor(ByteBuffer bb) {
- this.bb = bb;
- }
-
- public ByteBuffer getBuffer() {
- return bb;
- }
-
- /** Return a slice of the current ByteBuffer starting at the
- specified byte offset and extending the specified number of
- bytes. Note that this method is not thread-safe with respect to
- the other methods in this class. */
- public ByteBuffer slice(int byteOffset, int byteLength) {
- bb.position(byteOffset);
- bb.limit(byteOffset + byteLength);
- ByteBuffer newBuf = bb.slice();
- bb.position(0);
- bb.limit(bb.capacity());
- return newBuf;
- }
-
- /** Retrieves the byte at the specified slot (byte offset). */
- public byte getByteAt(int slot) {
- return bb.get(slot);
- }
-
- /** Puts a byte at the specified slot (byte offset). */
- public void setByteAt(int slot, byte v) {
- bb.put(slot, v);
- }
-
- /** Retrieves the float at the specified slot (4-byte offset). */
- public float getFloatAt(int slot) {
- return floatBuffer().get(slot);
- }
-
- /** Puts a float at the specified slot (4-byte offset). */
- public void setFloatAt(int slot, float v) {
- floatBuffer().put(slot, v);
- }
-
- /** Retrieves the int at the specified slot (4-byte offset). */
- public int getIntAt(int slot) {
- return intBuffer().get(slot);
- }
-
- /** Puts a int at the specified slot (4-byte offset). */
- public void setIntAt(int slot, int v) {
- intBuffer().put(slot, v);
- }
-
- public void setBytesAt(int slot, byte[] v) {
- for (int i = 0; i < v.length; i++) {
- bb.put(slot++, v[i]);
- }
- }
-
- public byte[] getBytesAt(int slot, byte[] v) {
- for (int i = 0; i < v.length; i++) {
- v[i] = bb.get(slot++);
- }
- return v;
- }
-
- public void setIntsAt(int slot, int[] v) {
- for (int i = 0; i < v.length; i++) {
- intBuffer().put(slot++, v[i]);
- }
- }
-
- public int[] getIntsAt(int slot, int[] v) {
- for (int i = 0; i < v.length; i++) {
- v[i] = intBuffer().get(slot++);
- }
- return v;
- }
-
- public void setFloatsAt(int slot, float[] v) {
- for (int i = 0; i < v.length; i++) {
- floatBuffer().put(slot++, v[i]);
- }
- }
-
- public float[] getFloatsAt(int slot, float[] v) {
- for (int i = 0; i < v.length; i++) {
- v[i] = floatBuffer().get(slot++);
- }
- return v;
- }
-
- /** Retrieves the long at the specified slot (8-byte offset). */
- public long getLongAt(int slot) {
- slot = slot << 1 ; // 8-byte to 4-byte offset
- IntBuffer intBuffer = intBuffer();
- long lo = 0x00000000FFFFFFFFL & ( (long) intBuffer.get(slot) );
- long hi = 0x00000000FFFFFFFFL & ( (long) intBuffer.get(slot+1) );
- if(BufferFactory.isLittleEndian()) {
- return hi << 32 | lo ;
- }
- return lo << 32 | hi ;
- }
-
- /** Puts a long at the specified slot (8-byte offset). */
- public void setLongAt(int slot, long v) {
- slot = slot << 1 ; // 8-byte to 4-byte offset
- IntBuffer intBuffer = intBuffer();
- int lo = (int) ( ( v ) & 0x00000000FFFFFFFFL ) ;
- int hi = (int) ( ( v >> 32 ) & 0x00000000FFFFFFFFL ) ;
- if(BufferFactory.isLittleEndian()) {
- intBuffer.put(slot, lo);
- intBuffer.put(slot+1, hi);
- } else {
- intBuffer.put(slot, hi);
- intBuffer.put(slot+1, lo);
- }
- }
-
- /** Retrieves the short at the specified slot (2-byte offset). */
- public short getShortAt(int slot) {
- return shortBuffer().get(slot);
- }
-
- /** Puts a short at the specified slot (2-byte offset). */
- public void setShortAt(int slot, short v) {
- shortBuffer().put(slot, v);
- }
-
- //----------------------------------------------------------------------
- // Internals only below this point
- //
-
- private FloatBuffer floatBuffer() {
- if (fb == null) {
- fb = bb.asFloatBuffer();
- }
- return fb;
- }
-
- private IntBuffer intBuffer() {
- if (ib == null) {
- ib = bb.asIntBuffer();
- }
- return ib;
- }
-
- private ShortBuffer shortBuffer() {
- if (sb == null) {
- sb = bb.asShortBuffer();
- }
- return sb;
- }
-}