Class BitString

java.lang.Object
com.github.javabdd.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:
  • Nested Class Summary

    Nested Classes
    Modifier and Type
    Class
    Description
    class 
    Iterator for iterating through a bit string in backward order.
    static class 
    Abstract bit string iterator class.
    class 
    Iterator for iterating through a bit string in forward order.
    class 
    Iterator for iterating through a bit string in forward order.
  • Constructor Summary

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

    Modifier and Type
    Method
    Description
    boolean
    Logically ANDs this bit set with the specified set of bits.
    Returns an iterator that iterates through the bits in backward order.
    Returns an iterator that iterates through the bits in backward order, starting at the given index.
    static final int
    bsf(int b)
    Utility function to return the index of the first (lowest-order) one bit in the given integer.
    static final 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
    Clears all bits.
    void
    clearUpTo(int bit)
    Clears all bits up to and including the given bit.
    Clones the BitString.
    boolean
    Check if this set contains all bits of the given set.
    void
    Copies the values of the bits in the specified set into this set.
    boolean
    Compares this object against the specified object.
    int
    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
    Returns a hash code value for this bit string whose value depends only on which bits have been set within this BitString.
    boolean
    Check if the intersection of the two sets is empty.
    boolean
    Returns whether this BitString is all zeroes.
    Returns an iterator that iterates through the bits in forward order.
    int
    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
    Returns the "logical size" of this BitString: the index of the highest set bit in the BitString plus one.
    boolean
    Logically subtracts this bit set with the specified set of bits.
    int
    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
    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 final byte
    popcount(int b)
    Utility function to return the number of 1 bits in the given integer value.
    static final 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
    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
    Returns the number of bits of space actually in use by this BitString to represent bit values.
    Converts the BitString to a String.
    boolean
    Logically XORs this bit set with the specified set of bits.
     

    Methods inherited from class java.lang.Object

    finalize, getClass, notify, notifyAll, wait, wait, wait
  • Constructor Details

    • BitString

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

    • 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
    • iterator

      Returns an iterator that iterates through the bits in forward order.
      Returns:
      an iterator
    • zeroIterator

    • 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