Class BitString

  • All Implemented Interfaces:
    Serializable, Cloneable

    public final class BitString
    extends Object
    implements Cloneable, Serializable
    BitString implements a vector of bits much like java.util.BitSet, except that this implementation actually works. Also, BitString has some groovy features which BitSet doesn't; mostly related to efficient iteration over true and false components.

    Each component of the BitString has a boolean value. The bits of a BitString are indexed by non-negative integers (that means they are zero-based, of course). Individual indexed bits can be examined, set, or cleared. One BitString may be used to modify the contents of another BitString through logical AND, logical inclusive OR, and logical exclusive OR operations.

    By default, all bits in the set initially have the value false.

    Every bit set has a current size, which is the number of bits of space currently in use by the bit set. Note that the size is related to the implementation of a bit set, so it may change with implementation. The length of a bit set related to the logical length of a bit set and is defined independently of implementation.

    See Also:
    Serialized Form
    • Constructor Summary

      Constructors 
      Constructor Description
      BitString​(int nbits)
      Creates an empty string with the specified size.
    • Method Summary

      All Methods Static Methods Instance Methods Concrete Methods 
      Modifier and Type Method Description
      boolean and​(BitString set)
      Logically ANDs this bit set with the specified set of bits.
      BitString.BackwardBitStringIterator backwardsIterator()
      Returns an iterator that iterates through the bits in backward order.
      BitString.BackwardBitStringIterator backwardsIterator​(int i)
      Returns an iterator that iterates through the bits in backward order, starting at the given index.
      static int bsf​(int b)
      Utility function to return the index of the first (lowest-order) one bit in the given integer.
      static int bsr​(int v)
      Utility function to return the index of the last one bit in the given integer.
      void clear​(int bit)
      Clears a bit.
      void clearAll()
      Clears all bits.
      void clearUpTo​(int bit)
      Clears all bits up to and including the given bit.
      Object clone()
      Clones the BitString.
      boolean contains​(BitString other)
      Check if this set contains all bits of the given set.
      void copyBits​(BitString set)
      Copies the values of the bits in the specified set into this set.
      boolean equals​(Object obj)
      Compares this object against the specified object.
      int firstSet()
      Returns the first index in the bit string which is set, or -1 if there is no such index.
      int firstSet​(int where)
      Returns the first index greater than where in the bit string which is set, or -1 if there is no such index.
      boolean get​(int bit)
      Gets a bit.
      int hashCode()
      Returns a hash code value for this bit string whose value depends only on which bits have been set within this BitString.
      boolean intersectionEmpty​(BitString other)
      Check if the intersection of the two sets is empty.
      boolean isZero()
      Returns whether this BitString is all zeroes.
      BitString.ForwardBitStringIterator iterator()
      Returns an iterator that iterates through the bits in forward order.
      int lastSet()
      Returns the last index in the bit string which is set, or -1 if there is no such index.
      int lastSet​(int where)
      Returns the last index less than where in the bit string which is set, or -1 if there is no such index.
      int length()
      Returns the "logical size" of this BitString: the index of the highest set bit in the BitString plus one.
      boolean minus​(BitString set)
      Logically subtracts this bit set with the specified set of bits.
      int numberOfOnes()
      Returns the number of ones in this BitString.
      int numberOfOnes​(int where)
      Returns the number of ones in this BitString up to a given index.
      boolean or​(BitString set)
      Logically ORs this bit set with the specified set of bits.
      boolean or_upTo​(BitString set, int bit)
      Logically ORs this bit set with the specified set of bits.
      static byte popcount​(int b)
      Utility function to return the number of 1 bits in the given integer value.
      static byte popcount​(long b)
      Utility function to return the number of 1 bits in the given long value.
      void set​(int bit)
      Sets a bit.
      void setAll()
      Sets all bits.
      void setRange​(int lo, int hi)  
      void setUpTo​(int bit)
      Sets all bits up to and including the given bit.
      void shl​(int amt)
      Performs a left-shift operation.
      void shr​(int amt)
      Performs a right-shift operation.
      int size()
      Returns the number of bits of space actually in use by this BitString to represent bit values.
      String toString()
      Converts the BitString to a String.
      boolean xor​(BitString set)
      Logically XORs this bit set with the specified set of bits.
      BitString.ForwardBitStringZeroIterator zeroIterator()  
    • Constructor Detail

      • BitString

        public BitString​(int nbits)
        Creates an empty string with the specified size.
        Parameters:
        nbits - the size of the string
    • Method Detail

      • firstSet

        public int firstSet()
        Returns the first index in the bit string which is set, or -1 if there is no such index.
        Returns:
        the first index
      • firstSet

        public int firstSet​(int where)
        Returns the first index greater than where in the bit string which is set, or -1 if there is no such index.
        Parameters:
        where - the starting point for the search. May be negative.
        Returns:
        the first index
      • popcount

        public static final byte popcount​(int b)
        Utility function to return the number of 1 bits in the given integer value.
        Parameters:
        b - value to check
        Returns:
        byte number of one bits
      • popcount

        public static final byte popcount​(long b)
        Utility function to return the number of 1 bits in the given long value.
        Parameters:
        b - value to check
        Returns:
        byte number of one bits
      • bsf

        public static final int bsf​(int b)
        Utility function to return the index of the first (lowest-order) one bit in the given integer. Returns zero if the given number is zero.
        Parameters:
        b - value to check
        Returns:
        byte index of first one bit, or zero if the number is zero
      • bsr

        public static final int bsr​(int v)
        Utility function to return the index of the last one bit in the given integer. Returns zero if the given number is zero.
        Parameters:
        v - value to check
        Returns:
        byte index of first one bit, or zero if the number is zero
      • lastSet

        public int lastSet​(int where)
        Returns the last index less than where in the bit string which is set, or -1 if there is no such index.
        Parameters:
        where - the starting point for the search.
        Returns:
        last index
      • lastSet

        public int lastSet()
        Returns the last index in the bit string which is set, or -1 if there is no such index.
        Returns:
        last index
      • setAll

        public void setAll()
        Sets all bits.
      • setUpTo

        public void setUpTo​(int bit)
        Sets all bits up to and including the given bit.
        Parameters:
        bit - the bit to be set up to (zero-based)
      • setRange

        public void setRange​(int lo,
                             int hi)
      • set

        public void set​(int bit)
        Sets a bit.
        Parameters:
        bit - the bit to be set (zero-based)
      • clearAll

        public void clearAll()
        Clears all bits.
      • clearUpTo

        public void clearUpTo​(int bit)
        Clears all bits up to and including the given bit.
        Parameters:
        bit - the bit to be set up to (zero-based)
      • clear

        public void clear​(int bit)
        Clears a bit.
        Parameters:
        bit - the bit to be cleared (zero-based)
      • get

        public boolean get​(int bit)
        Gets a bit.
        Parameters:
        bit - the bit to be gotten (zero-based)
        Returns:
        the bit
      • and

        public boolean and​(BitString set)
        Logically ANDs this bit set with the specified set of bits. Returns true if this was modified in response to the operation.
        Parameters:
        set - the bit set to be ANDed with
        Returns:
        modified
      • or

        public boolean or​(BitString set)
        Logically ORs this bit set with the specified set of bits. Returns true if this was modified in response to the operation.
        Parameters:
        set - the bit set to be ORed with
        Returns:
        modified
      • or_upTo

        public boolean or_upTo​(BitString set,
                               int bit)
        Logically ORs this bit set with the specified set of bits. Returns true if this was modified in response to the operation.
        Parameters:
        set - the bit set to be ORed with
        bit - set of bits
        Returns:
        modified
      • xor

        public boolean xor​(BitString set)
        Logically XORs this bit set with the specified set of bits. Returns true if this was modified in response to the operation.
        Parameters:
        set - the bit set to be XORed with
        Returns:
        modified
      • minus

        public boolean minus​(BitString set)
        Logically subtracts this bit set with the specified set of bits. Returns true if this was modified in response to the operation.
        Parameters:
        set - the bit set to subtract
        Returns:
        modified
      • intersectionEmpty

        public boolean intersectionEmpty​(BitString other)
        Check if the intersection of the two sets is empty.
        Parameters:
        other - the set to check intersection with
        Returns:
        is empty or not
      • contains

        public boolean contains​(BitString other)
        Check if this set contains all bits of the given set.
        Parameters:
        other - the set to check containment with
        Returns:
        contains or not
      • shl

        public void shl​(int amt)
        Performs a left-shift operation.
        Parameters:
        amt - number of bits to shift, can be negative
      • shr

        public void shr​(int amt)
        Performs a right-shift operation.
        Parameters:
        amt - number of bits to shift
      • copyBits

        public void copyBits​(BitString set)
        Copies the values of the bits in the specified set into this set.
        Parameters:
        set - the bit set to copy the bits from
      • hashCode

        public int hashCode()
        Returns a hash code value for this bit string whose value depends only on which bits have been set within this BitString.
        Overrides:
        hashCode in class Object
      • length

        public int length()
        Returns the "logical size" of this BitString: the index of the highest set bit in the BitString plus one. Returns zero if the BitString contains no set bits.
        Returns:
        logical size
      • size

        public int size()
        Returns the number of bits of space actually in use by this BitString to represent bit values. The maximum element in the set is the size - 1st element. The minimum element in the set is the zero'th element.
        Returns:
        number of bits
      • equals

        public boolean equals​(Object obj)
        Compares this object against the specified object.
        Overrides:
        equals in class Object
        Parameters:
        obj - the object to compare with
        Returns:
        true if the contents of the bitsets are the same; false otherwise.
      • isZero

        public boolean isZero()
        Returns whether this BitString is all zeroes.
        Returns:
        true if it is all zeroes.
      • numberOfOnes

        public int numberOfOnes()
        Returns the number of ones in this BitString.
        Returns:
        number of bits set.
      • numberOfOnes

        public int numberOfOnes​(int where)
        Returns the number of ones in this BitString up to a given index.
        Parameters:
        where - given index
        Returns:
        number of bits set.
      • clone

        public Object clone()
        Clones the BitString.
        Overrides:
        clone in class Object
      • toString

        public String toString()
        Converts the BitString to a String.
        Overrides:
        toString in class Object
      • backwardsIterator

        public BitString.BackwardBitStringIterator backwardsIterator()
        Returns an iterator that iterates through the bits in backward order.
        Returns:
        an iterator
      • backwardsIterator

        public BitString.BackwardBitStringIterator backwardsIterator​(int i)
        Returns an iterator that iterates through the bits in backward order, starting at the given index.
        Parameters:
        i - given index
        Returns:
        an iterator