All Downloads are FREE. Search and download functionalities are using the official Maven repository.

java.nio.Bits Maven / Gradle / Ivy

/*
 * Copyright 2016 Carlos Ballesteros Velasco
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *      http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */

package java.nio;

import jtransc.JTranscBits;

class Bits {
    private Bits() {
    }

    static char getCharL(ByteBuffer bb, int bi) {
        return JTranscBits.makeChar(bb._get(bi + 1), bb._get(bi));
    }

    static char getCharB(ByteBuffer bb, int bi) {
        return JTranscBits.makeChar(bb._get(bi), bb._get(bi + 1));
    }

    static char getChar(ByteBuffer bb, int bi, boolean bigEndian) {
        return bigEndian ? getCharB(bb, bi) : getCharL(bb, bi);
    }

    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 putCharB(ByteBuffer bb, int bi, char x) {
        bb._put(bi, char1(x));
        bb._put(bi + 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 short getShortL(ByteBuffer bb, int bi) {
        return JTranscBits.makeShort(bb._get(bi + 1), bb._get(bi));
    }

    static short getShortB(ByteBuffer bb, int bi) {
        return JTranscBits.makeShort(bb._get(bi), bb._get(bi + 1));
    }

    static short getShort(ByteBuffer bb, int bi, boolean bigEndian) {
        return bigEndian ? getShortB(bb, bi) : getShortL(bb, bi);
    }

    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 putShortB(ByteBuffer bb, int bi, short x) {
        bb._put(bi, short1(x));
        bb._put(bi + 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);
    }

    // -- get/put int --

    static int getIntL(ByteBuffer bb, int bi) {
        return JTranscBits.makeInt(bb._get(bi + 3), bb._get(bi + 2), bb._get(bi + 1), bb._get(bi));
    }

    static int getIntB(ByteBuffer bb, int bi) {
        return JTranscBits.makeInt(bb._get(bi), bb._get(bi + 1), bb._get(bi + 2), bb._get(bi + 3));
    }

    static int getInt(ByteBuffer bb, int bi, boolean bigEndian) {
        return bigEndian ? getIntB(bb, bi) : getIntL(bb, bi);
    }

    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 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 putInt(ByteBuffer bb, int bi, int x, boolean bigEndian) {
        if (bigEndian) putIntB(bb, bi, x);
        else putIntL(bb, bi, x);
    }

    // -- get/put long --

    static long getLongL(ByteBuffer bb, int bi) {
        return JTranscBits.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 getLongB(ByteBuffer bb, int bi) {
        return JTranscBits.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 getLong(ByteBuffer bb, int bi, boolean bigEndian) {
        return bigEndian ? getLongB(bb, bi) : getLongL(bb, bi);
    }

    static void putLongL(ByteBuffer bb, int bi, long x) {
        bb._put(bi + 7, JTranscBits.long7(x));
        bb._put(bi + 6, JTranscBits.long6(x));
        bb._put(bi + 5, JTranscBits.long5(x));
        bb._put(bi + 4, JTranscBits.long4(x));
        bb._put(bi + 3, JTranscBits.long3(x));
        bb._put(bi + 2, JTranscBits.long2(x));
        bb._put(bi + 1, JTranscBits.long1(x));
        bb._put(bi + 0, JTranscBits.long0(x));
    }

    static void putLongB(ByteBuffer bb, int bi, long x) {
        bb._put(bi + 0, JTranscBits.long7(x));
        bb._put(bi + 1, JTranscBits.long6(x));
        bb._put(bi + 2, JTranscBits.long5(x));
        bb._put(bi + 3, JTranscBits.long4(x));
        bb._put(bi + 4, JTranscBits.long3(x));
        bb._put(bi + 5, JTranscBits.long2(x));
        bb._put(bi + 6, JTranscBits.long1(x));
        bb._put(bi + 7, JTranscBits.long0(x));
    }

    static void putLong(ByteBuffer bb, int bi, long x, boolean bigEndian) {
        if (bigEndian) putLongB(bb, bi, x);else putLongL(bb, bi, x);
    }

    // -- get/put float --

    static float getFloatL(ByteBuffer bb, int bi) {
        return Float.intBitsToFloat(getIntL(bb, bi));
    }

    static float getFloatB(ByteBuffer bb, int bi) {
        return Float.intBitsToFloat(getIntB(bb, bi));
    }

    static float getFloat(ByteBuffer bb, int bi, boolean bigEndian) {
        return bigEndian ? getFloatB(bb, bi) : getFloatL(bb, bi);
    }

    static void putFloatL(ByteBuffer bb, int bi, float x) {
        putIntL(bb, bi, Float.floatToRawIntBits(x));
    }

    static void putFloatB(ByteBuffer bb, int bi, float x) {
        putIntB(bb, bi, 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 double getDoubleL(ByteBuffer bb, int bi) {
        return Double.longBitsToDouble(getLongL(bb, bi));
    }

    static double getDoubleB(ByteBuffer bb, int bi) {
        return Double.longBitsToDouble(getLongB(bb, bi));
    }

    static double getDouble(ByteBuffer bb, int bi, boolean bigEndian) {
        return bigEndian ? getDoubleB(bb, bi) : getDoubleL(bb, bi);
    }

    static void putDoubleL(ByteBuffer bb, int bi, double x) {
        putLongL(bb, bi, Double.doubleToRawLongBits(x));
    }

    static void putDoubleB(ByteBuffer bb, int bi, double x) {
        putLongB(bb, bi, 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);
    }

    private static int pageSize = 4096;

    static int pageSize() {
        return pageSize;
    }

    static int pageCount(long size) {
        return (int) (size + (long) pageSize() - 1L) / pageSize();
    }

    static boolean unaligned() {
        return false;
    }

    private static volatile long maxMemory = 4096;
    private static volatile long reservedMemory;
    private static volatile long totalCapacity;
    private static volatile long count;
    private static boolean memoryLimitSet = false;

    static void unreserveMemory(long size, int cap) {
        if (reservedMemory > 0) {
            reservedMemory -= size;
            totalCapacity -= cap;
            count--;
            assert (reservedMemory > -1);
        }
    }

    static void copyFromCharArray(Object src, long srcPos, long dstAddr, long length) {
        copyFromShortArray(src, srcPos, dstAddr, length);
    }

    static native void copyFromShortArray(Object src, long srcPos, long dstAddr, long length);

    static native void copyFromIntArray(Object src, long srcPos, long dstAddr, long length);

    static native void copyFromLongArray(Object src, long srcPos, long dstAddr, long length);

}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy