30import java.nio.ByteBuffer;
31import java.nio.ByteOrder;
35 private final ByteBuffer bb;
40 this.bb = bb.order(ByteOrder.nativeOrder());
53 public final ByteBuffer
slice(
final int byteOffset,
final int byteLength) {
54 bb.position(byteOffset);
55 bb.limit(byteOffset + byteLength);
56 final ByteBuffer newBuf = bb.slice().order(bb.order());
58 bb.limit(bb.capacity());
64 return bb.get(byteOffset);
68 public final void setByteAt(
final int byteOffset,
final byte v) {
69 bb.put(byteOffset, v);
74 return (
byte)0 != bb.get(byteOffset);
78 public final void setBooleanAt(
final int byteOffset,
final boolean v) {
79 bb.put(byteOffset, v?(
byte)1:(
byte)0);
84 return bb.getChar(byteOffset);
88 public final void setCharAt(
final int byteOffset,
final char v) {
89 bb.putChar(byteOffset, v);
94 return bb.getShort(byteOffset);
98 public final void setShortAt(
final int byteOffset,
final short v) {
99 bb.putShort(byteOffset, v);
104 return bb.getInt(byteOffset);
108 public final void setIntAt(
final int byteOffset,
final int v) {
109 bb.putInt(byteOffset, v);
113 public final int getIntAt(
final int byteOffset,
final int nativeSizeInBytes) {
114 switch(nativeSizeInBytes) {
116 return bb.getShort(byteOffset) & 0x0000FFFF ;
118 return bb.getInt(byteOffset);
120 return (
int) ( bb.getLong(byteOffset) & 0x00000000FFFFFFFFL ) ;
122 throw new InternalError(
"invalid nativeSizeInBytes "+nativeSizeInBytes);
127 public final void setIntAt(
final int byteOffset,
final int v,
final int nativeSizeInBytes) {
128 switch(nativeSizeInBytes) {
130 bb.putShort(byteOffset, (
short) ( v & 0x0000FFFF ) );
133 bb.putInt(byteOffset, v);
136 bb.putLong(byteOffset, v & 0x00000000FFFFFFFFL );
139 throw new InternalError(
"invalid nativeSizeInBytes "+nativeSizeInBytes);
145 return bb.getFloat(byteOffset);
149 public final void setFloatAt(
final int byteOffset,
final float v) {
150 bb.putFloat(byteOffset, v);
155 return bb.getDouble(byteOffset);
159 public final void setDoubleAt(
final int byteOffset,
final double v) {
160 bb.putDouble(byteOffset, v);
165 return bb.getLong(byteOffset);
169 public final void setLongAt(
final int byteOffset,
final long v) {
170 bb.putLong(byteOffset, v);
174 public final long getLongAt(
final int byteOffset,
final int nativeSizeInBytes) {
175 switch(nativeSizeInBytes) {
177 return bb.getInt(byteOffset) & 0x00000000FFFFFFFFL;
179 return bb.getLong(byteOffset);
181 throw new InternalError(
"invalid nativeSizeInBytes "+nativeSizeInBytes);
186 public final void setLongAt(
final int byteOffset,
final long v,
final int nativeSizeInBytes) {
187 switch(nativeSizeInBytes) {
189 bb.putInt(byteOffset, (
int) ( v & 0x00000000FFFFFFFFL ) );
192 bb.putLong(byteOffset, v);
195 throw new InternalError(
"invalid nativeSizeInBytes "+nativeSizeInBytes);
199 public final void setBytesAt(
int byteOffset,
final byte[] v) {
200 for (
int i = 0; i < v.length; i++) {
201 bb.put(byteOffset++, v[i]);
205 public final byte[]
getBytesAt(
int byteOffset,
final byte[] v) {
206 for (
int i = 0; i < v.length; i++) {
207 v[i] = bb.get(byteOffset++);
213 for (
int i = 0; i < v.length; i++) {
214 bb.put(byteOffset++, v[i]?(
byte)1:(
byte)0);
219 for (
int i = 0; i < v.length; i++) {
220 v[i] = (byte)0 != bb.get(byteOffset++);
225 public final void setCharsAt(
int byteOffset,
final char[] v) {
226 for (
int i = 0; i < v.length; i++, byteOffset+=2) {
227 bb.putChar(byteOffset, v[i]);
231 public final char[]
getCharsAt(
int byteOffset,
final char[] v) {
232 for (
int i = 0; i < v.length; i++, byteOffset+=2) {
233 v[i] = bb.getChar(byteOffset);
239 for (
int i = 0; i < v.length; i++, byteOffset+=2) {
240 bb.putShort(byteOffset, v[i]);
244 public final short[]
getShortsAt(
int byteOffset,
final short[] v) {
245 for (
int i = 0; i < v.length; i++, byteOffset+=2) {
246 v[i] = bb.getShort(byteOffset);
251 public final void setIntsAt(
int byteOffset,
final int[] v) {
252 for (
int i = 0; i < v.length; i++, byteOffset+=4) {
253 bb.putInt(byteOffset, v[i]);
257 public final int[]
getIntsAt(
int byteOffset,
final int[] v) {
258 for (
int i = 0; i < v.length; i++, byteOffset+=4) {
259 v[i] = bb.getInt(byteOffset);
265 for (
int i = 0; i < v.length; i++, byteOffset+=4) {
266 bb.putFloat(byteOffset, v[i]);
270 public final float[]
getFloatsAt(
int byteOffset,
final float[] v) {
271 for (
int i = 0; i < v.length; i++, byteOffset+=4) {
272 v[i] = bb.getFloat(byteOffset);
278 for (
int i = 0; i < v.length; i++, byteOffset+=8) {
279 bb.putDouble(byteOffset, v[i]);
284 for (
int i = 0; i < v.length; i++, byteOffset+=8) {
285 v[i] = bb.getDouble(byteOffset);
290 public final void setLongsAt(
int byteOffset,
final long[] v) {
291 for (
int i = 0; i < v.length; i++, byteOffset+=8) {
292 bb.putLong(byteOffset, v[i]);
296 public final long[]
getLongsAt(
int byteOffset,
final long[] v) {
297 for (
int i = 0; i < v.length; i++, byteOffset+=8) {
298 v[i] = bb.getLong(byteOffset);
final byte[] getBytesAt(int byteOffset, final byte[] v)
StructAccessor(final ByteBuffer bb)
final char[] getCharsAt(int byteOffset, final char[] v)
final ByteBuffer slice(final int byteOffset, final int byteLength)
Returns a slice of the current ByteBuffer starting at the specified byte offset and extending the spe...
final int getIntAt(final int byteOffset, final int nativeSizeInBytes)
Retrieves the int at the specified byteOffset.
final void setLongAt(final int byteOffset, final long v)
Puts a long at the specified byteOffset.
final char getCharAt(final int byteOffset)
Retrieves the char at the specified byteOffset.
final boolean[] getBooleansAt(int byteOffset, final boolean[] v)
final long getLongAt(final int byteOffset, final int nativeSizeInBytes)
Retrieves the long at the specified byteOffset.
final void setBooleansAt(int byteOffset, final boolean[] v)
final void setIntAt(final int byteOffset, final int v)
Puts a int at the specified byteOffset.
final void setFloatsAt(int byteOffset, final float[] v)
final void setShortsAt(int byteOffset, final short[] v)
final short[] getShortsAt(int byteOffset, final short[] v)
final void setIntsAt(int byteOffset, final int[] v)
final void setBooleanAt(final int byteOffset, final boolean v)
Puts a boolean at the specified byteOffset.
final void setCharsAt(int byteOffset, final char[] v)
final void setIntAt(final int byteOffset, final int v, final int nativeSizeInBytes)
Puts a int at the specified byteOffset.
final void setBytesAt(int byteOffset, final byte[] v)
final ByteBuffer getBuffer()
final float[] getFloatsAt(int byteOffset, final float[] v)
final short getShortAt(final int byteOffset)
Retrieves the short at the specified byteOffset.
final float getFloatAt(final int byteOffset)
Retrieves the float at the specified byteOffset.
final void setLongAt(final int byteOffset, final long v, final int nativeSizeInBytes)
Puts a long at the specified byteOffset.
final byte getByteAt(final int byteOffset)
Retrieves the byte at the specified byteOffset.
final void setShortAt(final int byteOffset, final short v)
Puts a short at the specified byteOffset.
final long[] getLongsAt(int byteOffset, final long[] v)
final int[] getIntsAt(int byteOffset, final int[] v)
final double getDoubleAt(final int byteOffset)
Retrieves the double at the specified byteOffset.
final double[] getDoublesAt(int byteOffset, final double[] v)
final void setFloatAt(final int byteOffset, final float v)
Puts a float at the specified byteOffset.
final void setByteAt(final int byteOffset, final byte v)
Puts a byte at the specified byteOffset.
final int getIntAt(final int byteOffset)
Retrieves the int at the specified byteOffset.
final boolean getBooleanAt(final int byteOffset)
Retrieves the boolean at the specified byteOffset.
final void setLongsAt(int byteOffset, final long[] v)
final void setCharAt(final int byteOffset, final char v)
Puts a char at the specified byteOffset.
final long getLongAt(final int byteOffset)
Retrieves the long at the specified byteOffset.
final void setDoublesAt(int byteOffset, final double[] v)
final void setDoubleAt(final int byteOffset, final double v)
Puts a double at the specified byteOffset.