40package com.jogamp.common.nio;
42import java.lang.reflect.Method;
43import java.nio.Buffer;
44import java.nio.ByteBuffer;
45import java.nio.ByteOrder;
46import java.nio.CharBuffer;
47import java.nio.DoubleBuffer;
48import java.nio.FloatBuffer;
49import java.nio.IntBuffer;
50import java.nio.LongBuffer;
51import java.nio.ShortBuffer;
52import java.security.PrivilegedAction;
54import com.jogamp.common.ExceptionUtils;
55import com.jogamp.common.util.ReflectionUtil;
56import com.jogamp.common.util.SecurityUtil;
57import com.jogamp.common.util.UnsafeUtil;
58import com.jogamp.common.util.ValueConv;
60import jogamp.common.Debug;
61import jogamp.common.os.PlatformPropsImpl;
72 static final boolean DEBUG;
74 DEBUG = Debug.debug(
"Buffers");
93 return nativeOrder(ByteBuffer.allocateDirect(numElements));
96 public static ByteBuffer
newDirectByteBuffer(
final byte[] values,
final int offset,
final int length) {
240 return buf.order(ByteOrder.nativeOrder());
250 if (typeName ==
null) {
253 if(
"byte".equals(typeName) ) {
254 return ByteBuffer.class;
255 }
else if(
"short".equals(typeName) ) {
256 return ShortBuffer.class;
257 }
else if(
"char".equals(typeName) ) {
258 return CharBuffer.class;
259 }
else if(
"int".equals(typeName) ) {
260 return IntBuffer.class;
261 }
else if(
"float".equals(typeName) ) {
262 return FloatBuffer.class;
263 }
else if(
"long".equals(typeName) ) {
264 return LongBuffer.class;
265 }
else if(
"double".equals(typeName) ) {
266 return DoubleBuffer.class;
278 if (bufferClz ==
null) {
281 if (ByteBuffer.class.isAssignableFrom(bufferClz)) {
283 }
else if (ShortBuffer.class.isAssignableFrom(bufferClz)) {
285 }
else if (CharBuffer.class.isAssignableFrom(bufferClz)) {
287 }
else if (IntBuffer.class.isAssignableFrom(bufferClz)) {
289 }
else if (FloatBuffer.class.isAssignableFrom(bufferClz)) {
291 }
else if (LongBuffer.class.isAssignableFrom(bufferClz)) {
293 }
else if (DoubleBuffer.class.isAssignableFrom(bufferClz)) {
296 throw new RuntimeException(
"Unexpected buffer type " + bufferClz.getName());
305 if (buffer ==
null) {
308 if (buffer instanceof ByteBuffer) {
310 }
else if (buffer instanceof IntBuffer) {
312 }
else if (buffer instanceof ShortBuffer) {
314 }
else if (buffer instanceof FloatBuffer) {
316 }
else if (buffer instanceof DoubleBuffer) {
318 }
else if (buffer instanceof LongBuffer) {
320 }
else if (buffer instanceof CharBuffer) {
325 throw new RuntimeException(
"Unexpected buffer type " + buffer.getClass().getName());
335 public static int remainingElem(
final Object buffer)
throws IllegalArgumentException {
336 if (buffer ==
null) {
339 if (buffer instanceof Buffer) {
340 return ((Buffer) buffer).remaining();
344 throw new IllegalArgumentException(
"Unsupported anonymous buffer type: "+buffer.getClass().getCanonicalName());
355 public static int remainingBytes(
final Object buffer)
throws IllegalArgumentException {
356 if (buffer ==
null) {
359 final int bytesRemaining;
360 if (buffer instanceof Buffer) {
361 final int elementsRemaining = ((Buffer) buffer).remaining();
362 if (buffer instanceof ByteBuffer) {
363 bytesRemaining = elementsRemaining;
364 }
else if (buffer instanceof FloatBuffer) {
366 }
else if (buffer instanceof IntBuffer) {
367 bytesRemaining = elementsRemaining *
SIZEOF_INT;
368 }
else if (buffer instanceof ShortBuffer) {
370 }
else if (buffer instanceof DoubleBuffer) {
372 }
else if (buffer instanceof LongBuffer) {
374 }
else if (buffer instanceof CharBuffer) {
377 throw new InternalError(
"Unsupported Buffer type: "+buffer.getClass().getCanonicalName());
383 throw new IllegalArgumentException(
"Unsupported anonymous buffer type: "+buffer.getClass().getCanonicalName());
385 return bytesRemaining;
396 if (buf instanceof Buffer) {
397 return ((Buffer) buf).isDirect();
401 throw new IllegalArgumentException(
"Unexpected buffer type " + buf.getClass().getName());
413 if (buf instanceof Buffer) {
414 final int pos = ((Buffer) buf).position();
415 if (buf instanceof ByteBuffer) {
417 }
else if (buf instanceof FloatBuffer) {
419 }
else if (buf instanceof IntBuffer) {
421 }
else if (buf instanceof ShortBuffer) {
423 }
else if (buf instanceof DoubleBuffer) {
425 }
else if (buf instanceof LongBuffer) {
427 }
else if (buf instanceof CharBuffer) {
435 throw new IllegalArgumentException(
"Disallowed array backing store type in buffer " + buf.getClass().getName());
444 public static Object
getArray(
final Object buf)
throws UnsupportedOperationException, IllegalArgumentException {
448 if (buf instanceof Buffer) {
449 return ((Buffer) buf).array();
454 throw new IllegalArgumentException(
"Disallowed array backing store type in buffer " + buf.getClass().getName());
467 if (buf instanceof Buffer) {
468 final int pos = ((Buffer) buf).position();
469 if (buf instanceof ByteBuffer) {
470 return (((ByteBuffer) buf).arrayOffset() + pos);
471 }
else if (buf instanceof FloatBuffer) {
472 return (
SIZEOF_FLOAT * (((FloatBuffer) buf).arrayOffset() + pos));
473 }
else if (buf instanceof IntBuffer) {
474 return (
SIZEOF_INT * (((IntBuffer) buf).arrayOffset() + pos));
475 }
else if (buf instanceof ShortBuffer) {
476 return (
SIZEOF_SHORT * (((ShortBuffer) buf).arrayOffset() + pos));
477 }
else if (buf instanceof DoubleBuffer) {
478 return (
SIZEOF_DOUBLE * (((DoubleBuffer) buf).arrayOffset() + pos));
479 }
else if (buf instanceof LongBuffer) {
480 return (
SIZEOF_LONG * (((LongBuffer) buf).arrayOffset() + pos));
481 }
else if (buf instanceof CharBuffer) {
482 return (
SIZEOF_CHAR * (((CharBuffer) buf).arrayOffset() + pos));
489 throw new IllegalArgumentException(
"Unknown buffer type " + buf.getClass().getName());
500 @SuppressWarnings(
"unchecked")
501 public static <B extends Buffer> B
slice(final B buffer) {
502 if (buffer instanceof ByteBuffer) {
503 final ByteBuffer bb = (ByteBuffer) buffer;
504 return (B) bb.slice().order(bb.order());
505 }
else if (buffer instanceof IntBuffer) {
506 return (B) ((IntBuffer) buffer).slice();
507 }
else if (buffer instanceof ShortBuffer) {
508 return (B) ((ShortBuffer) buffer).slice();
509 }
else if (buffer instanceof FloatBuffer) {
510 return (B) ((FloatBuffer) buffer).slice();
511 }
else if (buffer instanceof DoubleBuffer) {
512 return (B) ((DoubleBuffer) buffer).slice();
513 }
else if (buffer instanceof LongBuffer) {
514 return (B) ((LongBuffer) buffer).slice();
515 }
else if (buffer instanceof CharBuffer) {
516 return (B) ((CharBuffer) buffer).slice();
518 throw new IllegalArgumentException(
"unexpected buffer type: " + buffer.getClass());
527 public static <B extends Buffer> B
slice(
final B buffer,
final int offset,
final int size) {
528 final int pos = buffer.position();
529 final int limit = buffer.limit();
533 buffer.position(offset).limit(offset+size);
536 buffer.position(pos).limit(limit);
565 public static final FloatBuffer
slice2Float(
final Buffer buf,
final int elementStartPos,
final int elementCount) {
567 throw new IllegalArgumentException(
"Buffer is null");
569 final int pos = buf.position();
570 final int limit = buf.limit();
571 final FloatBuffer res;
573 if(buf instanceof ByteBuffer) {
574 final ByteBuffer bb = (ByteBuffer) buf;
576 bb.limit( (elementStartPos + elementCount) * Buffers.SIZEOF_FLOAT );
577 res = bb.slice().order(bb.order()).asFloatBuffer();
578 }
else if(buf instanceof FloatBuffer) {
579 final FloatBuffer fb = (FloatBuffer) buf;
580 fb.position( elementStartPos );
581 fb.limit( elementStartPos + elementCount );
584 throw new IllegalArgumentException(
"Buffer not ByteBuffer, nor FloarBuffer, nor backing array given");
587 buf.position(pos).limit(limit);
613 public static final FloatBuffer
slice2Float(
final float[] backing,
final int elementStartPos,
final int elementCount) {
614 return (FloatBuffer) FloatBuffer.wrap(backing, elementStartPos, elementCount).mark();
634 public static final ShortBuffer
slice2Short(
final Buffer buf,
final int elementStartPos,
final int elementCount) {
636 throw new IllegalArgumentException(
"Buffer is null");
638 final int pos = buf.position();
639 final int limit = buf.limit();
640 final ShortBuffer res;
642 if(buf instanceof ByteBuffer) {
643 final ByteBuffer bb = (ByteBuffer) buf;
645 bb.limit( (elementStartPos + elementCount) * Buffers.SIZEOF_SHORT );
646 res = bb.slice().order(bb.order()).asShortBuffer();
647 }
else if(buf instanceof ShortBuffer) {
648 final ShortBuffer fb = (ShortBuffer) buf;
649 fb.position( elementStartPos );
650 fb.limit( elementStartPos + elementCount );
653 throw new IllegalArgumentException(
"Buffer not ByteBuffer, nor ShortBuffer");
656 buf.position(pos).limit(limit);
673 public static final ShortBuffer
slice2Short(
final short[] backing,
final int elementStartPos,
final int elementCount) {
674 return (ShortBuffer) ShortBuffer.wrap(backing, elementStartPos, elementCount).mark();
694 public static final CharBuffer
slice2Char(
final Buffer buf,
final int elementStartPos,
final int elementCount) {
696 throw new IllegalArgumentException(
"Buffer is null");
698 final int pos = buf.position();
699 final int limit = buf.limit();
700 final CharBuffer res;
702 if(buf instanceof ByteBuffer) {
703 final ByteBuffer bb = (ByteBuffer) buf;
705 bb.limit( (elementStartPos + elementCount) * Buffers.SIZEOF_CHAR );
706 res = bb.slice().order(bb.order()).asCharBuffer();
707 }
else if(buf instanceof CharBuffer) {
708 final CharBuffer fb = (CharBuffer) buf;
709 fb.position( elementStartPos );
710 fb.limit( elementStartPos + elementCount );
713 throw new IllegalArgumentException(
"Buffer not ByteBuffer, nor CharBuffer");
716 buf.position(pos).limit(limit);
733 public static final CharBuffer
slice2Char(
final char[] backing,
final int elementStartPos,
final int elementCount) {
734 return (CharBuffer) CharBuffer.wrap(backing, elementStartPos, elementCount).mark();
754 public static final IntBuffer
slice2Int(
final Buffer buf,
final int elementStartPos,
final int elementCount) {
756 throw new IllegalArgumentException(
"Buffer is null");
758 final int pos = buf.position();
759 final int limit = buf.limit();
762 if(buf instanceof ByteBuffer) {
763 final ByteBuffer bb = (ByteBuffer) buf;
765 bb.limit( (elementStartPos + elementCount) * Buffers.SIZEOF_INT );
766 res = bb.slice().order(bb.order()).asIntBuffer();
767 }
else if(buf instanceof IntBuffer) {
768 final IntBuffer fb = (IntBuffer) buf;
769 fb.position( elementStartPos );
770 fb.limit( elementStartPos + elementCount );
773 throw new IllegalArgumentException(
"Buffer not ByteBuffer, nor IntBuffer");
776 buf.position(pos).limit(limit);
793 public static final IntBuffer
slice2Int(
final int[] backing,
final int elementStartPos,
final int elementCount) {
794 return (IntBuffer) IntBuffer.wrap(backing, elementStartPos, elementCount).mark();
814 public static final LongBuffer
slice2Long(
final Buffer buf,
final int elementStartPos,
final int elementCount) {
816 throw new IllegalArgumentException(
"Buffer is null");
818 final int pos = buf.position();
819 final int limit = buf.limit();
820 final LongBuffer res;
822 if(buf instanceof ByteBuffer) {
823 final ByteBuffer bb = (ByteBuffer) buf;
825 bb.limit( (elementStartPos + elementCount) * Buffers.SIZEOF_LONG );
826 res = bb.slice().order(bb.order()).asLongBuffer();
827 }
else if(buf instanceof LongBuffer) {
828 final LongBuffer fb = (LongBuffer) buf;
829 fb.position( elementStartPos );
830 fb.limit( elementStartPos + elementCount );
833 throw new IllegalArgumentException(
"Buffer not ByteBuffer, nor LongBuffer");
836 buf.position(pos).limit(limit);
853 public static final LongBuffer
slice2Long(
final long[] backing,
final int elementStartPos,
final int elementCount) {
854 return (LongBuffer) LongBuffer.wrap(backing, elementStartPos, elementCount).mark();
874 public static final DoubleBuffer
slice2Double(
final Buffer buf,
final int elementStartPos,
final int elementCount) {
876 throw new IllegalArgumentException(
"Buffer is null");
878 final int pos = buf.position();
879 final int limit = buf.limit();
880 final DoubleBuffer res;
882 if(buf instanceof ByteBuffer) {
883 final ByteBuffer bb = (ByteBuffer) buf;
885 bb.limit( (elementStartPos + elementCount) * Buffers.SIZEOF_DOUBLE );
886 res = bb.slice().order(bb.order()).asDoubleBuffer();
887 }
else if(buf instanceof DoubleBuffer) {
888 final DoubleBuffer fb = (DoubleBuffer) buf;
889 fb.position( elementStartPos );
890 fb.limit( elementStartPos + elementCount );
893 throw new IllegalArgumentException(
"Buffer not ByteBuffer, nor DoubleBuffer");
896 buf.position(pos).limit(limit);
913 public static final DoubleBuffer
slice2Double(
final double[] backing,
final int elementStartPos,
final int elementCount) {
914 return (DoubleBuffer) DoubleBuffer.wrap(backing, elementStartPos, elementCount).mark();
928 final int op0 = orig.position();
984 final int op0 = orig.position();
986 dest.asFloatBuffer().put(orig);
1001 final int op0 = orig.position();
1003 dest.asIntBuffer().put(orig);
1018 final int op0 = orig.position();
1020 dest.asShortBuffer().put(orig);
1038 public static float[]
getFloatArray(
final double[] source,
final int soffset,
float[] dest,
int doffset,
int len) {
1040 len = source.length - soffset;
1042 if(len > source.length - soffset) {
1043 throw new IllegalArgumentException(
"payload ("+len+
") greater than remaining source bytes [len "+source.length+
", offset "+soffset+
"]");
1046 dest =
new float[len];
1049 if(len > dest.length - doffset) {
1050 throw new IllegalArgumentException(
"payload ("+len+
") greater than remaining dest bytes [len "+dest.length+
", offset "+doffset+
"]");
1052 for(
int i=0; i<len; i++) {
1053 dest[doffset+i] = (float) source[soffset+i];
1064 public static FloatBuffer
getFloatBuffer(
final DoubleBuffer source, FloatBuffer dest) {
1068 if( dest.remaining() < source.remaining() ) {
1069 throw new IllegalArgumentException(
"payload ("+source.remaining()+
") is greater than remaining dest bytes: "+dest.remaining());
1071 while (source.hasRemaining()) {
1072 dest.put((
float) source.get());
1085 public static double[]
getDoubleArray(
final float[] source,
final int soffset,
double[] dest,
int doffset,
int len) {
1087 len = source.length - soffset;
1089 if(len > source.length - soffset) {
1090 throw new IllegalArgumentException(
"payload ("+len+
") greater than remaining source bytes [len "+source.length+
", offset "+soffset+
"]");
1093 dest =
new double[len];
1096 if(len > dest.length - doffset) {
1097 throw new IllegalArgumentException(
"payload ("+len+
") greater than remaining dest bytes [len "+dest.length+
", offset "+doffset+
"]");
1099 for(
int i=0; i<len; i++) {
1100 dest[doffset+i] = source[soffset+i];
1115 if( dest.remaining() < source.remaining() ) {
1116 throw new IllegalArgumentException(
"payload ("+source.remaining()+
") is greater than remaining dest bytes: "+dest.remaining());
1118 while (source.hasRemaining()) {
1119 dest.put(source.get());
1129 @SuppressWarnings(
"unchecked")
1130 public static <B extends Buffer> B
put(final B dest, final Buffer src) {
1131 if ((dest instanceof ByteBuffer) && (src instanceof ByteBuffer)) {
1132 return (B) ((ByteBuffer) dest).put((ByteBuffer) src);
1133 }
else if ((dest instanceof ShortBuffer) && (src instanceof ShortBuffer)) {
1134 return (B) ((ShortBuffer) dest).put((ShortBuffer) src);
1135 }
else if ((dest instanceof IntBuffer) && (src instanceof IntBuffer)) {
1136 return (B) ((IntBuffer) dest).put((IntBuffer) src);
1137 }
else if ((dest instanceof FloatBuffer) && (src instanceof FloatBuffer)) {
1138 return (B) ((FloatBuffer) dest).put((FloatBuffer) src);
1139 }
else if ((dest instanceof LongBuffer) && (src instanceof LongBuffer)) {
1140 return (B) ((LongBuffer) dest).put((LongBuffer) src);
1141 }
else if ((dest instanceof DoubleBuffer) && (src instanceof DoubleBuffer)) {
1142 return (B) ((DoubleBuffer) dest).put((DoubleBuffer) src);
1143 }
else if ((dest instanceof CharBuffer) && (src instanceof CharBuffer)) {
1144 return (B) ((CharBuffer) dest).put((CharBuffer) src);
1146 throw new IllegalArgumentException(
"Incompatible Buffer classes: dest = " + dest.getClass().getName() +
", src = " + src.getClass().getName());
1149 @SuppressWarnings(
"unchecked")
1150 public static <B extends Buffer> B
putb(final B dest, final
byte v) {
1151 if (dest instanceof ByteBuffer) {
1152 return (B) ((ByteBuffer) dest).put(v);
1153 }
else if (dest instanceof ShortBuffer) {
1154 return (B) ((ShortBuffer) dest).put(v);
1155 }
else if (dest instanceof IntBuffer) {
1156 return (B) ((IntBuffer) dest).put(v);
1157 }
else if (dest instanceof FloatBuffer) {
1158 return (B) ((FloatBuffer) dest).put(v);
1159 }
else if (dest instanceof LongBuffer) {
1160 return (B) ((LongBuffer) dest).put(v);
1161 }
else if (dest instanceof DoubleBuffer) {
1162 return (B) ((DoubleBuffer) dest).put(v);
1163 }
else if (dest instanceof CharBuffer) {
1164 return (B) ((CharBuffer) dest).put((
char) v);
1166 throw new IllegalArgumentException(
"Byte doesn't match Buffer Class: " + dest);
1170 @SuppressWarnings(
"unchecked")
1171 public static <B extends Buffer> B
put3b(final B dest, final
byte v1, final
byte v2, final
byte v3) {
1172 if (dest instanceof ByteBuffer) {
1173 final ByteBuffer b = (ByteBuffer) dest;
1178 }
else if (dest instanceof ShortBuffer) {
1179 final ShortBuffer b = (ShortBuffer) dest;
1184 }
else if (dest instanceof IntBuffer) {
1185 final IntBuffer b = (IntBuffer) dest;
1190 }
else if (dest instanceof FloatBuffer) {
1191 final FloatBuffer b = (FloatBuffer) dest;
1196 }
else if (dest instanceof LongBuffer) {
1197 final LongBuffer b = (LongBuffer) dest;
1202 }
else if (dest instanceof DoubleBuffer) {
1203 final DoubleBuffer b = (DoubleBuffer) dest;
1208 }
else if (dest instanceof CharBuffer) {
1209 final CharBuffer b = (CharBuffer) dest;
1215 throw new IllegalArgumentException(
"Byte doesn't match Buffer Class: " + dest);
1219 @SuppressWarnings(
"unchecked")
1220 public static <B extends Buffer> B
put4b(final B dest, final
byte v1, final
byte v2, final
byte v3, final
byte v4) {
1221 if (dest instanceof ByteBuffer) {
1222 final ByteBuffer b = (ByteBuffer) dest;
1228 }
else if (dest instanceof ShortBuffer) {
1229 final ShortBuffer b = (ShortBuffer) dest;
1235 }
else if (dest instanceof IntBuffer) {
1236 final IntBuffer b = (IntBuffer) dest;
1242 }
else if (dest instanceof FloatBuffer) {
1243 final FloatBuffer b = (FloatBuffer) dest;
1249 }
else if (dest instanceof LongBuffer) {
1250 final LongBuffer b = (LongBuffer) dest;
1256 }
else if (dest instanceof DoubleBuffer) {
1257 final DoubleBuffer b = (DoubleBuffer) dest;
1263 }
else if (dest instanceof CharBuffer) {
1264 final CharBuffer b = (CharBuffer) dest;
1271 throw new IllegalArgumentException(
"Byte doesn't match Buffer Class: " + dest);
1275 @SuppressWarnings(
"unchecked")
1276 public static <B extends Buffer> B
putb(final B dest, final
byte[] src, final
int offset, final
int length) {
1277 if (dest instanceof ByteBuffer) {
1278 return (B) ((ByteBuffer) dest).put(src, offset, length);
1279 }
else if (dest instanceof ShortBuffer) {
1280 final ShortBuffer b = (ShortBuffer) dest;
1281 for(
int i=0; i<length; ++i) {
1282 b.put(src[offset+i]);
1285 }
else if (dest instanceof IntBuffer) {
1286 final IntBuffer b = (IntBuffer) dest;
1287 for(
int i=0; i<length; ++i) {
1288 b.put(src[offset+i]);
1291 }
else if (dest instanceof FloatBuffer) {
1292 final FloatBuffer b = (FloatBuffer) dest;
1293 for(
int i=0; i<length; ++i) {
1294 b.put(src[offset+i]);
1297 }
else if (dest instanceof LongBuffer) {
1298 final LongBuffer b = (LongBuffer) dest;
1299 for(
int i=0; i<length; ++i) {
1300 b.put(src[offset+i]);
1303 }
else if (dest instanceof DoubleBuffer) {
1304 final DoubleBuffer b = (DoubleBuffer) dest;
1305 for(
int i=0; i<length; ++i) {
1306 b.put(src[offset+i]);
1309 }
else if (dest instanceof CharBuffer) {
1310 final CharBuffer b = (CharBuffer) dest;
1311 for(
int i=0; i<length; ++i) {
1312 b.put((
char) src[offset+i]);
1316 throw new IllegalArgumentException(
"Byte doesn't match Buffer Class: " + dest);
1320 @SuppressWarnings(
"unchecked")
1321 public static <B extends Buffer> B
puts(final B dest, final
short v) {
1322 if (dest instanceof ShortBuffer) {
1323 return (B) ((ShortBuffer) dest).put(v);
1324 }
else if (dest instanceof IntBuffer) {
1325 return (B) ((IntBuffer) dest).put(v);
1326 }
else if (dest instanceof FloatBuffer) {
1327 return (B) ((FloatBuffer) dest).put(v);
1328 }
else if (dest instanceof LongBuffer) {
1329 return (B) ((LongBuffer) dest).put(v);
1330 }
else if (dest instanceof DoubleBuffer) {
1331 return (B) ((DoubleBuffer) dest).put(v);
1333 throw new IllegalArgumentException(
"Short doesn't match Buffer Class: " + dest);
1337 @SuppressWarnings(
"unchecked")
1338 public static <B extends Buffer> B
put3s(final B dest, final
short v1, final
short v2, final
short v3) {
1339 if (dest instanceof ShortBuffer) {
1340 final ShortBuffer b = (ShortBuffer) dest;
1345 }
else if (dest instanceof IntBuffer) {
1346 final IntBuffer b = (IntBuffer) dest;
1351 }
else if (dest instanceof FloatBuffer) {
1352 final FloatBuffer b = (FloatBuffer) dest;
1357 }
else if (dest instanceof LongBuffer) {
1358 final LongBuffer b = (LongBuffer) dest;
1363 }
else if (dest instanceof DoubleBuffer) {
1364 final DoubleBuffer b = (DoubleBuffer) dest;
1370 throw new IllegalArgumentException(
"Short doesn't match Buffer Class: " + dest);
1374 @SuppressWarnings(
"unchecked")
1375 public static <B extends Buffer> B
put4s(final B dest, final
short v1, final
short v2, final
short v3, final
short v4) {
1376 if (dest instanceof ShortBuffer) {
1377 final ShortBuffer b = (ShortBuffer) dest;
1383 }
else if (dest instanceof IntBuffer) {
1384 final IntBuffer b = (IntBuffer) dest;
1390 }
else if (dest instanceof FloatBuffer) {
1391 final FloatBuffer b = (FloatBuffer) dest;
1397 }
else if (dest instanceof LongBuffer) {
1398 final LongBuffer b = (LongBuffer) dest;
1404 }
else if (dest instanceof DoubleBuffer) {
1405 final DoubleBuffer b = (DoubleBuffer) dest;
1412 throw new IllegalArgumentException(
"Short doesn't match Buffer Class: " + dest);
1416 @SuppressWarnings(
"unchecked")
1417 public static <B extends Buffer> B
puts(final B dest, final
short[] src, final
int offset, final
int length) {
1418 if (dest instanceof ShortBuffer) {
1419 return (B) ((ShortBuffer) dest).put(src, offset, length);
1420 }
else if (dest instanceof IntBuffer) {
1421 final IntBuffer b = (IntBuffer) dest;
1422 for(
int i=0; i<length; ++i) {
1423 b.put(src[offset+i]);
1426 }
else if (dest instanceof FloatBuffer) {
1427 final FloatBuffer b = (FloatBuffer) dest;
1428 for(
int i=0; i<length; ++i) {
1429 b.put(src[offset+i]);
1432 }
else if (dest instanceof LongBuffer) {
1433 final LongBuffer b = (LongBuffer) dest;
1434 for(
int i=0; i<length; ++i) {
1435 b.put(src[offset+i]);
1438 }
else if (dest instanceof DoubleBuffer) {
1439 final DoubleBuffer b = (DoubleBuffer) dest;
1440 for(
int i=0; i<length; ++i) {
1441 b.put(src[offset+i]);
1445 throw new IllegalArgumentException(
"Short doesn't match Buffer Class: " + dest);
1449 @SuppressWarnings(
"unchecked")
1450 public static <B extends Buffer> B
puti(final B dest, final
int v) {
1451 if (dest instanceof IntBuffer) {
1452 return (B) ((IntBuffer) dest).put(v);
1453 }
else if (dest instanceof FloatBuffer) {
1454 return (B) ((FloatBuffer) dest).put(v);
1455 }
else if (dest instanceof LongBuffer) {
1456 return (B) ((LongBuffer) dest).put(v);
1457 }
else if (dest instanceof DoubleBuffer) {
1458 return (B) ((DoubleBuffer) dest).put(v);
1460 throw new IllegalArgumentException(
"Integer doesn't match Buffer Class: " + dest);
1464 @SuppressWarnings(
"unchecked")
1465 public static <B extends Buffer> B
put3i(final B dest, final
int v1, final
int v2, final
int v3) {
1466 if (dest instanceof IntBuffer) {
1467 final IntBuffer b = (IntBuffer) dest;
1472 }
else if (dest instanceof FloatBuffer) {
1473 final FloatBuffer b = (FloatBuffer) dest;
1478 }
else if (dest instanceof LongBuffer) {
1479 final LongBuffer b = (LongBuffer) dest;
1484 }
else if (dest instanceof DoubleBuffer) {
1485 final DoubleBuffer b = (DoubleBuffer) dest;
1491 throw new IllegalArgumentException(
"Integer doesn't match Buffer Class: " + dest);
1495 @SuppressWarnings(
"unchecked")
1496 public static <B extends Buffer> B
put4i(final B dest, final
int v1, final
int v2, final
int v3, final
int v4) {
1497 if (dest instanceof IntBuffer) {
1498 final IntBuffer b = (IntBuffer) dest;
1504 }
else if (dest instanceof FloatBuffer) {
1505 final FloatBuffer b = (FloatBuffer) dest;
1511 }
else if (dest instanceof LongBuffer) {
1512 final LongBuffer b = (LongBuffer) dest;
1518 }
else if (dest instanceof DoubleBuffer) {
1519 final DoubleBuffer b = (DoubleBuffer) dest;
1526 throw new IllegalArgumentException(
"Integer doesn't match Buffer Class: " + dest);
1530 @SuppressWarnings(
"unchecked")
1531 public static <B extends Buffer> B
puti(final B dest, final
int[] src, final
int offset, final
int length) {
1532 if (dest instanceof IntBuffer) {
1533 return (B) ((IntBuffer) dest).put(src, offset, length);
1534 }
else if (dest instanceof FloatBuffer) {
1535 final FloatBuffer b = (FloatBuffer) dest;
1536 for(
int i=0; i<length; ++i) {
1537 b.put(src[offset+i]);
1540 }
else if (dest instanceof LongBuffer) {
1541 final LongBuffer b = (LongBuffer) dest;
1542 for(
int i=0; i<length; ++i) {
1543 b.put(src[offset+i]);
1546 }
else if (dest instanceof DoubleBuffer) {
1547 final DoubleBuffer b = (DoubleBuffer) dest;
1548 for(
int i=0; i<length; ++i) {
1549 b.put(src[offset+i]);
1553 throw new IllegalArgumentException(
"Integer doesn't match Buffer Class: " + dest);
1557 @SuppressWarnings(
"unchecked")
1558 public static <B extends Buffer> B
putf(final B dest, final
float v) {
1559 if (dest instanceof FloatBuffer) {
1560 return (B) ((FloatBuffer) dest).put(v);
1561 }
else if (dest instanceof DoubleBuffer) {
1562 return (B) ((DoubleBuffer) dest).put(v);
1568 throw new IllegalArgumentException(
"Float doesn't match Buffer Class: " + dest);
1572 @SuppressWarnings(
"unchecked")
1573 public static <B extends Buffer> B
put3f(final B dest, final
float v1, final
float v2, final
float v3) {
1574 if (dest instanceof FloatBuffer) {
1575 final FloatBuffer b = (FloatBuffer) dest;
1580 }
else if (dest instanceof DoubleBuffer) {
1581 final DoubleBuffer b = (DoubleBuffer) dest;
1587 throw new IllegalArgumentException(
"Float doesn't match Buffer Class: " + dest);
1591 @SuppressWarnings(
"unchecked")
1592 public static <B extends Buffer> B
put4f(final B dest, final
float v1, final
float v2, final
float v3, final
float v4) {
1593 if (dest instanceof FloatBuffer) {
1594 final FloatBuffer b = (FloatBuffer) dest;
1600 }
else if (dest instanceof DoubleBuffer) {
1601 final DoubleBuffer b = (DoubleBuffer) dest;
1608 throw new IllegalArgumentException(
"Float doesn't match Buffer Class: " + dest);
1612 @SuppressWarnings(
"unchecked")
1613 public static <B extends Buffer> B
putf(final B dest, final
float[] src, final
int offset, final
int length) {
1614 if (dest instanceof FloatBuffer) {
1615 return (B) ((FloatBuffer) dest).put(src, offset, length);
1616 }
else if (dest instanceof DoubleBuffer) {
1617 final DoubleBuffer b = (DoubleBuffer) dest;
1618 for(
int i=0; i<length; ++i) {
1619 b.put(src[offset+i]);
1623 throw new IllegalArgumentException(
"Float doesn't match Buffer Class: " + dest);
1627 @SuppressWarnings(
"unchecked")
1628 public static <B extends Buffer> B
putd(final B dest, final
double v) {
1629 if (dest instanceof DoubleBuffer) {
1630 return (B) ((DoubleBuffer) dest).put(v);
1631 }
else if (dest instanceof FloatBuffer) {
1632 return (B) ((FloatBuffer) dest).put((
float) v);
1634 throw new IllegalArgumentException(
"Double doesn't match Buffer Class: " + dest);
1638 @SuppressWarnings(
"unchecked")
1639 public static <B extends Buffer> B
put3d(final B dest, final
double v1, final
double v2, final
double v3) {
1640 if (dest instanceof DoubleBuffer) {
1641 final DoubleBuffer b = (DoubleBuffer) dest;
1646 }
else if (dest instanceof FloatBuffer) {
1647 final FloatBuffer b = (FloatBuffer) dest;
1653 throw new IllegalArgumentException(
"Double doesn't match Buffer Class: " + dest);
1657 @SuppressWarnings(
"unchecked")
1658 public static <B extends Buffer> B
put4d(final B dest, final
double v1, final
double v2, final
double v3, final
double v4) {
1659 if (dest instanceof DoubleBuffer) {
1660 final DoubleBuffer b = (DoubleBuffer) dest;
1666 }
else if (dest instanceof FloatBuffer) {
1667 final FloatBuffer b = (FloatBuffer) dest;
1674 throw new IllegalArgumentException(
"Double doesn't match Buffer Class: " + dest);
1678 @SuppressWarnings(
"unchecked")
1679 public static <B extends Buffer> B
putd(final B dest, final
double[] src, final
int offset, final
int length) {
1680 if (dest instanceof DoubleBuffer) {
1681 return (B) ((DoubleBuffer) dest).put(src, offset, length);
1682 }
else if (dest instanceof FloatBuffer) {
1683 final FloatBuffer b = (FloatBuffer) dest;
1684 for(
int i=0; i<length; ++i) {
1685 b.put((
float) src[offset+i]);
1689 throw new IllegalArgumentException(
"Float doesn't match Buffer Class: " + dest);
1706 @SuppressWarnings(
"unchecked")
1707 public static <B extends Buffer> B
putNb(final B dest, final
boolean dSigned, final
byte v, final
boolean sSigned) {
1708 if (dest instanceof ByteBuffer) {
1709 return (B) ((ByteBuffer) dest).put( v );
1710 }
else if (dest instanceof ShortBuffer) {
1712 }
else if (dest instanceof IntBuffer) {
1714 }
else if (dest instanceof FloatBuffer) {
1717 throw new IllegalArgumentException(
"Byte doesn't match Buffer Class: " + dest);
1730 @SuppressWarnings(
"unchecked")
1731 public static <B extends Buffer> B
putNs(final B dest, final
boolean dSigned, final
short v, final
boolean sSigned) {
1732 if (dest instanceof ByteBuffer) {
1734 }
else if (dest instanceof ShortBuffer) {
1735 return (B) ((ShortBuffer) dest).put( v );
1736 }
else if (dest instanceof IntBuffer) {
1738 }
else if (dest instanceof FloatBuffer) {
1741 throw new IllegalArgumentException(
"Byte doesn't match Buffer Class: " + dest);
1754 @SuppressWarnings(
"unchecked")
1755 public static <B extends Buffer> B
putNi(final B dest, final
boolean dSigned, final
int v, final
boolean sSigned) {
1756 if (dest instanceof ByteBuffer) {
1758 }
else if (dest instanceof ShortBuffer) {
1760 }
else if (dest instanceof IntBuffer) {
1761 return (B) ((IntBuffer) dest).put( v );
1762 }
else if (dest instanceof FloatBuffer) {
1765 throw new IllegalArgumentException(
"Byte doesn't match Buffer Class: " + dest);
1777 @SuppressWarnings(
"unchecked")
1778 public static <B extends Buffer> B
putNf(final B dest, final
boolean dSigned, final
float v) {
1779 if (dest instanceof ByteBuffer) {
1781 }
else if (dest instanceof ShortBuffer) {
1783 }
else if (dest instanceof IntBuffer) {
1785 }
else if (dest instanceof FloatBuffer) {
1786 return (B) ((FloatBuffer) dest).put( v );
1788 throw new IllegalArgumentException(
"Byte doesn't match Buffer Class: " + dest);
1796 public static void rangeCheck(
final byte[] array,
final int offset,
final int minElementsRemaining) {
1797 if (array ==
null) {
1801 if (array.length < offset + minElementsRemaining) {
1802 throw new ArrayIndexOutOfBoundsException(
"Required " + minElementsRemaining +
" elements in array, only had " + (array.length - offset));
1806 public static void rangeCheck(
final char[] array,
final int offset,
final int minElementsRemaining) {
1807 if (array ==
null) {
1811 if (array.length < offset + minElementsRemaining) {
1812 throw new ArrayIndexOutOfBoundsException(
"Required " + minElementsRemaining +
" elements in array, only had " + (array.length - offset));
1816 public static void rangeCheck(
final short[] array,
final int offset,
final int minElementsRemaining) {
1817 if (array ==
null) {
1821 if (array.length < offset + minElementsRemaining) {
1822 throw new ArrayIndexOutOfBoundsException(
"Required " + minElementsRemaining +
" elements in array, only had " + (array.length - offset));
1826 public static void rangeCheck(
final int[] array,
final int offset,
final int minElementsRemaining) {
1827 if (array ==
null) {
1831 if (array.length < offset + minElementsRemaining) {
1832 throw new ArrayIndexOutOfBoundsException(
"Required " + minElementsRemaining +
" elements in array, only had " + (array.length - offset));
1836 public static void rangeCheck(
final long[] array,
final int offset,
final int minElementsRemaining) {
1837 if (array ==
null) {
1841 if (array.length < offset + minElementsRemaining) {
1842 throw new ArrayIndexOutOfBoundsException(
"Required " + minElementsRemaining +
" elements in array, only had " + (array.length - offset));
1846 public static void rangeCheck(
final float[] array,
final int offset,
final int minElementsRemaining) {
1847 if (array ==
null) {
1851 if (array.length < offset + minElementsRemaining) {
1852 throw new ArrayIndexOutOfBoundsException(
"Required " + minElementsRemaining +
" elements in array, only had " + (array.length - offset));
1856 public static void rangeCheck(
final double[] array,
final int offset,
final int minElementsRemaining) {
1857 if (array ==
null) {
1861 if (array.length < offset + minElementsRemaining) {
1862 throw new ArrayIndexOutOfBoundsException(
"Required " + minElementsRemaining +
" elements in array, only had " + (array.length - offset));
1866 public static void rangeCheck(
final Buffer buffer,
final int minElementsRemaining) {
1867 if (buffer ==
null) {
1871 if (buffer.remaining() < minElementsRemaining) {
1872 throw new IndexOutOfBoundsException(
"Required " + minElementsRemaining +
" remaining elements in buffer, only had " + buffer.remaining());
1882 public static void rangeCheckBytes(
final Object buffer,
final int minBytesRemaining)
throws IllegalArgumentException, IndexOutOfBoundsException {
1883 if (buffer ==
null) {
1887 if (bytesRemaining < minBytesRemaining) {
1888 throw new IndexOutOfBoundsException(
"Required " + minBytesRemaining +
" remaining bytes in buffer, only had " + bytesRemaining);
1901 public static StringBuilder
toString(StringBuilder sb,
final String f,
final Buffer buffer) {
1903 sb =
new StringBuilder();
1905 sb.append(buffer.getClass().getSimpleName());
1906 sb.append(
"[pos ").append(buffer.position()).append(
", lim ").append(buffer.limit()).append(
", cap ").append(buffer.capacity());
1907 sb.append(
", remaining ").append(buffer.remaining());
1908 sb.append(
"; array ").append(buffer.hasArray()).append(
", direct ").append(buffer.isDirect());
1909 sb.append(
", r/w ").append(!buffer.isReadOnly()).append(
": ");
1910 if (buffer instanceof ByteBuffer) {
1911 final ByteBuffer b = (ByteBuffer)buffer;
1912 for(
int i=0; i<b.limit(); i++) {
1913 if(0<i) { sb.append(
", "); }
1915 sb.append(b.get(i));
1917 sb.append(String.format(f, b.get(i)));
1920 }
else if (buffer instanceof FloatBuffer) {
1921 final FloatBuffer b = (FloatBuffer)buffer;
1922 for(
int i=0; i<b.limit(); i++) {
1923 if(0<i) { sb.append(
", "); }
1925 sb.append(b.get(i));
1927 sb.append(String.format(f, b.get(i)));
1930 }
else if (buffer instanceof IntBuffer) {
1931 final IntBuffer b = (IntBuffer)buffer;
1932 for(
int i=0; i<b.limit(); i++) {
1933 if(0<i) { sb.append(
", "); }
1935 sb.append(b.get(i));
1937 sb.append(String.format(f, b.get(i)));
1940 }
else if (buffer instanceof ShortBuffer) {
1941 final ShortBuffer b = (ShortBuffer)buffer;
1942 for(
int i=0; i<b.limit(); i++) {
1943 if(0<i) { sb.append(
", "); }
1945 sb.append(b.get(i));
1947 sb.append(String.format(f, b.get(i)));
1950 }
else if (buffer instanceof DoubleBuffer) {
1951 final DoubleBuffer b = (DoubleBuffer)buffer;
1952 for(
int i=0; i<b.limit(); i++) {
1953 if(0<i) { sb.append(
", "); }
1955 sb.append(b.get(i));
1957 sb.append(String.format(f, b.get(i)));
1960 }
else if (buffer instanceof LongBuffer) {
1961 final LongBuffer b = (LongBuffer)buffer;
1962 for(
int i=0; i<b.limit(); i++) {
1963 if(0<i) { sb.append(
", "); }
1965 sb.append(b.get(i));
1967 sb.append(String.format(f, b.get(i)));
1970 }
else if (buffer instanceof CharBuffer) {
1971 final CharBuffer b = (CharBuffer)buffer;
1972 for(
int i=0; i<b.limit(); i++) {
1973 if(0<i) { sb.append(
", "); }
1975 sb.append(b.get(i));
1977 sb.append(String.format(f, b.get(i)));
1989 private static final Method mbbCleaner;
1990 private static final Method cClean;
1992 private static volatile boolean cleanerError;
1994 final Method[] _mbbCleaner = {
null };
1995 final Method[] _cClean = {
null };
1996 final boolean hasCleaner;
1999 public Boolean run() {
2001 if( PlatformPropsImpl.JAVA_9 ) {
2005 _mbbCleaner[0].setAccessible(
true);
2006 final Class<?> cleanerType = _mbbCleaner[0].getReturnType();
2011 _cClean[0] = cleanerType.getMethod(
"clean");
2012 _cClean[0].setAccessible(
true);
2013 return Boolean.TRUE;
2015 }
catch(
final Throwable t) {
2019 return Boolean.FALSE;
2020 } } } ).booleanValue() ) {
2021 mbbCleaner = _mbbCleaner[0];
2022 cClean = _cClean[0];
2023 hasCleaner = PlatformPropsImpl.JAVA_9 || (
null != mbbCleaner &&
null != cClean );
2029 cleanerError = !hasCleaner;
2031 System.err.print(
"Buffers.Cleaner.init: hasCleaner: "+hasCleaner+
", cleanerError "+cleanerError);
2032 if(
null != mbbCleaner ) {
2033 System.err.print(
", using Cleaner class: "+mbbCleaner.getReturnType().getName());
2035 System.err.println();
2043 public static boolean clean(
final ByteBuffer bb) {
2044 if( cleanerError || !bb.isDirect() ) {
2048 if( PlatformPropsImpl.JAVA_9 ) {
2051 cClean.invoke(mbbCleaner.invoke(bb));
2054 }
catch(
final Throwable t) {
2055 cleanerError =
true;
2071 if( Integer.MAX_VALUE < len ) {
2072 throw new IllegalArgumentException(
"length "+len+
" > MAX_INT");
2074 final int lenI = (int)len;
2077 throw new RuntimeException(
"New direct ByteBuffer is NULL");
2080 final long byteBufferPtr = getDirectBufferAddressImpl(bb);
2081 memcpyImpl(byteBufferPtr, source_address, lenI);
2086 static ByteBuffer getDirectByteBuffer(
final long aptr,
final int byteCount) {
2087 final ByteBuffer r = getDirectByteBufferImpl(aptr, byteCount);
2091 static void storeDirectAddress(
final long addr,
final ByteBuffer dest,
final int destBytePos,
final int nativeSizeInBytes) {
2092 switch(nativeSizeInBytes) {
2094 dest.putInt(destBytePos, (
int) ( addr & 0x00000000FFFFFFFFL ) );
2097 dest.putLong(destBytePos, addr);
2100 throw new InternalError(
"invalid nativeSizeInBytes "+nativeSizeInBytes);
2111 public static int strnlen(
final long cstrptr,
final int maxlen) {
2112 return strnlenImpl(cstrptr, maxlen);
2126 static native
long getDirectBufferAddressImpl(Object directBuffer);
2127 private static native ByteBuffer getDirectByteBufferImpl(
long aptr,
int byteCount);
2128 private static native
int strnlenImpl(
long cstrptr,
int maxlen);
2129 private static native
long memcpyImpl(
long dest,
long src,
long len);
static void dumpThrowable(final String additionalDescr, final Throwable t)
Dumps a Throwable to System.err in a decorating message including the current thread name,...
Access to NIO sun.misc.Cleaner, allowing caller to deterministically clean a given sun....
static boolean clean(final ByteBuffer bb)
If b is an direct NIO buffer, i.e sun.nio.ch.DirectBuffer, calls it's sun.misc.Cleaner instance clean...
Utility methods allowing easy java.nio.Buffer manipulations.
static LongBuffer newDirectLongBuffer(final int numElements)
Allocates a new direct LongBuffer with the specified number of elements.
static int remainingBytes(final Object buffer)
Returns the number of remaining bytes of the given anonymous buffer.
static< B extends Buffer > B putNi(final B dest, final boolean dSigned, final int v, final boolean sSigned)
Store short source value in given buffer after normalizing it to the destination value range consider...
static final FloatBuffer slice2Float(final Buffer buf, final int elementStartPos, final int elementCount)
Slices a ByteBuffer or a FloatBuffer to a FloatBuffer at the given elementStartPos with the given ele...
static CharBuffer newDirectCharBuffer(final char[] values, final int offset, final int length)
static final FloatBuffer slice2Float(final float[] backing, final int elementStartPos, final int elementCount)
Slices a primitive float backing array to a FloatBuffer at the given elementStartPos with the given e...
static ByteBuffer newDirectByteBuffer(final int numElements)
Allocates a new direct ByteBuffer with the specified number of elements.
static final int SIZEOF_BYTE
static< B extends Buffer > B put3s(final B dest, final short v1, final short v2, final short v3)
static IntBuffer copyIntBuffer(final IntBuffer orig)
Copies the remaining elements (as defined by limit() - position()) in the passed IntBuffer into a new...
static ShortBuffer copyShortBuffer(final ShortBuffer orig)
Copies the remaining elements (as defined by limit() - position()) in the passed ShortBuffer into a n...
static void rangeCheck(final long[] array, final int offset, final int minElementsRemaining)
static LongBuffer newDirectLongBuffer(final long[] values)
static< B extends Buffer > B putb(final B dest, final byte v)
static ByteBuffer newDirectByteBuffer(final byte[] values)
static IntBuffer newDirectIntBuffer(final int[] values)
static final DoubleBuffer slice2Double(final Buffer buf, final int elementStartPos, final int elementCount)
Slices a ByteBuffer or a DoubleBuffer to a DoubleBuffer at the given elementStartPos with the given e...
static boolean isDirect(final Object buf)
Helper routine to tell whether a buffer is direct or not.
static< B extends Buffer > B put3d(final B dest, final double v1, final double v2, final double v3)
static< B extends Buffer > B putf(final B dest, final float v)
static final IntBuffer slice2Int(final int[] backing, final int elementStartPos, final int elementCount)
Slices a primitive float backing array to a IntBuffer at the given elementStartPos with the given ele...
static void rangeCheck(final Buffer buffer, final int minElementsRemaining)
static Class<? extends Buffer > typeNameToBufferClass(final String typeName)
Returns Buffer class matching the given lower case typeName
static FloatBuffer newDirectFloatBuffer(final float[] values)
static final ShortBuffer slice2Short(final short[] backing, final int elementStartPos, final int elementCount)
Slices a primitive float backing array to a ShortBuffer at the given elementStartPos with the given e...
static FloatBuffer newDirectFloatBuffer(final int numElements)
Allocates a new direct FloatBuffer with the specified number of elements.
static< B extends Buffer > B put(final B dest, final Buffer src)
static DoubleBuffer newDirectDoubleBuffer(final double[] values)
static LongBuffer newDirectLongBuffer(final long[] values, final int offset, final int length)
static CharBuffer newDirectCharBuffer(final char[] values)
static void rangeCheck(final float[] array, final int offset, final int minElementsRemaining)
static DoubleBuffer newDirectDoubleBuffer(final double[] values, final int offset)
static ShortBuffer newDirectShortBuffer(final short[] values)
static final CharBuffer slice2Char(final Buffer buf, final int elementStartPos, final int elementCount)
Slices a ByteBuffer or a CharBuffer to a CharBuffer at the given elementStartPos with the given eleme...
static int strnlen(final long cstrptr, final int maxlen)
Returns strnlen(cstrptr, maxlen) according to POSIX.1-2008.
static FloatBuffer copyFloatBuffer(final FloatBuffer orig)
Copies the remaining elements (as defined by limit() - position()) in the passed FloatBuffer into a n...
static int getIndirectBufferByteOffset(final Object buf)
Helper routine to get the full byte offset from the beginning of the array that is the storage for th...
static int getDirectBufferByteOffset(final Object buf)
Helper routine to get the Buffer byte offset by taking into account the Buffer position and the under...
static< B extends Buffer > B put4i(final B dest, final int v1, final int v2, final int v3, final int v4)
static final LongBuffer slice2Long(final Buffer buf, final int elementStartPos, final int elementCount)
Slices a ByteBuffer or a LongBuffer to a LongBuffer at the given elementStartPos with the given eleme...
static FloatBuffer newDirectFloatBuffer(final float[] values, final int offset)
static DoubleBuffer newDirectDoubleBuffer(final int numElements)
Allocates a new direct DoubleBuffer with the specified number of elements.
static IntBuffer newDirectIntBuffer(final int[] values, final int offset, final int length)
static< B extends Buffer > B put3i(final B dest, final int v1, final int v2, final int v3)
static int sizeOfBufferElem(final Object buffer)
Returns the size of a single element of the given buffer in bytes or 0 if the given buffer is null.
static< B extends Buffer > B putNf(final B dest, final boolean dSigned, final float v)
Store float source value in given buffer after normalizing it to the destination value range consider...
static void rangeCheckBytes(final Object buffer, final int minBytesRemaining)
static FloatBuffer getFloatBuffer(final DoubleBuffer source, FloatBuffer dest)
No rewind or repositioning is performed.
static final int SIZEOF_SHORT
static< B extends Buffer > B put3f(final B dest, final float v1, final float v2, final float v3)
static< B extends Buffer > B putNb(final B dest, final boolean dSigned, final byte v, final boolean sSigned)
Store byte source value in given buffer after normalizing it to the destination value range consideri...
static final int SIZEOF_DOUBLE
static< B extends Buffer > B puti(final B dest, final int v)
static< B extends Buffer > B put4f(final B dest, final float v1, final float v2, final float v3, final float v4)
static ByteBuffer copyIntBufferAsByteBuffer(final IntBuffer orig)
Copies the remaining elements (as defined by limit() - position()) in the passed IntBuffer into a new...
static FloatBuffer newDirectFloatBuffer(final float[] values, final int offset, final int length)
static ShortBuffer newDirectShortBuffer(final short[] values, final int offset, final int length)
static final int SIZEOF_CHAR
static< B extends Buffer > B puts(final B dest, final short v)
static ShortBuffer newDirectShortBuffer(final short[] values, final int offset)
static StringBuilder toString(StringBuilder sb, final String f, final Buffer buffer)
Appends Buffer details inclusive data to a StringBuilder instance.
static final int SIZEOF_INT
static final int SIZEOF_LONG
static ByteBuffer newDirectByteBuffer(final byte[] values, final int offset)
static< B extends Buffer > B putd(final B dest, final double v)
static void rangeCheck(final double[] array, final int offset, final int minElementsRemaining)
static void rangeCheck(final char[] array, final int offset, final int minElementsRemaining)
static final DoubleBuffer slice2Double(final double[] backing, final int elementStartPos, final int elementCount)
Slices a primitive float backing array to a DoubleBuffer at the given elementStartPos with the given ...
static int sizeOfBufferElem(final Class<? extends Buffer > bufferClz)
Returns the size of a single element of the given buffer class in bytes or 0 if the given buffer is n...
static< B extends Buffer > B putNs(final B dest, final boolean dSigned, final short v, final boolean sSigned)
Store short source value in given buffer after normalizing it to the destination value range consider...
static final int SIZEOF_FLOAT
static< B extends Buffer > B slice(final B buffer, final int offset, final int size)
Slices the specified buffer with offset as position and offset+size as limit while maintaining the by...
static final CharBuffer slice2Char(final char[] backing, final int elementStartPos, final int elementCount)
Slices a primitive float backing array to a CharBuffer at the given elementStartPos with the given el...
static< B extends Buffer > B slice(final B buffer)
Calls slice on the specified buffer while maintaining the byteorder.
static< B extends Buffer > B put4d(final B dest, final double v1, final double v2, final double v3, final double v4)
static LongBuffer newDirectLongBuffer(final long[] values, final int offset)
static ByteBuffer newDirectByteBuffer(final byte[] values, final int offset, final int length)
static< B extends Buffer > B put3b(final B dest, final byte v1, final byte v2, final byte v3)
static CharBuffer newDirectCharBuffer(final int numElements)
Allocates a new direct CharBuffer with the specified number of elements.
static CharBuffer newDirectCharBuffer(final char[] values, final int offset)
static final LongBuffer slice2Long(final long[] backing, final int elementStartPos, final int elementCount)
Slices a primitive float backing array to a LongBuffer at the given elementStartPos with the given el...
static IntBuffer newDirectIntBuffer(final int[] values, final int offset)
static ByteBuffer copyByteBuffer(final ByteBuffer orig)
Copies the remaining elements (as defined by limit() - position()) in the passed ByteBuffer into a ne...
static< B extends Buffer > B put4b(final B dest, final byte v1, final byte v2, final byte v3, final byte v4)
static DoubleBuffer newDirectDoubleBuffer(final double[] values, final int offset, final int length)
static ByteBuffer copyShortBufferAsByteBuffer(final ShortBuffer orig)
Copies the remaining elements (as defined by limit() - position()) in the passed ShortBuffer into a n...
static DoubleBuffer getDoubleBuffer(final FloatBuffer source, DoubleBuffer dest)
No rewind or repositioning is performed.
static double[] getDoubleArray(final float[] source, final int soffset, double[] dest, int doffset, int len)
static final IntBuffer slice2Int(final Buffer buf, final int elementStartPos, final int elementCount)
Slices a ByteBuffer or a IntBuffer to a IntBuffer at the given elementStartPos with the given element...
static void rangeCheck(final short[] array, final int offset, final int minElementsRemaining)
static void rangeCheck(final byte[] array, final int offset, final int minElementsRemaining)
static ShortBuffer newDirectShortBuffer(final int numElements)
Allocates a new direct ShortBuffer with the specified number of elements.
static ByteBuffer copyNativeToDirectByteBuffer(final long source_address, final long len)
Copy len native bytes @ source_address into a newly created direct ByteBuffer.
static final ShortBuffer slice2Short(final Buffer buf, final int elementStartPos, final int elementCount)
Slices a ByteBuffer or a ShortBuffer to a ShortBuffer at the given elementStartPos with the given ele...
static void rangeCheck(final int[] array, final int offset, final int minElementsRemaining)
static Object getArray(final Object buf)
Helper routine to return the array backing store reference from a Buffer object.
static float[] getFloatArray(final double[] source, final int soffset, float[] dest, int doffset, int len)
static IntBuffer newDirectIntBuffer(final int numElements)
Allocates a new direct IntBuffer with the specified number of elements.
static ByteBuffer copyFloatBufferAsByteBuffer(final FloatBuffer orig)
Copies the remaining elements (as defined by limit() - position()) in the passed FloatBuffer into a n...
static int remainingElem(final Object buffer)
Returns the number of remaining elements of the given anonymous buffer.
static ByteBuffer nativeOrder(final ByteBuffer buf)
Helper routine to set a ByteBuffer to the native byte order, if that operation is supported by the un...
static< B extends Buffer > B put4s(final B dest, final short v1, final short v2, final short v3, final short v4)
Hardware independent container holding an array of native pointer, while its getDirectBufferAddress()...
static final Method getMethod(final Class<?> clazz, final String methodName, final Class<?> ... argTypes)
static< T > T doPrivileged(final PrivilegedAction< T > o)
Call wrapper for java.security.AccessController#doPrivileged(PrivilegedAction).
Utility methods allowing easy access to certain sun.misc.Unsafe functionality.
static boolean invokeCleaner(final ByteBuffer bb)
Access to sun.misc.Unsafe.invokeCleaner(java.nio.ByteBuffer).
static boolean hasInvokeCleaner()
Returns true if sun.misc.Unsafe.invokeCleaner(java.nio.ByteBuffer) is available and has not caused an...
Copyright 2012 JogAmp Community.
static final float short_to_float(final short v, final boolean sSigned)
static final int byte_to_int(final byte v, final boolean sSigned, final boolean dSigned)
static final int float_to_int(final float v, final boolean dSigned)
static final byte short_to_byte(final short v, final boolean sSigned, final boolean dSigned)
static final byte float_to_byte(final float v, final boolean dSigned)
static final short float_to_short(final float v, final boolean dSigned)
static final short byte_to_short(final byte v, final boolean sSigned, final boolean dSigned)
static final short int_to_short(final int v, final boolean sSigned, final boolean dSigned)
static final float byte_to_float(final byte v, final boolean sSigned)
static final byte int_to_byte(final int v, final boolean sSigned, final boolean dSigned)
static final float int_to_float(final int v, final boolean sSigned)
static final int short_to_int(final short v, final boolean sSigned, final boolean dSigned)
Hardware independent container for various kinds of buffers.
int elementSize()
Returns byte size of one element.
int position()
Returns this buffer's element position.
int remaining()
Returns this buffer's remaining element, i.e.