Skip to content

BitVector

Defined in: packages/data/src/bit/bit-vector.ts:30

The growable counterpart of BitSet: a bit vector with no fixed universe.

BitSet throws on a member outside its size, which is what a caller wants when the universe is known and a stray index is a bug. This one grows the backing instead, doubling it, so add never rejects a non-negative integer. The trade is that size is a moving target and a typo silently allocates rather than failing loudly — prefer BitSet whenever the bound is known.

Growth never shrinks: delete and clear clear bits but keep the backing, so a vector that once held a large member stays that large. size therefore reports the current capacity in bits, not the largest member held.

Time complexity: O(1) amortised for add, O(1) for delete and has, O(size / 32) for count, rank and the set operations.

BitSet for the fixed-size version, and for the operation semantics.

new BitVector(iterable?): BitVector

Defined in: packages/data/src/bit/bit-vector.ts:34

Iterable<number, any, any>

BitVector

get size(): number

Defined in: packages/data/src/bit/bit-vector.ts:43

The current capacity in bits, which grows and never shrinks.

number

[iterator](): Iterator<number>

Defined in: packages/data/src/bit/bit-vector.ts:48

Members in ascending order.

Iterator<number>

ISet.[iterator]


add(member): void

Defined in: packages/data/src/bit/bit-vector.ts:78

O(1) amortised — grows the backing when member is beyond it.

number

void

If member is negative or not an integer. Unlike the upper bound, that can never be a sizing question.

ISet.add


addAll(members): void

Defined in: packages/data/src/bit/bit-vector.ts:92

O(m), growing at most once per distinct backing size.

Iterable<number>

void

ISet.addAll


clear(): void

Defined in: packages/data/src/bit/bit-vector.ts:67

Clears every bit. Does not release the backing.

void

ISet.clear


count(): number

Defined in: packages/data/src/bit/bit-vector.ts:62

O(1).

number

ISet.count


delete(member): boolean

Defined in: packages/data/src/bit/bit-vector.ts:99

O(1). A member beyond the current capacity was never present.

number

boolean

ISet.delete


difference(other): BitVector

Defined in: packages/data/src/bit/bit-vector.ts:148

O(size / 32).

Iterable<number>

BitVector

ISet.difference


has(member): boolean

Defined in: packages/data/src/bit/bit-vector.ts:120

O(1). Out of range is a miss, not an error — a query never throws.

number

boolean

ISet.has


intersection(other): BitVector

Defined in: packages/data/src/bit/bit-vector.ts:143

O(size / 32).

Iterable<number>

BitVector

ISet.intersection


isDisjointFrom(other): boolean

Defined in: packages/data/src/bit/bit-vector.ts:176

O(size / 32).

Iterable<number>

boolean

ISet.isDisjointFrom


isSubsetOf(other): boolean

Defined in: packages/data/src/bit/bit-vector.ts:160

O(size / 32).

Iterable<number>

boolean

ISet.isSubsetOf


isSupersetOf(other): boolean

Defined in: packages/data/src/bit/bit-vector.ts:165

O(size / 32).

Iterable<number>

boolean

ISet.isSupersetOf


rank(upperBound): number

Defined in: packages/data/src/bit/bit-vector.ts:131

How many members are strictly below upperBound. O(size / 32).

number

number


symmetricDifference(other): BitVector

Defined in: packages/data/src/bit/bit-vector.ts:153

O(size / 32).

Iterable<number>

BitVector

ISet.symmetricDifference


union(other): BitVector

Defined in: packages/data/src/bit/bit-vector.ts:136

O(size / 32). Returns a BitVector, so the result grows too.

Iterable<number>

BitVector

ISet.union