001: /*
002: * $RCSfile: ByteBufferWrapper.java,v $
003: *
004: * Copyright (c) 2007 Sun Microsystems, Inc. All rights reserved.
005: *
006: * Redistribution and use in source and binary forms, with or without
007: * modification, are permitted provided that the following conditions
008: * are met:
009: *
010: * - Redistribution of source code must retain the above copyright
011: * notice, this list of conditions and the following disclaimer.
012: *
013: * - Redistribution in binary form must reproduce the above copyright
014: * notice, this list of conditions and the following disclaimer in
015: * the documentation and/or other materials provided with the
016: * distribution.
017: *
018: * Neither the name of Sun Microsystems, Inc. or the names of
019: * contributors may be used to endorse or promote products derived
020: * from this software without specific prior written permission.
021: *
022: * This software is provided "AS IS," without a warranty of any
023: * kind. ALL EXPRESS OR IMPLIED CONDITIONS, REPRESENTATIONS AND
024: * WARRANTIES, INCLUDING ANY IMPLIED WARRANTY OF MERCHANTABILITY,
025: * FITNESS FOR A PARTICULAR PURPOSE OR NON-INFRINGEMENT, ARE HEREBY
026: * EXCLUDED. SUN MICROSYSTEMS, INC. ("SUN") AND ITS LICENSORS SHALL
027: * NOT BE LIABLE FOR ANY DAMAGES SUFFERED BY LICENSEE AS A RESULT OF
028: * USING, MODIFYING OR DISTRIBUTING THIS SOFTWARE OR ITS
029: * DERIVATIVES. IN NO EVENT WILL SUN OR ITS LICENSORS BE LIABLE FOR
030: * ANY LOST REVENUE, PROFIT OR DATA, OR FOR DIRECT, INDIRECT, SPECIAL,
031: * CONSEQUENTIAL, INCIDENTAL OR PUNITIVE DAMAGES, HOWEVER CAUSED AND
032: * REGARDLESS OF THE THEORY OF LIABILITY, ARISING OUT OF THE USE OF OR
033: * INABILITY TO USE THIS SOFTWARE, EVEN IF SUN HAS BEEN ADVISED OF THE
034: * POSSIBILITY OF SUCH DAMAGES.
035: *
036: * You acknowledge that this software is not designed, licensed or
037: * intended for use in the design, construction, operation or
038: * maintenance of any nuclear facility.
039: *
040: * $Revision: 1.4 $
041: * $Date: 2007/02/09 17:20:05 $
042: * $State: Exp $
043: */
044:
045: package com.sun.j3d.internal;
046:
047: import javax.media.j3d.J3DBuffer;
048: import java.nio.ByteBuffer;
049: import java.nio.ByteOrder;
050:
051: /**
052: * NIO Buffers are new in Java 1.4 but we need to run on 1.3
053: * as well, so this class was created to hide the NIO classes
054: * from non-1.4 Java 3D users.
055: *
056: * <p>
057: * NOTE: We no longer need to support JDK 1.3 as of the Java 3D 1.3.2
058: * community source release on java.net. We should be able to get rid
059: * of this class.
060: */
061:
062: public class ByteBufferWrapper extends BufferWrapper {
063:
064: private ByteBuffer buffer = null;
065:
066: /**
067: * Constructor initializes buffer with a
068: * java.nio.ByteBuffer object.
069: */
070: public ByteBufferWrapper(ByteBuffer buffer) {
071: this .buffer = buffer;
072: }
073:
074: /**
075: * Constructor initializes buffer with a
076: * javax.media.j3d.J3DBuffer object.
077: */
078: public ByteBufferWrapper(J3DBuffer b) {
079: buffer = (ByteBuffer) (b.getBuffer());
080: }
081:
082: /**
083: * Allocate a direct ByteBuffer with the given capacity.
084: * @return New ByteBufferWrapper containing the
085: * new buffer.
086: */
087: public static ByteBufferWrapper allocateDirect(int capacity) {
088: ByteBuffer bb = ByteBuffer.allocateDirect(capacity);
089: return new ByteBufferWrapper(bb);
090: }
091:
092: /**
093: * Returns the java.nio.Buffer contained within this
094: * ByteBufferWrapper.
095: */
096: public java.nio.Buffer getBuffer() {
097: return this .buffer;
098: }
099:
100: // Wrapper for all relevant ByteBuffer methods.
101:
102: /**
103: * @return A boolean indicating whether the java.nio.Buffer
104: * object contained within this ByteBuffer is direct or
105: * indirect.
106: */
107: public boolean isDirect() {
108: return buffer.isDirect();
109: }
110:
111: /**
112: * Reads the byte at this buffer's current position,
113: * and then increments the position.
114: */
115: public byte get() {
116: return buffer.get();
117: }
118:
119: /**
120: * Reads the byte at the given offset into the buffer.
121: */
122: public byte get(int index) {
123: return buffer.get(index);
124: }
125:
126: /**
127: * Bulk <i>get</i> method. Transfers <code>dst.length</code>
128: * bytes from
129: * the buffer to the destination array and increments the
130: * buffer's position by <code>dst.length</code>.
131: */
132: public ByteBufferWrapper get(byte[] dst) {
133: buffer.get(dst);
134: return this ;
135: }
136:
137: /**
138: * Bulk <i>get</i> method. Transfers <i>length</i> bytes
139: * from the buffer starting at position <i>offset</i> into
140: * the destination array.
141: */
142: public ByteBufferWrapper get(byte[] dst, int offset, int length) {
143: buffer.get(dst, offset, length);
144: return this ;
145: }
146:
147: /**
148: * Returns the byte order of this buffer.
149: */
150: public ByteOrderWrapper order() {
151: if (buffer.order() == ByteOrder.BIG_ENDIAN)
152: return ByteOrderWrapper.BIG_ENDIAN;
153: else
154: return ByteOrderWrapper.LITTLE_ENDIAN;
155: }
156:
157: /**
158: * Modifies this buffer's byte order.
159: */
160: public ByteBufferWrapper order(ByteOrderWrapper bo) {
161: if (bo == ByteOrderWrapper.BIG_ENDIAN)
162: buffer.order(ByteOrder.BIG_ENDIAN);
163: else
164: buffer.order(ByteOrder.LITTLE_ENDIAN);
165: return this ;
166: }
167:
168: /**
169: * Creates a view of this ByteBufferWrapper as a
170: * FloatBufferWrapper. Uses the correct
171: */
172: public FloatBufferWrapper asFloatBuffer() {
173: return new FloatBufferWrapper(buffer.asFloatBuffer());
174: }
175:
176: /**
177: * Creates a view of this ByteBufferWrapper as a
178: * DoubleBufferWrapper.
179: */
180: public DoubleBufferWrapper asDoubleBuffer() {
181: return new DoubleBufferWrapper(buffer.asDoubleBuffer());
182: }
183:
184: /**
185: * Bulk <i>put</i> method. Transfers <code>src.length</code>
186: * bytes into the buffer at the current position.
187: */
188: public ByteBufferWrapper put(byte[] src) {
189: buffer.put(src);
190: return this ;
191: }
192:
193: /**
194: * Creates and returns a J3DBuffer object containing the
195: * buffer in this ByteBufferWrapper object.
196: */
197: public J3DBuffer getJ3DBuffer() {
198: return new J3DBuffer(buffer);
199: }
200: }
|