diff options
author | Michael Bien <[email protected]> | 2010-03-28 18:37:59 +0200 |
---|---|---|
committer | Michael Bien <[email protected]> | 2010-03-28 18:37:59 +0200 |
commit | be3ddc922fda13c0ba344909b3639a2c78c4b809 (patch) | |
tree | 714b2b579927751a6266dcca72c3393e86ef53df /src/java/com/jogamp/gluegen/runtime/PointerBuffer.java | |
parent | cfe3dcb64d8ddfc941151a2907976adeaec36320 (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/runtime/PointerBuffer.java')
-rw-r--r--[-rwxr-xr-x] | src/java/com/jogamp/gluegen/runtime/PointerBuffer.java | 252 |
1 files changed, 119 insertions, 133 deletions
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); + } |