45 #if[rw] |
45 #if[rw] |
46 |
46 |
47 // Cached unsafe-access object |
47 // Cached unsafe-access object |
48 protected static final Unsafe unsafe = Bits.unsafe(); |
48 protected static final Unsafe unsafe = Bits.unsafe(); |
49 |
49 |
|
50 // Cached array base offset |
|
51 private static final long arrayBaseOffset = (long)unsafe.arrayBaseOffset($type$[].class); |
|
52 |
50 // Cached unaligned-access capability |
53 // Cached unaligned-access capability |
51 protected static final boolean unaligned = Bits.unaligned(); |
54 protected static final boolean unaligned = Bits.unaligned(); |
52 |
55 |
53 // Base address, used in all indexing calculations |
56 // Base address, used in all indexing calculations |
54 // NOTE: moved up to Buffer.java for speed in JNI GetDirectBufferAddress |
57 // NOTE: moved up to Buffer.java for speed in JNI GetDirectBufferAddress |
240 assert (pos <= lim); |
243 assert (pos <= lim); |
241 int rem = (pos <= lim ? lim - pos : 0); |
244 int rem = (pos <= lim ? lim - pos : 0); |
242 if (length > rem) |
245 if (length > rem) |
243 throw new BufferUnderflowException(); |
246 throw new BufferUnderflowException(); |
244 |
247 |
|
248 #if[!byte] |
245 if (order() != ByteOrder.nativeOrder()) |
249 if (order() != ByteOrder.nativeOrder()) |
246 Bits.copyTo$Memtype$Array(ix(pos), dst, |
250 Bits.copyTo$Memtype$Array(ix(pos), dst, |
247 offset << $LG_BYTES_PER_VALUE$, |
251 offset << $LG_BYTES_PER_VALUE$, |
248 length << $LG_BYTES_PER_VALUE$); |
252 length << $LG_BYTES_PER_VALUE$); |
249 else |
253 else |
250 Bits.copyToByteArray(ix(pos), dst, |
254 #end[!byte] |
251 offset << $LG_BYTES_PER_VALUE$, |
255 Bits.copyToArray(ix(pos), dst, arrayBaseOffset, |
252 length << $LG_BYTES_PER_VALUE$); |
256 offset << $LG_BYTES_PER_VALUE$, |
|
257 length << $LG_BYTES_PER_VALUE$); |
253 position(pos + length); |
258 position(pos + length); |
254 } else { |
259 } else { |
255 super.get(dst, offset, length); |
260 super.get(dst, offset, length); |
256 } |
261 } |
257 return this; |
262 return this; |
330 assert (pos <= lim); |
335 assert (pos <= lim); |
331 int rem = (pos <= lim ? lim - pos : 0); |
336 int rem = (pos <= lim ? lim - pos : 0); |
332 if (length > rem) |
337 if (length > rem) |
333 throw new BufferOverflowException(); |
338 throw new BufferOverflowException(); |
334 |
339 |
|
340 #if[!byte] |
335 if (order() != ByteOrder.nativeOrder()) |
341 if (order() != ByteOrder.nativeOrder()) |
336 Bits.copyFrom$Memtype$Array(src, offset << $LG_BYTES_PER_VALUE$, |
342 Bits.copyFrom$Memtype$Array(src, offset << $LG_BYTES_PER_VALUE$, |
337 ix(pos), length << $LG_BYTES_PER_VALUE$); |
343 ix(pos), length << $LG_BYTES_PER_VALUE$); |
338 else |
344 else |
339 Bits.copyFromByteArray(src, offset << $LG_BYTES_PER_VALUE$, |
345 #end[!byte] |
340 ix(pos), length << $LG_BYTES_PER_VALUE$); |
346 Bits.copyFromArray(src, arrayBaseOffset, offset << $LG_BYTES_PER_VALUE$, |
|
347 ix(pos), length << $LG_BYTES_PER_VALUE$); |
341 position(pos + length); |
348 position(pos + length); |
342 } else { |
349 } else { |
343 super.put(src, offset, length); |
350 super.put(src, offset, length); |
344 } |
351 } |
345 return this; |
352 return this; |