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.

clear

$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.