package org.glassfish.grizzly.memory;
class Bits {
private Bits() {
}
static char makeChar(byte b1, byte b0) {
return (char) (b1 << 8 | b0 & 0xff);
}
static char getCharL(byte[] bb, int bi) {
return makeChar(bb[bi + 1], bb[bi]);
}
static char getCharB(byte[] bb, int bi) {
return makeChar(bb[bi], bb[bi + 1]);
}
static char getChar(byte[] bb, int bi, boolean bigEndian) {
return bigEndian ? getCharB(bb, bi) : getCharL(bb, bi);
}
static byte char1(char x) {
return (byte) (x >> 8);
}
static byte char0(char x) {
return (byte) x;
}
static void putCharL(byte[] bb, int bi, char x) {
bb[bi] = char0(x);
bb[bi + 1] = char1(x);
}
static void putCharB(byte[] bb, int bi, char x) {
bb[bi] = char1(x);
bb[bi + 1] = char0(x);
}
static void putChar(byte[] bb, int bi, char x, boolean bigEndian) {
if (bigEndian) {
putCharB(bb, bi, x);
} else {
putCharL(bb, bi, x);
}
}
static short makeShort(byte b1, byte b0) {
return (short) (b1 << 8 | b0 & 0xff);
}
static short getShortL(byte[] bb, int bi) {
return makeShort(bb[bi + 1], bb[bi]);
}
static short getShortB(byte[] bb, int bi) {
return makeShort(bb[bi], bb[bi + 1]);
}
static short getShort(byte[] bb, int bi, boolean bigEndian) {
return bigEndian ? getShortB(bb, bi) : getShortL(bb, bi);
}
static byte short1(short x) {
return (byte) (x >> 8);
}
static byte short0(short x) {
return (byte) x;
}
static void putShortL(byte[] bb, int bi, short x) {
bb[bi] = short0(x);
bb[bi + 1] = short1(x);
}
static void putShortB(byte[] bb, int bi, short x) {
bb[bi] = short1(x);
bb[bi + 1] = short0(x);
}
static void putShort(byte[] bb, int bi, short x, boolean bigEndian) {
if (bigEndian) {
putShortB(bb, bi, x);
} else {
putShortL(bb, bi, x);
}
}
static int makeInt(byte b3, byte b2, byte b1, byte b0) {
return (b3 & 0xff) << 24 | (b2 & 0xff) << 16 | (b1 & 0xff) << 8 | b0 & 0xff;
}
static int getIntL(byte[] bb, int bi) {
return makeInt(bb[bi + 3], bb[bi + 2], bb[bi + 1], bb[bi]);
}
static int getIntB(byte[] bb, int bi) {
return makeInt(bb[bi], bb[bi + 1], bb[bi + 2], bb[bi + 3]);
}
static int getInt(byte[] bb, int bi, boolean bigEndian) {
return bigEndian ? getIntB(bb, bi) : getIntL(bb, bi);
}
static byte int3(int x) {
return (byte) (x >> 24);
}
static byte int2(int x) {
return (byte) (x >> 16);
}
static byte int1(int x) {
return (byte) (x >> 8);
}
static byte int0(int x) {
return (byte) x;
}
static void putIntL(byte[] bb, int bi, int x) {
bb[bi + 3] = int3(x);
bb[bi + 2] = int2(x);
bb[bi + 1] = int1(x);
bb[bi] = int0(x);
}
static void putIntB(byte[] bb, int bi, int x) {
bb[bi] = int3(x);
bb[bi + 1] = int2(x);
bb[bi + 2] = int1(x);
bb[bi + 3] = int0(x);
}
static void putInt(byte[] bb, int bi, int x, boolean bigEndian) {
if (bigEndian) {
putIntB(bb, bi, x);
} else {
putIntL(bb, bi, x);
}
}
static long makeLong(byte b7, byte b6, byte b5, byte b4, byte b3, byte b2, byte b1, byte b0) {
return ((long) b7 & 0xff) << 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(byte[] bb, int bi) {
return makeLong(bb[bi + 7], bb[bi + 6], bb[bi + 5], bb[bi + 4], bb[bi + 3], bb[bi + 2], bb[bi + 1], bb[bi]);
}
static long getLongB(byte[] bb, int bi) {
return makeLong(bb[bi], bb[bi + 1], bb[bi + 2], bb[bi + 3], bb[bi + 4], bb[bi + 5], bb[bi + 6], bb[bi + 7]);
}
static long getLong(byte[] bb, int bi, boolean bigEndian) {
return bigEndian ? getLongB(bb, bi) : getLongL(bb, bi);
}
static byte long7(long x) {
return (byte) (x >> 56);
}
static byte long6(long x) {
return (byte) (x >> 48);
}
static byte long5(long x) {
return (byte) (x >> 40);
}
static byte long4(long x) {
return (byte) (x >> 32);
}
static byte long3(long x) {
return (byte) (x >> 24);
}
static byte long2(long x) {
return (byte) (x >> 16);
}
static byte long1(long x) {
return (byte) (x >> 8);
}
static byte long0(long x) {
return (byte) x;
}
static void putLongL(byte[] bb, int bi, long x) {
bb[bi + 7] = long7(x);
bb[bi + 6] = long6(x);
bb[bi + 5] = long5(x);
bb[bi + 4] = long4(x);
bb[bi + 3] = long3(x);
bb[bi + 2] = long2(x);
bb[bi + 1] = long1(x);
bb[bi] = long0(x);
}
static void putLongB(byte[] bb, int bi, long x) {
bb[bi] = long7(x);
bb[bi + 1] = long6(x);
bb[bi + 2] = long5(x);
bb[bi + 3] = long4(x);
bb[bi + 4] = long3(x);
bb[bi + 5] = long2(x);
bb[bi + 6] = long1(x);
bb[bi + 7] = long0(x);
}
static void putLong(byte[] bb, int bi, long x, boolean bigEndian) {
if (bigEndian) {
putLongB(bb, bi, x);
} else {
putLongL(bb, bi, x);
}
}
static float getFloatL(byte[] bb, int bi) {
return Float.intBitsToFloat(getIntL(bb, bi));
}
static float getFloatB(byte[] bb, int bi) {
return Float.intBitsToFloat(getIntB(bb, bi));
}
static float getFloat(byte[] bb, int bi, boolean bigEndian) {
return bigEndian ? getFloatB(bb, bi) : getFloatL(bb, bi);
}
static void putFloatL(byte[] bb, int bi, float x) {
putIntL(bb, bi, Float.floatToRawIntBits(x));
}
static void putFloatB(byte[] bb, int bi, float x) {
putIntB(bb, bi, Float.floatToRawIntBits(x));
}
static void putFloat(byte[] bb, int bi, float x, boolean bigEndian) {
if (bigEndian) {
putFloatB(bb, bi, x);
} else {
putFloatL(bb, bi, x);
}
}
static double getDoubleL(byte[] bb, int bi) {
return Double.longBitsToDouble(getLongL(bb, bi));
}
static double getDoubleB(byte[] bb, int bi) {
return Double.longBitsToDouble(getLongB(bb, bi));
}
static double getDouble(byte[] bb, int bi, boolean bigEndian) {
return bigEndian ? getDoubleB(bb, bi) : getDoubleL(bb, bi);
}
static void putDoubleL(byte[] bb, int bi, double x) {
putLongL(bb, bi, Double.doubleToRawLongBits(x));
}
static void putDoubleB(byte[] bb, int bi, double x) {
putLongB(bb, bi, Double.doubleToRawLongBits(x));
}
static void putDouble(byte[] bb, int bi, double x, boolean bigEndian) {
if (bigEndian) {
putDoubleB(bb, bi, x);
} else {
putDoubleL(bb, bi, x);
}
}
}