Class BitUtil


  • public final class BitUtil
    extends Object
    A variety of high efficiency bit twiddling routines and encoders for primitives.
    NOTE: This API is for internal purposes only and might change in incompatible ways in the next release.
    • Field Detail

      • VH_LE_SHORT

        public static final VarHandle VH_LE_SHORT
        A VarHandle to read/write little endian short from/to a byte array. Shape: short vh.get(byte[] arr, int ofs) and void vh.set(byte[] arr, int ofs, short val)
      • VH_LE_INT

        public static final VarHandle VH_LE_INT
        A VarHandle to read/write little endian int from a byte array. Shape: int vh.get(byte[] arr, int ofs) and void vh.set(byte[] arr, int ofs, int val)
      • VH_LE_LONG

        public static final VarHandle VH_LE_LONG
        A VarHandle to read/write little endian long from a byte array. Shape: long vh.get(byte[] arr, int ofs) and void vh.set(byte[] arr, int ofs, long val)
      • VH_LE_FLOAT

        public static final VarHandle VH_LE_FLOAT
        A VarHandle to read/write little endian float from a byte array. Shape: float vh.get(byte[] arr, int ofs) and void vh.set(byte[] arr, int ofs, float val)
      • VH_LE_DOUBLE

        public static final VarHandle VH_LE_DOUBLE
        A VarHandle to read/write little endian double from a byte array. Shape: double vh.get(byte[] arr, int ofs) and void vh.set(byte[] arr, int ofs, double val)
      • VH_BE_SHORT

        @Deprecated
        public static final VarHandle VH_BE_SHORT
        Deprecated.
        Better use little endian unless it is needed for backwards compatibility.
        A VarHandle to read/write big endian short from a byte array. Shape: short vh.get(byte[] arr, int ofs) and void vh.set(byte[] arr, int ofs, short val)
      • VH_BE_INT

        @Deprecated
        public static final VarHandle VH_BE_INT
        Deprecated.
        Better use little endian unless it is needed for backwards compatibility.
        A VarHandle to read/write big endian int from a byte array. Shape: int vh.get(byte[] arr, int ofs) and void vh.set(byte[] arr, int ofs, int val)
      • VH_BE_LONG

        @Deprecated
        public static final VarHandle VH_BE_LONG
        Deprecated.
        Better use little endian unless it is needed for backwards compatibility.
        A VarHandle to read/write big endian long from a byte array. Shape: long vh.get(byte[] arr, int ofs) and void vh.set(byte[] arr, int ofs, long val)
      • VH_BE_FLOAT

        @Deprecated
        public static final VarHandle VH_BE_FLOAT
        Deprecated.
        Better use little endian unless it is needed for backwards compatibility.
        A VarHandle to read/write big endian float from a byte array. Shape: float vh.get(byte[] arr, int ofs) and void vh.set(byte[] arr, int ofs, float val)
      • VH_BE_DOUBLE

        @Deprecated
        public static final VarHandle VH_BE_DOUBLE
        Deprecated.
        Better use little endian unless it is needed for backwards compatibility.
        A VarHandle to read/write big endian double from a byte array. Shape: double vh.get(byte[] arr, int ofs) and void vh.set(byte[] arr, int ofs, double val)
    • Method Detail

      • nextHighestPowerOfTwo

        public static int nextHighestPowerOfTwo​(int v)
        returns the next highest power of two, or the current value if it's already a power of two or zero
      • nextHighestPowerOfTwo

        public static long nextHighestPowerOfTwo​(long v)
        returns the next highest power of two, or the current value if it's already a power of two or zero
      • interleave

        public static long interleave​(int even,
                                      int odd)
        Interleaves the first 32 bits of each long value

        Adapted from: http://graphics.stanford.edu/~seander/bithacks.html#InterleaveBMN

      • deinterleave

        public static long deinterleave​(long b)
        Extract just the even-bits value as a long from the bit-interleaved value
      • flipFlop

        public static long flipFlop​(long b)
        flip flops odd with even bits
      • zigZagEncode

        public static int zigZagEncode​(int i)
        Same as zigZagEncode(long) but on integers.
      • zigZagEncode

        public static long zigZagEncode​(long l)
        Zig-zag encode the provided long. Assuming the input is a signed long whose absolute value can be stored on n bits, the returned value will be an unsigned long that can be stored on n+1 bits.
      • zigZagDecode

        public static int zigZagDecode​(int i)
        Decode an int previously encoded with zigZagEncode(int).
      • zigZagDecode

        public static long zigZagDecode​(long l)
        Decode a long previously encoded with zigZagEncode(long).