Class BitField

java.lang.Object
org.apache.commons.lang3.BitField

public class BitField extends Object
Supports operations on bit-mapped fields. Instances of this class can be used to store a flag or data within an int, short or byte.

Each BitField is constructed with a mask value, which indicates the bits that will be used to store and retrieve the data for that field. For instance, the mask 0xFF indicates the least-significant byte should be used to store the data.

As an example, consider a car painting machine that accepts paint instructions as integers. Bit fields can be used to encode this:


 // blue, green and red are 1 byte values (0-255) stored in the three least
 // significant bytes
 BitField blue = new BitField(0xFF);

 BitField green = new BitField(0xFF00);

 BitField red = new BitField(0xFF0000);

 // anyColor is a flag triggered if any color is used
 BitField anyColor = new BitField(0xFFFFFF);

 // isMetallic is a single bit flag
 BitField isMetallic = new BitField(0x1000000);
 

Using these BitField instances, a paint instruction can be encoded into an integer:

 int paintInstruction = 0;
 paintInstruction = red.setValue(paintInstruction, 35);
 paintInstruction = green.setValue(paintInstruction, 100);
 paintInstruction = blue.setValue(paintInstruction, 255);
 

Flags and data can be retrieved from the integer:

 // Prints true if red, green or blue is non-zero
 System.out.println(anyColor.isSet(paintInstruction)); // prints true
 // Prints value of red, green and blue
 System.out.println(red.getValue(paintInstruction)); // prints 35
 System.out.println(green.getValue(paintInstruction)); // prints 100
 System.out.println(blue.getValue(paintInstruction)); // prints 255
 // Prints true if isMetallic was set
 System.out.println(isMetallic.isSet(paintInstruction)); // prints false
 
Since:
2.0
  • Constructor Summary

    Constructors
    Constructor
    Description
    BitField(int mask)
    Creates a BitField instance.
    BitField(long mask)
    Creates a BitField instance.
  • Method Summary

    Modifier and Type
    Method
    Description
    int
    clear(int holder)
    Clears the bits.
    long
    clear(long holder)
    Clears the bits.
    byte
    clearByte(byte holder)
    Clears the bits.
    short
    clearShort(short holder)
    Clears the bits.
    int
    getRawValue(int holder)
    Gets the value for the specified BitField, unshifted.
    long
    getRawValue(long holder)
    Gets the value for the specified BitField, unshifted.
    short
    getShortRawValue(short holder)
    Obtains the value for the specified BitField, unshifted.
    short
    getShortValue(short holder)
    Gets the value for the specified BitField, appropriately shifted right, as a short.
    int
    getValue(int holder)
    Gets the value for the specified BitField, appropriately shifted right.
    long
    getValue(long holder)
    Gets the value for the specified BitField, appropriately shifted right.
    boolean
    isAllSet(int holder)
    Tests whether all of the bits are set or not.
    boolean
    isAllSet(long holder)
    Tests whether all of the bits are set or not.
    boolean
    isSet(int holder)
    Tests whether the field is set or not.
    boolean
    isSet(long holder)
    Tests whether the field is set or not.
    int
    set(int holder)
    Sets the bits.
    long
    set(long holder)
    Sets the bits.
    int
    setBoolean(int holder, boolean flag)
    Sets a boolean BitField.
    long
    setBoolean(long holder, boolean flag)
    Sets a boolean BitField.
    byte
    setByte(byte holder)
    Sets the bits.
    byte
    setByteBoolean(byte holder, boolean flag)
    Sets a boolean BitField.
    short
    setShort(short holder)
    Sets the bits.
    short
    setShortBoolean(short holder, boolean flag)
    Sets a boolean BitField.
    short
    setShortValue(short holder, short value)
    Sets the bits with new values.
    int
    setValue(int holder, int value)
    Sets the bits with new values.
    long
    setValue(long holder, long value)
    Sets the bits with new values.

    Methods inherited from class java.lang.Object

    clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
  • Constructor Details

    • BitField

      public BitField(int mask)
      Creates a BitField instance.
      Parameters:
      mask - the mask specifying which bits apply to this BitField. Bits that are set in this mask are the bits that this BitField operates on.
    • BitField

      public BitField(long mask)
      Creates a BitField instance.
      Parameters:
      mask - the mask specifying which bits apply to this BitField. Bits that are set in this mask are the bits that this BitField operates on.
      Since:
      3.21.0
  • Method Details

    • clear

      public int clear(int holder)
      Clears the bits.
      Parameters:
      holder - the int data containing the bits we're interested in.
      Returns:
      the value of holder with the specified bits cleared (set to 0).
    • clear

      public long clear(long holder)
      Clears the bits.
      Parameters:
      holder - the long data containing the bits we're interested in.
      Returns:
      the value of holder with the specified bits cleared (set to 0).
      Since:
      3.21.0
    • clearByte

      public byte clearByte(byte holder)
      Clears the bits.
      Parameters:
      holder - the byte data containing the bits we're interested in.
      Returns:
      the value of holder with the specified bits cleared (set to 0).
    • clearShort

      public short clearShort(short holder)
      Clears the bits.
      Parameters:
      holder - the short data containing the bits we're interested in.
      Returns:
      the value of holder with the specified bits cleared (set to 0).
    • getRawValue

      public int getRawValue(int holder)
      Gets the value for the specified BitField, unshifted.
      Parameters:
      holder - the int data containing the bits we're interested in.
      Returns:
      the selected bits.
    • getRawValue

      public long getRawValue(long holder)
      Gets the value for the specified BitField, unshifted.
      Parameters:
      holder - the long data containing the bits we're interested in.
      Returns:
      the selected bits.
      Since:
      3.21.0
    • getShortRawValue

      public short getShortRawValue(short holder)
      Obtains the value for the specified BitField, unshifted.
      Parameters:
      holder - the short data containing the bits we're interested in.
      Returns:
      the selected bits.
    • getShortValue

      public short getShortValue(short holder)
      Gets the value for the specified BitField, appropriately shifted right, as a short.

      Many users of a BitField will want to treat the specified bits as an int value, and will not want to be aware that the value is stored as a BitField (and so shifted left so many bits).

      Parameters:
      holder - the short data containing the bits we're interested in.
      Returns:
      the selected bits, shifted right appropriately.
      See Also:
    • getValue

      public int getValue(int holder)
      Gets the value for the specified BitField, appropriately shifted right.

      Many users of a BitField will want to treat the specified bits as an int value, and will not want to be aware that the value is stored as a BitField (and so shifted left so many bits).

      Parameters:
      holder - the int data containing the bits we're interested in.
      Returns:
      the selected bits, shifted right appropriately.
      See Also:
    • getValue

      public long getValue(long holder)
      Gets the value for the specified BitField, appropriately shifted right.

      Many users of a BitField will want to treat the specified bits as an long value, and will not want to be aware that the value is stored as a BitField (and so shifted left so many bits).

      Parameters:
      holder - the long data containing the bits we're interested in.
      Returns:
      the selected bits, shifted right appropriately.
      Since:
      3.21.0
      See Also:
    • isAllSet

      public boolean isAllSet(int holder)
      Tests whether all of the bits are set or not.

      This is a stricter test than isSet(int), in that all of the bits in a multi-bit set must be set for this method to return true.

      Parameters:
      holder - the int data containing the bits we're interested in.
      Returns:
      true if all of the bits are set, else false.
    • isAllSet

      public boolean isAllSet(long holder)
      Tests whether all of the bits are set or not.

      This is a stricter test than isSet(long), in that all of the bits in a multi-bit set must be set for this method to return true.

      Parameters:
      holder - the long data containing the bits we're interested in.
      Returns:
      true if all of the bits are set, else false.
      Since:
      3.21.0
    • isSet

      public boolean isSet(int holder)
      Tests whether the field is set or not.

      This is most commonly used for a single-bit field, which is often used to represent a boolean value; the results of using it for a multi-bit field is to determine whether any of its bits are set.

      Parameters:
      holder - the int data containing the bits we're interested in
      Returns:
      true if any of the bits are set, else false
    • isSet

      public boolean isSet(long holder)
      Tests whether the field is set or not.

      This is most commonly used for a single-bit field, which is often used to represent a boolean value; the results of using it for a multi-bit field is to determine whether any of its bits are set.

      Parameters:
      holder - the long data containing the bits we're interested in
      Returns:
      true if any of the bits are set, else false
      Since:
      3.21.0
    • set

      public int set(int holder)
      Sets the bits.
      Parameters:
      holder - the int data containing the bits we're interested in.
      Returns:
      the value of holder with the specified bits set to 1.
    • set

      public long set(long holder)
      Sets the bits.
      Parameters:
      holder - the long data containing the bits we're interested in.
      Returns:
      the value of holder with the specified bits set to 1.
      Since:
      3.21.0
    • setBoolean

      public int setBoolean(int holder, boolean flag)
      Sets a boolean BitField.
      Parameters:
      holder - the int data containing the bits we're interested in.
      flag - indicating whether to set or clear the bits.
      Returns:
      the value of holder with the specified bits set or cleared.
    • setBoolean

      public long setBoolean(long holder, boolean flag)
      Sets a boolean BitField.
      Parameters:
      holder - the long data containing the bits we're interested in.
      flag - indicating whether to set or clear the bits.
      Returns:
      the value of holder with the specified bits set or cleared.
      Since:
      3.21.0
    • setByte

      public byte setByte(byte holder)
      Sets the bits.
      Parameters:
      holder - the byte data containing the bits we're interested in
      Returns:
      the value of holder with the specified bits set to 1
    • setByteBoolean

      public byte setByteBoolean(byte holder, boolean flag)
      Sets a boolean BitField.
      Parameters:
      holder - the byte data containing the bits we're interested in.
      flag - indicating whether to set or clear the bits.
      Returns:
      the value of holder with the specified bits set or cleared.
    • setShort

      public short setShort(short holder)
      Sets the bits.
      Parameters:
      holder - the short data containing the bits we're interested in.
      Returns:
      the value of holder with the specified bits set to 1.
    • setShortBoolean

      public short setShortBoolean(short holder, boolean flag)
      Sets a boolean BitField.
      Parameters:
      holder - the short data containing the bits we're interested in.
      flag - indicating whether to set or clear the bits.
      Returns:
      the value of holder with the specified bits set or cleared.
    • setShortValue

      public short setShortValue(short holder, short value)
      Sets the bits with new values.
      Parameters:
      holder - the short data containing the bits we're interested in
      value - the new value for the specified bits
      Returns:
      the value of holder with the bits from the value parameter replacing the old bits
      See Also:
    • setValue

      public int setValue(int holder, int value)
      Sets the bits with new values.
      Parameters:
      holder - the int data containing the bits we're interested in.
      value - the new value for the specified bits.
      Returns:
      the value of holder with the bits from the value parameter replacing the old bits.
      See Also:
    • setValue

      public long setValue(long holder, long value)
      Sets the bits with new values.
      Parameters:
      holder - the long data containing the bits we're interested in.
      value - the new value for the specified bits.
      Returns:
      the value of holder with the bits from the value parameter replacing the old bits.
      Since:
      3.21.0
      See Also: