java.lang.Object
com.google.zxing.common.BitArray
All Implemented Interfaces:
Cloneable

public final class BitArrayextends Object implements Cloneable

A simple, fast array of bits, represented compactly by an array of ints internally.

  • Field Summary

    Fields
    Modifier and Type
    Field
    Description
    private int[]
    The bits, packed into ints.
    private int
    How many bits are stored.
  • Constructor Summary

    Constructors
    Constructor
    Description
    Creates a new empty BitArray with zero size.
    BitArray(int size)
    Creates a new BitArray with the specified size.
    BitArray(int[] bits, int size)
    For testing only.
  • Method Summary

    Modifier and Type
    Method
    Description
    void
    appendBit(boolean bit)
    Appends a single bit to the end of the array.
    void
    Appends another BitArray to the end of this array.
    void
    appendBits(int value, int numBits)
    Appends the least-significant bits, from value, in order from most-significant to least-significant.
    void
    Clears all bits (sets to false).
    A copy of this array.
    private void
    ensureCapacity(int size)
    Grows the storage if it is too small.
    boolean
    Whether the other array has the same bits.
    void
    flip(int i)
    Flips bit i.
    boolean
    get(int i)
    Gets the bit at the specified index.
    int[]
    Returns the underlying array of ints.
    int
    getNextSet(int from)
    Gets the index of the next set bit.
    int
    getNextUnset(int from)
    Gets the index of the next unset bit.
    int
    Get the number of bits in the array.
    int
    Get the size of the array in bytes.
    int
    Hash of the bit words.
    boolean
    isRange(int start, int end, boolean value)
    Efficient method to check if a range of bits is set, or not set.
    private static int[]
    makeArray(int size)
    Allocates enough ints to hold a number of bits.
    void
    Reverses all bits in the array.
    void
    set(int i)
    Sets bit i.
    void
    setBulk(int i, int newBits)
    Sets a block of 32 bits, starting at bit i.
    void
    setRange(int start, int end)
    Sets a range of bits.
    void
    toBytes(int bitOffset, byte[] array, int offset, int numBytes)
    Writes the bits to an array of bytes.
    Bits as text for debugging.
    void
    xor(BitArray other)
    Performs a bitwise XOR of this array with another.

    Methods inherited from class Object

    getClass, notify, notifyAll, wait, wait, wait
  • Field Details

    • bits

      private int[] bits
      The bits, packed into ints.
    • size

      private int size
      How many bits are stored.
  • Constructor Details

    • BitArray

      public BitArray()
      Creates a new empty BitArray with zero size.
    • BitArray

      public BitArray(int size)
      Creates a new BitArray with the specified size.
      Parameters:
      size - the number of bits in the array
    • BitArray

      BitArray(int[] bits, int size)
      For testing only.
      Parameters:
      bits - the bit array data
      size - the number of bits
  • Method Details

    • getSize

      public int getSize()
      Get the number of bits in the array.
      Returns:
      the number of bits in the array
    • getSizeInBytes

      public int getSizeInBytes()
      Get the size of the array in bytes.
      Returns:
      the size of the array in bytes (rounded up)
    • ensureCapacity

      private void ensureCapacity(int size)
      Grows the storage if it is too small.
      Parameters:
      size - the number of bits needed
    • get

      public boolean get(int i)
      Gets the bit at the specified index.
      Parameters:
      i - bit to get
      Returns:
      true iff bit i is set
    • set

      public void set(int i)
      Sets bit i.
      Parameters:
      i - bit to set
    • flip

      public void flip(int i)
      Flips bit i.
      Parameters:
      i - bit to set
    • getNextSet

      public int getNextSet(int from)
      Gets the index of the next set bit.
      Parameters:
      from - first bit to check
      Returns:
      index of first bit that is set, starting from the given index, or size if none are set at or beyond this given index
      See Also:
    • getNextUnset

      public int getNextUnset(int from)
      Gets the index of the next unset bit.
      Parameters:
      from - index to start looking for unset bit
      Returns:
      index of next unset bit, or size if none are unset until the end
      See Also:
    • setBulk

      public void setBulk(int i, int newBits)
      Sets a block of 32 bits, starting at bit i.
      Parameters:
      i - first bit to set
      newBits - the new value of the next 32 bits. Note again that the least-significant bit corresponds to bit i, the next-least-significant to i+1, and so on.
    • setRange

      public void setRange(int start, int end)
      Sets a range of bits.
      Parameters:
      start - start of range, inclusive.
      end - end of range, exclusive
    • clear

      public void clear()
      Clears all bits (sets to false).
    • isRange

      public boolean isRange(int start, int end, boolean value)
      Efficient method to check if a range of bits is set, or not set.
      Parameters:
      start - start of range, inclusive.
      end - end of range, exclusive
      value - if true, checks that bits in range are set, otherwise checks that they are not set
      Returns:
      true iff all bits are set or not set in range, according to value argument
      Throws:
      IllegalArgumentException - if end is less than start or the range is not contained in the array
    • appendBit

      public void appendBit(boolean bit)
      Appends a single bit to the end of the array.
      Parameters:
      bit - the bit value to append.
    • appendBits

      public void appendBits(int value, int numBits)
      Appends the least-significant bits, from value, in order from most-significant to least-significant. For example, appending 6 bits from 0x000001E will append the bits 0, 1, 1, 1, 1, 0 in that order.
      Parameters:
      value - int containing bits to append
      numBits - bits from value to append
    • appendBitArray

      public void appendBitArray(BitArray other)
      Appends another BitArray to the end of this array.
      Parameters:
      other - the BitArray to append
    • xor

      public void xor(BitArray other)
      Performs a bitwise XOR of this array with another.
      Parameters:
      other - the BitArray to XOR with
      Throws:
      IllegalArgumentException - if sizes don't match
    • toBytes

      public void toBytes(int bitOffset, byte[] array, int offset, int numBytes)
      Writes the bits to an array of bytes.
      Parameters:
      bitOffset - first bit to start writing
      array - array to write into. Bytes are written most-significant byte first. This is the opposite of the internal representation, which is exposed by getBitArray()
      offset - position in array to start writing
      numBytes - how many bytes to write
    • getBitArray

      public int[] getBitArray()
      Returns the underlying array of ints.
      Returns:
      underlying array of ints. The first element holds the first 32 bits, and the least significant bit is bit 0.
    • reverse

      public void reverse()
      Reverses all bits in the array.
    • makeArray

      private static int[] makeArray(int size)
      Allocates enough ints to hold a number of bits.
      Parameters:
      size - the number of bits
      Returns:
      the storage to hold them
    • equals

      public boolean equals(Object o)
      Whether the other array has the same bits.
      Overrides:
      equals in class Object
      Parameters:
      o - the object to compare
      Returns:
      true if this BitArray equals the given object
    • hashCode

      public int hashCode()
      Hash of the bit words.
      Overrides:
      hashCode in class Object
      Returns:
      the hash code value for this BitArray
    • toString

      public String toString()
      Bits as text for debugging.
      Overrides:
      toString in class Object
      Returns:
      a string representation of this BitArray
    • clone

      public BitArray clone()
      A copy of this array.
      Overrides:
      clone in class Object
      Returns:
      a copy of this BitArray