mirror of
https://github.com/openjdk/jdk.git
synced 2025-08-27 14:54:52 +02:00
8151163: All Buffer implementations should leverage Unsafe unaligned accessors
Reviewed-by: shade, aph
This commit is contained in:
parent
f7c908cebd
commit
2446e48a5f
3 changed files with 33 additions and 515 deletions
|
@ -25,14 +25,14 @@
|
|||
|
||||
package java.nio;
|
||||
|
||||
import java.util.concurrent.atomic.AtomicLong;
|
||||
|
||||
import jdk.internal.misc.JavaNioAccess;
|
||||
import jdk.internal.misc.JavaLangRefAccess;
|
||||
import jdk.internal.misc.JavaNioAccess;
|
||||
import jdk.internal.misc.SharedSecrets;
|
||||
import jdk.internal.misc.Unsafe;
|
||||
import jdk.internal.misc.VM;
|
||||
|
||||
import java.util.concurrent.atomic.AtomicLong;
|
||||
|
||||
/**
|
||||
* Access to bits, native and otherwise.
|
||||
*/
|
||||
|
@ -61,504 +61,10 @@ class Bits { // package-private
|
|||
}
|
||||
|
||||
|
||||
// -- get/put char --
|
||||
|
||||
private static char makeChar(byte b1, byte b0) {
|
||||
return (char)((b1 << 8) | (b0 & 0xff));
|
||||
}
|
||||
|
||||
static char getCharL(ByteBuffer bb, int bi) {
|
||||
return makeChar(bb._get(bi + 1),
|
||||
bb._get(bi ));
|
||||
}
|
||||
|
||||
static char getCharL(long a) {
|
||||
return makeChar(_get(a + 1),
|
||||
_get(a ));
|
||||
}
|
||||
|
||||
static char getCharB(ByteBuffer bb, int bi) {
|
||||
return makeChar(bb._get(bi ),
|
||||
bb._get(bi + 1));
|
||||
}
|
||||
|
||||
static char getCharB(long a) {
|
||||
return makeChar(_get(a ),
|
||||
_get(a + 1));
|
||||
}
|
||||
|
||||
static char getChar(ByteBuffer bb, int bi, boolean bigEndian) {
|
||||
return bigEndian ? getCharB(bb, bi) : getCharL(bb, bi);
|
||||
}
|
||||
|
||||
static char getChar(long a, boolean bigEndian) {
|
||||
return bigEndian ? getCharB(a) : getCharL(a);
|
||||
}
|
||||
|
||||
private static byte char1(char x) { return (byte)(x >> 8); }
|
||||
private static byte char0(char x) { return (byte)(x ); }
|
||||
|
||||
static void putCharL(ByteBuffer bb, int bi, char x) {
|
||||
bb._put(bi , char0(x));
|
||||
bb._put(bi + 1, char1(x));
|
||||
}
|
||||
|
||||
static void putCharL(long a, char x) {
|
||||
_put(a , char0(x));
|
||||
_put(a + 1, char1(x));
|
||||
}
|
||||
|
||||
static void putCharB(ByteBuffer bb, int bi, char x) {
|
||||
bb._put(bi , char1(x));
|
||||
bb._put(bi + 1, char0(x));
|
||||
}
|
||||
|
||||
static void putCharB(long a, char x) {
|
||||
_put(a , char1(x));
|
||||
_put(a + 1, char0(x));
|
||||
}
|
||||
|
||||
static void putChar(ByteBuffer bb, int bi, char x, boolean bigEndian) {
|
||||
if (bigEndian)
|
||||
putCharB(bb, bi, x);
|
||||
else
|
||||
putCharL(bb, bi, x);
|
||||
}
|
||||
|
||||
static void putChar(long a, char x, boolean bigEndian) {
|
||||
if (bigEndian)
|
||||
putCharB(a, x);
|
||||
else
|
||||
putCharL(a, x);
|
||||
}
|
||||
|
||||
|
||||
// -- get/put short --
|
||||
|
||||
private static short makeShort(byte b1, byte b0) {
|
||||
return (short)((b1 << 8) | (b0 & 0xff));
|
||||
}
|
||||
|
||||
static short getShortL(ByteBuffer bb, int bi) {
|
||||
return makeShort(bb._get(bi + 1),
|
||||
bb._get(bi ));
|
||||
}
|
||||
|
||||
static short getShortL(long a) {
|
||||
return makeShort(_get(a + 1),
|
||||
_get(a ));
|
||||
}
|
||||
|
||||
static short getShortB(ByteBuffer bb, int bi) {
|
||||
return makeShort(bb._get(bi ),
|
||||
bb._get(bi + 1));
|
||||
}
|
||||
|
||||
static short getShortB(long a) {
|
||||
return makeShort(_get(a ),
|
||||
_get(a + 1));
|
||||
}
|
||||
|
||||
static short getShort(ByteBuffer bb, int bi, boolean bigEndian) {
|
||||
return bigEndian ? getShortB(bb, bi) : getShortL(bb, bi);
|
||||
}
|
||||
|
||||
static short getShort(long a, boolean bigEndian) {
|
||||
return bigEndian ? getShortB(a) : getShortL(a);
|
||||
}
|
||||
|
||||
private static byte short1(short x) { return (byte)(x >> 8); }
|
||||
private static byte short0(short x) { return (byte)(x ); }
|
||||
|
||||
static void putShortL(ByteBuffer bb, int bi, short x) {
|
||||
bb._put(bi , short0(x));
|
||||
bb._put(bi + 1, short1(x));
|
||||
}
|
||||
|
||||
static void putShortL(long a, short x) {
|
||||
_put(a , short0(x));
|
||||
_put(a + 1, short1(x));
|
||||
}
|
||||
|
||||
static void putShortB(ByteBuffer bb, int bi, short x) {
|
||||
bb._put(bi , short1(x));
|
||||
bb._put(bi + 1, short0(x));
|
||||
}
|
||||
|
||||
static void putShortB(long a, short x) {
|
||||
_put(a , short1(x));
|
||||
_put(a + 1, short0(x));
|
||||
}
|
||||
|
||||
static void putShort(ByteBuffer bb, int bi, short x, boolean bigEndian) {
|
||||
if (bigEndian)
|
||||
putShortB(bb, bi, x);
|
||||
else
|
||||
putShortL(bb, bi, x);
|
||||
}
|
||||
|
||||
static void putShort(long a, short x, boolean bigEndian) {
|
||||
if (bigEndian)
|
||||
putShortB(a, x);
|
||||
else
|
||||
putShortL(a, x);
|
||||
}
|
||||
|
||||
|
||||
// -- get/put int --
|
||||
|
||||
private static int makeInt(byte b3, byte b2, byte b1, byte b0) {
|
||||
return (((b3 ) << 24) |
|
||||
((b2 & 0xff) << 16) |
|
||||
((b1 & 0xff) << 8) |
|
||||
((b0 & 0xff) ));
|
||||
}
|
||||
|
||||
static int getIntL(ByteBuffer bb, int bi) {
|
||||
return makeInt(bb._get(bi + 3),
|
||||
bb._get(bi + 2),
|
||||
bb._get(bi + 1),
|
||||
bb._get(bi ));
|
||||
}
|
||||
|
||||
static int getIntL(long a) {
|
||||
return makeInt(_get(a + 3),
|
||||
_get(a + 2),
|
||||
_get(a + 1),
|
||||
_get(a ));
|
||||
}
|
||||
|
||||
static int getIntB(ByteBuffer bb, int bi) {
|
||||
return makeInt(bb._get(bi ),
|
||||
bb._get(bi + 1),
|
||||
bb._get(bi + 2),
|
||||
bb._get(bi + 3));
|
||||
}
|
||||
|
||||
static int getIntB(long a) {
|
||||
return makeInt(_get(a ),
|
||||
_get(a + 1),
|
||||
_get(a + 2),
|
||||
_get(a + 3));
|
||||
}
|
||||
|
||||
static int getInt(ByteBuffer bb, int bi, boolean bigEndian) {
|
||||
return bigEndian ? getIntB(bb, bi) : getIntL(bb, bi) ;
|
||||
}
|
||||
|
||||
static int getInt(long a, boolean bigEndian) {
|
||||
return bigEndian ? getIntB(a) : getIntL(a) ;
|
||||
}
|
||||
|
||||
private static byte int3(int x) { return (byte)(x >> 24); }
|
||||
private static byte int2(int x) { return (byte)(x >> 16); }
|
||||
private static byte int1(int x) { return (byte)(x >> 8); }
|
||||
private static byte int0(int x) { return (byte)(x ); }
|
||||
|
||||
static void putIntL(ByteBuffer bb, int bi, int x) {
|
||||
bb._put(bi + 3, int3(x));
|
||||
bb._put(bi + 2, int2(x));
|
||||
bb._put(bi + 1, int1(x));
|
||||
bb._put(bi , int0(x));
|
||||
}
|
||||
|
||||
static void putIntL(long a, int x) {
|
||||
_put(a + 3, int3(x));
|
||||
_put(a + 2, int2(x));
|
||||
_put(a + 1, int1(x));
|
||||
_put(a , int0(x));
|
||||
}
|
||||
|
||||
static void putIntB(ByteBuffer bb, int bi, int x) {
|
||||
bb._put(bi , int3(x));
|
||||
bb._put(bi + 1, int2(x));
|
||||
bb._put(bi + 2, int1(x));
|
||||
bb._put(bi + 3, int0(x));
|
||||
}
|
||||
|
||||
static void putIntB(long a, int x) {
|
||||
_put(a , int3(x));
|
||||
_put(a + 1, int2(x));
|
||||
_put(a + 2, int1(x));
|
||||
_put(a + 3, int0(x));
|
||||
}
|
||||
|
||||
static void putInt(ByteBuffer bb, int bi, int x, boolean bigEndian) {
|
||||
if (bigEndian)
|
||||
putIntB(bb, bi, x);
|
||||
else
|
||||
putIntL(bb, bi, x);
|
||||
}
|
||||
|
||||
static void putInt(long a, int x, boolean bigEndian) {
|
||||
if (bigEndian)
|
||||
putIntB(a, x);
|
||||
else
|
||||
putIntL(a, x);
|
||||
}
|
||||
|
||||
|
||||
// -- get/put long --
|
||||
|
||||
private static long makeLong(byte b7, byte b6, byte b5, byte b4,
|
||||
byte b3, byte b2, byte b1, byte b0)
|
||||
{
|
||||
return ((((long)b7 ) << 56) |
|
||||
(((long)b6 & 0xff) << 48) |
|
||||
(((long)b5 & 0xff) << 40) |
|
||||
(((long)b4 & 0xff) << 32) |
|
||||
(((long)b3 & 0xff) << 24) |
|
||||
(((long)b2 & 0xff) << 16) |
|
||||
(((long)b1 & 0xff) << 8) |
|
||||
(((long)b0 & 0xff) ));
|
||||
}
|
||||
|
||||
static long getLongL(ByteBuffer bb, int bi) {
|
||||
return makeLong(bb._get(bi + 7),
|
||||
bb._get(bi + 6),
|
||||
bb._get(bi + 5),
|
||||
bb._get(bi + 4),
|
||||
bb._get(bi + 3),
|
||||
bb._get(bi + 2),
|
||||
bb._get(bi + 1),
|
||||
bb._get(bi ));
|
||||
}
|
||||
|
||||
static long getLongL(long a) {
|
||||
return makeLong(_get(a + 7),
|
||||
_get(a + 6),
|
||||
_get(a + 5),
|
||||
_get(a + 4),
|
||||
_get(a + 3),
|
||||
_get(a + 2),
|
||||
_get(a + 1),
|
||||
_get(a ));
|
||||
}
|
||||
|
||||
static long getLongB(ByteBuffer bb, int bi) {
|
||||
return makeLong(bb._get(bi ),
|
||||
bb._get(bi + 1),
|
||||
bb._get(bi + 2),
|
||||
bb._get(bi + 3),
|
||||
bb._get(bi + 4),
|
||||
bb._get(bi + 5),
|
||||
bb._get(bi + 6),
|
||||
bb._get(bi + 7));
|
||||
}
|
||||
|
||||
static long getLongB(long a) {
|
||||
return makeLong(_get(a ),
|
||||
_get(a + 1),
|
||||
_get(a + 2),
|
||||
_get(a + 3),
|
||||
_get(a + 4),
|
||||
_get(a + 5),
|
||||
_get(a + 6),
|
||||
_get(a + 7));
|
||||
}
|
||||
|
||||
static long getLong(ByteBuffer bb, int bi, boolean bigEndian) {
|
||||
return bigEndian ? getLongB(bb, bi) : getLongL(bb, bi);
|
||||
}
|
||||
|
||||
static long getLong(long a, boolean bigEndian) {
|
||||
return bigEndian ? getLongB(a) : getLongL(a);
|
||||
}
|
||||
|
||||
private static byte long7(long x) { return (byte)(x >> 56); }
|
||||
private static byte long6(long x) { return (byte)(x >> 48); }
|
||||
private static byte long5(long x) { return (byte)(x >> 40); }
|
||||
private static byte long4(long x) { return (byte)(x >> 32); }
|
||||
private static byte long3(long x) { return (byte)(x >> 24); }
|
||||
private static byte long2(long x) { return (byte)(x >> 16); }
|
||||
private static byte long1(long x) { return (byte)(x >> 8); }
|
||||
private static byte long0(long x) { return (byte)(x ); }
|
||||
|
||||
static void putLongL(ByteBuffer bb, int bi, long x) {
|
||||
bb._put(bi + 7, long7(x));
|
||||
bb._put(bi + 6, long6(x));
|
||||
bb._put(bi + 5, long5(x));
|
||||
bb._put(bi + 4, long4(x));
|
||||
bb._put(bi + 3, long3(x));
|
||||
bb._put(bi + 2, long2(x));
|
||||
bb._put(bi + 1, long1(x));
|
||||
bb._put(bi , long0(x));
|
||||
}
|
||||
|
||||
static void putLongL(long a, long x) {
|
||||
_put(a + 7, long7(x));
|
||||
_put(a + 6, long6(x));
|
||||
_put(a + 5, long5(x));
|
||||
_put(a + 4, long4(x));
|
||||
_put(a + 3, long3(x));
|
||||
_put(a + 2, long2(x));
|
||||
_put(a + 1, long1(x));
|
||||
_put(a , long0(x));
|
||||
}
|
||||
|
||||
static void putLongB(ByteBuffer bb, int bi, long x) {
|
||||
bb._put(bi , long7(x));
|
||||
bb._put(bi + 1, long6(x));
|
||||
bb._put(bi + 2, long5(x));
|
||||
bb._put(bi + 3, long4(x));
|
||||
bb._put(bi + 4, long3(x));
|
||||
bb._put(bi + 5, long2(x));
|
||||
bb._put(bi + 6, long1(x));
|
||||
bb._put(bi + 7, long0(x));
|
||||
}
|
||||
|
||||
static void putLongB(long a, long x) {
|
||||
_put(a , long7(x));
|
||||
_put(a + 1, long6(x));
|
||||
_put(a + 2, long5(x));
|
||||
_put(a + 3, long4(x));
|
||||
_put(a + 4, long3(x));
|
||||
_put(a + 5, long2(x));
|
||||
_put(a + 6, long1(x));
|
||||
_put(a + 7, long0(x));
|
||||
}
|
||||
|
||||
static void putLong(ByteBuffer bb, int bi, long x, boolean bigEndian) {
|
||||
if (bigEndian)
|
||||
putLongB(bb, bi, x);
|
||||
else
|
||||
putLongL(bb, bi, x);
|
||||
}
|
||||
|
||||
static void putLong(long a, long x, boolean bigEndian) {
|
||||
if (bigEndian)
|
||||
putLongB(a, x);
|
||||
else
|
||||
putLongL(a, x);
|
||||
}
|
||||
|
||||
|
||||
// -- get/put float --
|
||||
|
||||
static float getFloatL(ByteBuffer bb, int bi) {
|
||||
return Float.intBitsToFloat(getIntL(bb, bi));
|
||||
}
|
||||
|
||||
static float getFloatL(long a) {
|
||||
return Float.intBitsToFloat(getIntL(a));
|
||||
}
|
||||
|
||||
static float getFloatB(ByteBuffer bb, int bi) {
|
||||
return Float.intBitsToFloat(getIntB(bb, bi));
|
||||
}
|
||||
|
||||
static float getFloatB(long a) {
|
||||
return Float.intBitsToFloat(getIntB(a));
|
||||
}
|
||||
|
||||
static float getFloat(ByteBuffer bb, int bi, boolean bigEndian) {
|
||||
return bigEndian ? getFloatB(bb, bi) : getFloatL(bb, bi);
|
||||
}
|
||||
|
||||
static float getFloat(long a, boolean bigEndian) {
|
||||
return bigEndian ? getFloatB(a) : getFloatL(a);
|
||||
}
|
||||
|
||||
static void putFloatL(ByteBuffer bb, int bi, float x) {
|
||||
putIntL(bb, bi, Float.floatToRawIntBits(x));
|
||||
}
|
||||
|
||||
static void putFloatL(long a, float x) {
|
||||
putIntL(a, Float.floatToRawIntBits(x));
|
||||
}
|
||||
|
||||
static void putFloatB(ByteBuffer bb, int bi, float x) {
|
||||
putIntB(bb, bi, Float.floatToRawIntBits(x));
|
||||
}
|
||||
|
||||
static void putFloatB(long a, float x) {
|
||||
putIntB(a, Float.floatToRawIntBits(x));
|
||||
}
|
||||
|
||||
static void putFloat(ByteBuffer bb, int bi, float x, boolean bigEndian) {
|
||||
if (bigEndian)
|
||||
putFloatB(bb, bi, x);
|
||||
else
|
||||
putFloatL(bb, bi, x);
|
||||
}
|
||||
|
||||
static void putFloat(long a, float x, boolean bigEndian) {
|
||||
if (bigEndian)
|
||||
putFloatB(a, x);
|
||||
else
|
||||
putFloatL(a, x);
|
||||
}
|
||||
|
||||
|
||||
// -- get/put double --
|
||||
|
||||
static double getDoubleL(ByteBuffer bb, int bi) {
|
||||
return Double.longBitsToDouble(getLongL(bb, bi));
|
||||
}
|
||||
|
||||
static double getDoubleL(long a) {
|
||||
return Double.longBitsToDouble(getLongL(a));
|
||||
}
|
||||
|
||||
static double getDoubleB(ByteBuffer bb, int bi) {
|
||||
return Double.longBitsToDouble(getLongB(bb, bi));
|
||||
}
|
||||
|
||||
static double getDoubleB(long a) {
|
||||
return Double.longBitsToDouble(getLongB(a));
|
||||
}
|
||||
|
||||
static double getDouble(ByteBuffer bb, int bi, boolean bigEndian) {
|
||||
return bigEndian ? getDoubleB(bb, bi) : getDoubleL(bb, bi);
|
||||
}
|
||||
|
||||
static double getDouble(long a, boolean bigEndian) {
|
||||
return bigEndian ? getDoubleB(a) : getDoubleL(a);
|
||||
}
|
||||
|
||||
static void putDoubleL(ByteBuffer bb, int bi, double x) {
|
||||
putLongL(bb, bi, Double.doubleToRawLongBits(x));
|
||||
}
|
||||
|
||||
static void putDoubleL(long a, double x) {
|
||||
putLongL(a, Double.doubleToRawLongBits(x));
|
||||
}
|
||||
|
||||
static void putDoubleB(ByteBuffer bb, int bi, double x) {
|
||||
putLongB(bb, bi, Double.doubleToRawLongBits(x));
|
||||
}
|
||||
|
||||
static void putDoubleB(long a, double x) {
|
||||
putLongB(a, Double.doubleToRawLongBits(x));
|
||||
}
|
||||
|
||||
static void putDouble(ByteBuffer bb, int bi, double x, boolean bigEndian) {
|
||||
if (bigEndian)
|
||||
putDoubleB(bb, bi, x);
|
||||
else
|
||||
putDoubleL(bb, bi, x);
|
||||
}
|
||||
|
||||
static void putDouble(long a, double x, boolean bigEndian) {
|
||||
if (bigEndian)
|
||||
putDoubleB(a, x);
|
||||
else
|
||||
putDoubleL(a, x);
|
||||
}
|
||||
|
||||
|
||||
// -- Unsafe access --
|
||||
|
||||
private static final Unsafe unsafe = Unsafe.getUnsafe();
|
||||
|
||||
private static byte _get(long a) {
|
||||
return unsafe.getByte(a);
|
||||
}
|
||||
|
||||
private static void _put(long a, byte b) {
|
||||
unsafe.putByte(a, b);
|
||||
}
|
||||
|
||||
static Unsafe unsafe() {
|
||||
return unsafe;
|
||||
}
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
/*
|
||||
* Copyright (c) 2000, 2013, Oracle and/or its affiliates. All rights reserved.
|
||||
* Copyright (c) 2000, 2016, Oracle and/or its affiliates. All rights reserved.
|
||||
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
|
||||
*
|
||||
* This code is free software; you can redistribute it and/or modify it
|
||||
|
@ -27,6 +27,8 @@
|
|||
|
||||
package java.nio;
|
||||
|
||||
import jdk.internal.misc.Unsafe;
|
||||
|
||||
|
||||
class ByteBufferAs$Type$Buffer$RW$$BO$ // package-private
|
||||
extends {#if[ro]?ByteBufferAs}$Type$Buffer{#if[ro]?$BO$}
|
||||
|
@ -34,6 +36,9 @@ class ByteBufferAs$Type$Buffer$RW$$BO$ // package-private
|
|||
|
||||
#if[rw]
|
||||
|
||||
// Cached unsafe-access object
|
||||
private static final Unsafe unsafe = Bits.unsafe();
|
||||
|
||||
protected final ByteBuffer bb;
|
||||
protected final int offset;
|
||||
|
||||
|
@ -107,17 +112,27 @@ class ByteBufferAs$Type$Buffer$RW$$BO$ // package-private
|
|||
return (i << $LG_BYTES_PER_VALUE$) + offset;
|
||||
}
|
||||
|
||||
private long byteOffset(long i) {
|
||||
return (i << $LG_BYTES_PER_VALUE$) + bb.address + offset;
|
||||
}
|
||||
|
||||
public $type$ get() {
|
||||
return Bits.get$Type$$BO$(bb, ix(nextGetIndex()));
|
||||
$memtype$ x = unsafe.get$Memtype$Unaligned(bb.hb, byteOffset(nextGetIndex()),
|
||||
{#if[boB]?true:false});
|
||||
return $fromBits$(x);
|
||||
}
|
||||
|
||||
public $type$ get(int i) {
|
||||
return Bits.get$Type$$BO$(bb, ix(checkIndex(i)));
|
||||
$memtype$ x = unsafe.get$Memtype$Unaligned(bb.hb, byteOffset(checkIndex(i)),
|
||||
{#if[boB]?true:false});
|
||||
return $fromBits$(x);
|
||||
}
|
||||
|
||||
#if[streamableType]
|
||||
$type$ getUnchecked(int i) {
|
||||
return Bits.get$Type$$BO$(bb, ix(i));
|
||||
$memtype$ x = unsafe.get$Memtype$Unaligned(bb.hb, byteOffset(i),
|
||||
{#if[boB]?true:false});
|
||||
return $fromBits$(x);
|
||||
}
|
||||
#end[streamableType]
|
||||
|
||||
|
@ -125,7 +140,9 @@ class ByteBufferAs$Type$Buffer$RW$$BO$ // package-private
|
|||
|
||||
public $Type$Buffer put($type$ x) {
|
||||
#if[rw]
|
||||
Bits.put$Type$$BO$(bb, ix(nextPutIndex()), x);
|
||||
$memtype$ y = $toBits$(x);
|
||||
unsafe.put$Memtype$Unaligned(bb.hb, byteOffset(nextPutIndex()), y,
|
||||
{#if[boB]?true:false});
|
||||
return this;
|
||||
#else[rw]
|
||||
throw new ReadOnlyBufferException();
|
||||
|
@ -134,7 +151,9 @@ class ByteBufferAs$Type$Buffer$RW$$BO$ // package-private
|
|||
|
||||
public $Type$Buffer put(int i, $type$ x) {
|
||||
#if[rw]
|
||||
Bits.put$Type$$BO$(bb, ix(checkIndex(i)), x);
|
||||
$memtype$ y = $toBits$(x);
|
||||
unsafe.put$Memtype$Unaligned(bb.hb, byteOffset(checkIndex(i)), y,
|
||||
{#if[boB]?true:false});
|
||||
return this;
|
||||
#else[rw]
|
||||
throw new ReadOnlyBufferException();
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
/*
|
||||
* Copyright (c) 2000, 2003, Oracle and/or its affiliates. All rights reserved.
|
||||
* Copyright (c) 2000, 2016, Oracle and/or its affiliates. All rights reserved.
|
||||
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
|
||||
*
|
||||
* This code is free software; you can redistribute it and/or modify it
|
||||
|
@ -32,11 +32,8 @@ class XXX {
|
|||
#if[rw]
|
||||
|
||||
private $type$ get$Type$(long a) {
|
||||
if (unaligned) {
|
||||
$memtype$ x = unsafe.get$Memtype$(a);
|
||||
return $fromBits$(nativeByteOrder ? x : Bits.swap(x));
|
||||
}
|
||||
return Bits.get$Type$(a, bigEndian);
|
||||
$memtype$ x = unsafe.get$Memtype$Unaligned(null, a, bigEndian);
|
||||
return $fromBits$(x);
|
||||
}
|
||||
|
||||
public $type$ get$Type$() {
|
||||
|
@ -51,12 +48,8 @@ class XXX {
|
|||
|
||||
private ByteBuffer put$Type$(long a, $type$ x) {
|
||||
#if[rw]
|
||||
if (unaligned) {
|
||||
$memtype$ y = $toBits$(x);
|
||||
unsafe.put$Memtype$(a, (nativeByteOrder ? y : Bits.swap(y)));
|
||||
} else {
|
||||
Bits.put$Type$(a, x, bigEndian);
|
||||
}
|
||||
$memtype$ y = $toBits$(x);
|
||||
unsafe.put$Memtype$Unaligned(null, a, y, bigEndian);
|
||||
return this;
|
||||
#else[rw]
|
||||
throw new ReadOnlyBufferException();
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue