---
name: "Lucy::Object::BitVector"
section: "3pm"
platform: "linux"
package: "liblucy-perl"
version: "0.3.3-7+b1"
release: "Debian 9 (Stretch)"
platforms: ["linux"]
url: "https://new.carta.tech/Lucy::Object::BitVector"
---

# Lucy::Object::BitVector(3pm)

An array of bits.

## 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( *\[labeled params\]* )

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

- •

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

## METHODS

### 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(tick)

Set the bit at `"tick"` to 1.

- •

  **tick** - The bit to be set.

### clear(tick)

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

- •

  **tick** - The bit to be cleared.

### *clear\_all()*

Clear all bits.

### 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(other)

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

- •

  **other** - Another BitVector.

### and\_not(other)

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

- •

  **other** - Another BitVector.

### xor(other)

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

- •

  **other** - Another BitVector.

### flip(tick)

Invert the value of a bit.

- •

  **tick** - The bit to invert.

### flip\_block( *\[labeled params\]* )

Invert each bit within a contiguous block.

- •

  **offset** - Lower bound.

- •

  **length** - The number of bits to flip.

### next\_hit(tick)

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

### *to\_array()*

Return an array where each element represents a set bit.

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

### *count()*

Return a count of the number of set bits.

## INHERITANCE

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