++ed by:

9 PAUSE users
6 non-PAUSE users.

Nick Wellnhofer
and 1 contributors

# NAME

Lucy::Object::BitVector - An array of bits.

# SYNOPSIS

``````    my \$bit_vec = Lucy::Object::BitVector->new( capacity => 8 );
my \$other   = Lucy::Object::BitVector->new( capacity => 8 );
\$bit_vec->set(\$_) for ( 0, 2, 4, 6 );
\$other->set(\$_)   for ( 1, 3, 5, 7 );
\$bit_vec->or(\$other);
print "\$_\n" for @{ \$bit_vec->to_array };    # prints 0 through 7.``````

# DESCRIPTION

BitVector is a growable array of bits. All bits are initially zero.

# CONSTRUCTORS

## new

``````    my \$bit_vec = Lucy::Object::BitVector->new(
capacity => \$doc_max + 1,   # default 0,
);``````

Create a new BitVector.

• capacity - The number of bits that the initial array should be able to hold.

# METHODS

## get

``    my \$bool = \$bit_vector->get(\$tick);``

Return true if the bit at `tick` has been set, false if it hasn’t (regardless of whether it lies within the bounds of the object’s capacity).

• tick - The requested bit.

## set

``    \$bit_vector->set(\$tick);``

Set the bit at `tick` to 1.

• tick - The bit to be set.

## next_hit

``    my \$int = \$bit_vector->next_hit(\$tick);``

Returns the next set bit equal to or greater than `tick`, or -1 if no such bit exists.

``    \$bit_vector->clear(\$tick);``

Clear the indicated bit. (i.e. set it to 0).

• tick - The bit to be cleared.

## clear_all

``    \$bit_vector->clear_all();``

Clear all bits.

## grow

``    \$bit_vector->grow(\$capacity);``

If the BitVector does not already have enough room to hold the indicated number of bits, allocate more memory so that it can.

• capacity - Least number of bits the BitVector should accomodate.

## and

``    \$bit_vector->and(\$other);``

Modify the BitVector so that only bits which remain set are those which 1) were already set in this BitVector, and 2) were also set in the other BitVector.

• other - Another BitVector.

## or

``    \$bit_vector->or(\$other);``

Modify the BitVector, setting all bits which are set in the other BitVector if they were not already set.

• other - Another BitVector.

## xor

``    \$bit_vector->xor(\$other);``

Modify the BitVector, performing an XOR operation against the other.

• other - Another BitVector.

## and_not

``    \$bit_vector->and_not(\$other);``

Modify the BitVector, clearing all bits which are set in the other.

• other - Another BitVector.

## flip

``    \$bit_vector->flip(\$tick);``

Invert the value of a bit.

• tick - The bit to invert.

## flip_block

``````    \$bit_vector->flip_block(
offset => \$offset,  # required
length => \$length,  # required
);``````

Invert each bit within a contiguous block.

• offset - Lower bound.

• length - The number of bits to flip.

## count

``    my \$int = \$bit_vector->count();``

Return a count of the number of set bits.

## to_array

``    my \$i32_array = \$bit_vector->to_array();``

Return an array where each element represents a set bit.

## clone

``    my \$result = \$bit_vector->clone();``

Return a clone of the object.

# INHERITANCE

Lucy::Object::BitVector isa Clownfish::Obj.