BitVector.h

Classes

BitVector -- Bit vectors of any size (full description)
BitVectorHelper -- Helper class for BitVector (full description)

class BitVector

Interface

Public Members
BitVector ()
BitVector (uInt length, Bool state)
BitVector (const BitVector& that)
~BitVector ()
BitVector& operator= (const BitVector& that)
BitVector& operator= (Bool state)
uInt nbits() const
void setBit (uInt pos)
void clearBit (uInt pos)
Bool toggleBit (uInt pos)
Bool getBit (uInt pos) const
void putBit (uInt pos, Bool state)
Bool operator[] (uInt pos) const
BitVectorHelper operator[] (uInt pos)
BitVector operator& (const BitVector& that) const
BitVector operator| (const BitVector& that) const
BitVector operator~ () const
void operator&= (const BitVector& that)
void operator|= (const BitVector& that)
void reverse ()
Bool operator== (const BitVector& that) const
Bool operator!= (const BitVector& that) const
void resize (uInt length, Bool state=False, Bool copy=True)
void set (Bool state)
void set (uInt start, uInt length, Bool state)
void copy (uInt thisStart, uInt length, const BitVector& that, uInt thatStart)
friend ostream& operator<< (ostream&, const BitVector& vector)

Description

Review Status

Reviewed By:
Friso Olnon
Date Reviewed:
1995/03/13
Programs:
Tests:

Etymology

A variable utilized as a discrete collection of bits is referred to as a bit vector.

Synopsis

Bit vectors are an efficent method of keeping True/False information on a set of items or conditions. Class BitVector provides functions to manipulate individual bits in the vector and to perform logical operations on whole bit vectors.

Example

    // Create a bit vector with 20 bits (and set them all to False). 
    BitVector bv (20, False);
    
    // Change some individual bits:
    // Turn On (make True) bit 19.
    bv.setBit (19);
    // Turn Off (make False) bit 12 (superfluous here).
    bv.clearBit (12);
    // Toggle bit 5 (here: change value from 0 (False) to 1 (True)).
    bv.toggleBit (5)
    // Another way of setting a bit using the index operator.
    bv[0] = True;
    // Assign the value of bit 0 to bit 1  (in three ways).
    bv[1] = bv.getBit(0);
    bv[1] = bv[0];
    bv.putBit (1, bv.getBit(0));
    
    // Show the bit vector size and its value on standard output.
    cout << "Size of bit vector:  "<< b.nbits() <<"\n";
    cout << "Value of bit vector: "<< bv        <<"\n";
    
    // Perform logical operations on bit vectors.
    // Create two more bit vectors.
    BitVector bv2 (40, False);
    BitVector bv3 (40, True);
    // bitwise OR
    bv = bv2 | bv3;
    // bitwise AND
    bv = bv2 & bv3;
    // bitwise XOR
    bv = bv2 ^ bv3;
    // bitwise NOT
    bv = ~bv2;
    
    // Reset all bits to False, and then to True
    bv = False;
    bv.set (True);
    // Change the vector's size to 10 (and copy the old values).
    bv.resize (10);
    // Change back to original size and set all bits to True.
    void bv.resize (size, True, False);
    

Member Description

BitVector ()

Create a bit vector of length 0.

BitVector (uInt length, Bool state)

Create a bit vector with length bits and set all bits to to the specified state.

BitVector (const BitVector& that)

Copy constructor (copy semantics).

~BitVector ()

Delete the bit vector.

BitVector& operator= (const BitVector& that)

Assignment (copy semantics).

BitVector& operator= (Bool state)

Set all bits to the given state.

uInt nbits() const

Return the number of bits in the bitvector.

void setBit (uInt pos)

Set a bit at the given position (0-relative). In debug-mode an exception is thrown when the position is invalid.

void clearBit (uInt pos)

Clear a bit at the given position (0-relative). In debug-mode an exception is thrown when the position is invalid.

Bool toggleBit (uInt pos)

Toggle a bit at the given position (0-relative). It returns the original state. In debug-mode an exception is thrown when the position is invalid.

Bool getBit (uInt pos) const

Get a bit at the given position (0-relative). In debug-mode an exception is thrown when the position is invalid.

void putBit (uInt pos, Bool state)

Set a bit at the given position (0-relative) to the given state. In debug-mode an exception is thrown when the position is invalid.

Bool operator[] (uInt pos) const
BitVectorHelper operator[] (uInt pos)

Index operator to access the specified bit. In debug-mode an exception is thrown when the position is invalid.

BitVector operator& (const BitVector& that) const
BitVector operator| (const BitVector& that) const
BitVector operator~ () const

Logical operations on whole bit vectors. The binary operators & (bitwise AND), | (bitwise OR) and ^ (bitwise XOR), and the unary operator ~ (bitwise NOT) are provided. An exception is thrown if the lengths of the vectors differ.

void operator&= (const BitVector& that)
void operator|= (const BitVector& that)
void reverse ()

Logical in-place operations on whole bit vectors. The binary operators & (bitwise AND), | (bitwise OR) and ^ (bitwise XOR), and the unary operator reverse (bitwise NOT) are provided. An exception is thrown if the lengths of the vectors differ.

Bool operator== (const BitVector& that) const

Returns True if all bits are equal. An exception is thrown if the lengths of the vectors differ.

Bool operator!= (const BitVector& that) const

Returns True if a bit differs. An exception is thrown if the lengths of the vectors differ.

void resize (uInt length, Bool state=False, Bool copy=True)

Resize the bit vector to the new length. By default the original bits are copied. The remaining bits (or all bits in case of no copy) are set the the given state.

void set (Bool state)

Set all bits of the bit vector to the specified state.

void set (uInt start, uInt length, Bool state)

Set length bits starting at the start position (0-relative) to the given state. An exception is thrown if start+length exceeds the length of the vector.

void copy (uInt thisStart, uInt length, const BitVector& that, uInt thatStart)

Copy length bits starting at thatStart in the other BitVector to this BitVector starting at thisStart.

friend ostream& operator<< (ostream&, const BitVector& vector)

Write a representation of the bit vector (a list of zeros and ones enclosed in square parentheses) to ostream.


class BitVectorHelper

Interface

BitVectorHelper (const BitVectorHelper& that)
const BitVectorHelper& operator= (const BitVectorHelper& that) const
const BitVectorHelper& operator= (Bool state) const
operator Bool() const
Private Members
BitVectorHelper (uInt bitNumber, BitVector* vector)

Description

Review Status

Reviewed By:
Friso Olnon
Date Reviewed:
1995/03/13
Programs:
Tests:
  • tBitVector

Prerequisite

Synopsis

Helper class for class BitVector. For all practical purposes a BitVectorHelper object is the individual bit in a bit vector. It is the object returned by the index operator of BitVector.

Member Description

BitVectorHelper (const BitVectorHelper& that)

Copy constructor has to be public.

const BitVectorHelper& operator= (const BitVectorHelper& that) const

Set the bit to the state of the bit in the other BitVector. Thus assignment has not the usual copy semantics, but affects the underlying BitVector bit.

const BitVectorHelper& operator= (Bool state) const

Set to a state.

operator Bool() const

Defines the conversion from BitVectorHelper to Bool.

BitVectorHelper (uInt bitNumber, BitVector* vector)

The constructor we actually use.