The Perl Toolchain Summit needs more sponsors. If your company depends on Perl, please support this very important event.

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.