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

com.hazelcast.util.ByteUtil Maven / Gradle / Ivy

There is a newer version: 5.5.0
Show newest version
/*
 * Copyright (c) 2008-2013, Hazelcast, Inc. All Rights Reserved.
 *
 * 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 com.hazelcast.util;

/**
 * This class allows to set, clear and check bits of a byte value.
 */
public final class ByteUtil {

    /**
     * Array of bit positions.
     */
    private static final byte[] POWERS = new byte[]{
            (byte) (1 << 0), (byte) (1 << 1), (byte) (1 << 2), (byte) (1 << 3),
            (byte) (1 << 4), (byte) (1 << 5), (byte) (1 << 6), (byte) (1 << 7)
    };

    /**
     * All members are static and there should
     * never be an instance of this class.
     */
    private ByteUtil() {
    }

    /**
     * Sets a bit to 1.
     *
     * @param number the original byte value
     * @param index  the bit to set
     * @return the modified byte value
     */
    public static byte setTrue(final byte number, final int index) {
        return (byte) (number | POWERS[index]);
    }

    /**
     * Clears a bit, by setting it to 0.
     *
     * @param number the original byte value
     * @param index  the bit to set
     * @return the modified byte value
     */
    public static byte setFalse(final byte number, final int index) {
        return (byte) (number & ~(POWERS[index]));
    }

    /**
     * Checks if the index-th bit of number is set.
     *
     * @param number the byte value
     * @param index  the bit to check
     * @return true if the bit is set, false otherwise
     */
    public static boolean isTrue(final byte number, final int index) {
        return (number & (POWERS[index])) != 0;
    }

    /**
     * Checks if the index-th bit of number is NOT set.
     *
     * @param number the byte value
     * @param index  the bit to check
     * @return true if the bit is NOT set, false otherwise
     */
    public static boolean isFalse(final byte number, final int index) {
        return (number & (POWERS[index])) == 0;
    }

    public static byte toByte(boolean... values) {
        if (values.length > Byte.SIZE) {
            throw new IllegalArgumentException(
                    "Expected less or equal to " + Byte.SIZE + " arguments");
        }
        byte b = 0;
        for (int i = 0; i < values.length; i++) {
            b |= values[i] ? POWERS[i] : 0;
        }
        return b;
    }

    public static boolean[] fromByte(byte b) {
        boolean[] values = new boolean[Byte.SIZE];
        for (int i = 0; i < values.length; i++) {
            values[i] = (b & POWERS[i]) != 0;
        }
        return values;
    }

    public static String toBinaryString(final byte number) {
        final StringBuilder builder = new StringBuilder(Byte.SIZE);
        for (int i = 0; i < Byte.SIZE; i++) {
            final int q = number & POWERS[Byte.SIZE - 1 - i];
            builder.append(q != 0 ? '1' : '0');
        }
        return builder.toString();
    }
}




© 2015 - 2024 Weber Informatics LLC | Privacy Policy