Class BitField
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 -
Method Summary
Modifier and TypeMethodDescriptionintclear(int holder) Clears the bits.longclear(long holder) Clears the bits.byteclearByte(byte holder) Clears the bits.shortclearShort(short holder) Clears the bits.intgetRawValue(int holder) Gets the value for the specified BitField, unshifted.longgetRawValue(long holder) Gets the value for the specified BitField, unshifted.shortgetShortRawValue(short holder) Gets the value for the specified BitField, unshifted.shortgetShortValue(short holder) Gets the value for the specified BitField, appropriately shifted right, as a short.intgetValue(int holder) Gets the value for the specified BitField, appropriately shifted right.longgetValue(long holder) Gets the value for the specified BitField, appropriately shifted right.booleanisAllSet(int holder) Tests whether all of the bits are set or not.booleanisAllSet(long holder) Tests whether all of the bits are set or not.booleanisSet(int holder) Tests whether the field is set or not.booleanisSet(long holder) Tests whether the field is set or not.intset(int holder) Sets the bits.longset(long holder) Sets the bits.intsetBoolean(int holder, boolean flag) Sets a boolean BitField.longsetBoolean(long holder, boolean flag) Sets a boolean BitField.bytesetByte(byte holder) Sets the bits.bytesetByteBoolean(byte holder, boolean flag) Sets a boolean BitField.shortsetShort(short holder) Sets the bits.shortsetShortBoolean(short holder, boolean flag) Sets a boolean BitField.shortsetShortValue(short holder, short value) Sets the bits with new values.intsetValue(int holder, int value) Sets the bits with new values.longsetValue(long holder, long value) Sets the bits with new values.
-
Constructor Details
-
BitField
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
Creates a BitField instance.If any bit above bit 31 is set in the mask, the resulting field can only be used with the
longholder accessors; theint,shortandbyteholder accessors throwIllegalStateExceptionfor such a field, because those holder types cannot contain the masked bits and would otherwise silently answer wrongly (shift counts are truncated mod 32 and negative holders are sign-extended into bits 32-63).- 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
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). - Throws:
IllegalStateException- Thrown if this field's mask has bits set above bit 31 (only possible viaBitField(long)) and so cannot be represented in this holder type.
-
clear
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
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). - Throws:
IllegalStateException- Thrown if this field's mask has bits set above bit 31 (only possible viaBitField(long)) and so cannot be represented in this holder type.
-
clearShort
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). - Throws:
IllegalStateException- Thrown if this field's mask has bits set above bit 31 (only possible viaBitField(long)) and so cannot be represented in this holder type.
-
getRawValue
Gets the value for the specified BitField, unshifted.- Parameters:
holder- The int data containing the bits we're interested in.- Returns:
- The selected bits.
- Throws:
IllegalStateException- Thrown if this field's mask has bits set above bit 31 (only possible viaBitField(long)) and so cannot be represented in this holder type.
-
getRawValue
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
Gets the value for the specified BitField, unshifted.- Parameters:
holder- The short data containing the bits we're interested in.- Returns:
- The selected bits.
- Throws:
IllegalStateException- Thrown if this field's mask has bits set above bit 31 (only possible viaBitField(long)) and so cannot be represented in this holder type.
-
getShortValue
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.
- Throws:
IllegalStateException- Thrown if this field's mask has bits set above bit 31 (only possible viaBitField(long)) and so cannot be represented in this holder type.- See Also:
-
getValue
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.
- Throws:
IllegalStateException- Thrown if this field's mask has bits set above bit 31 (only possible viaBitField(long)) and so cannot be represented in this holder type.- See Also:
-
getValue
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
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 returntrue.- Parameters:
holder- The int data containing the bits we're interested in.- Returns:
trueif all of the bits are set, elsefalse.- Throws:
IllegalStateException- Thrown if this field's mask has bits set above bit 31 (only possible viaBitField(long)) and so cannot be represented in this holder type.
-
isAllSet
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 returntrue.- Parameters:
holder- The long data containing the bits we're interested in.- Returns:
trueif all of the bits are set, elsefalse.- Since:
- 3.21.0
-
isSet
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:
trueif any of the bits are set, elsefalse- Throws:
IllegalStateException- Thrown if this field's mask has bits set above bit 31 (only possible viaBitField(long)) and so cannot be represented in this holder type.
-
isSet
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:
trueif any of the bits are set, elsefalse- Since:
- 3.21.0
-
set
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. - Throws:
IllegalStateException- Thrown if this field's mask has bits set above bit 31 (only possible viaBitField(long)) and so cannot be represented in this holder type.
-
set
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
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.
- Throws:
IllegalStateException- Thrown if this field's mask has bits set above bit 31 (only possible viaBitField(long)) and so cannot be represented in this holder type.
-
setBoolean
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
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 - Throws:
IllegalStateException- Thrown if this field's mask has bits set above bit 31 (only possible viaBitField(long)) and so cannot be represented in this holder type.
-
setByteBoolean
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.
- Throws:
IllegalStateException- Thrown if this field's mask has bits set above bit 31 (only possible viaBitField(long)) and so cannot be represented in this holder type.
-
setShort
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. - Throws:
IllegalStateException- Thrown if this field's mask has bits set above bit 31 (only possible viaBitField(long)) and so cannot be represented in this holder type.
-
setShortBoolean
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.
- Throws:
IllegalStateException- Thrown if this field's mask has bits set above bit 31 (only possible viaBitField(long)) and so cannot be represented in this holder type.
-
setShortValue
Sets the bits with new values.- Parameters:
holder- The short data containing the bits we're interested invalue- The new value for the specified bits- Returns:
- The value of holder with the bits from the value parameter replacing the old bits
- Throws:
IllegalStateException- Thrown if this field's mask has bits set above bit 31 (only possible viaBitField(long)) and so cannot be represented in this holder type.- See Also:
-
setValue
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.
- Throws:
IllegalStateException- Thrown if this field's mask has bits set above bit 31 (only possible viaBitField(long)) and so cannot be represented in this holder type.- See Also:
-
setValue
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:
-