A small, zero-dependency bitmap/bitset implementation for fast index operations (and, or, xor, etc.)
npm install bitmap-indexBitmap) that allows efficient manipulation of a bitmap data structure, useful for various indexing and set operations.
set, remove, contains, and clear operations on the bitmap.
and, andNot, or, and xor operations between bitmaps.
range iteration, generator-based iteration via [Symbol.iterator], and filter based on user-defined conditions.
count), find the minimum and maximum set bit (min, max), as well as the minimum and maximum unset bit (minZero, maxZero).
for...of loops and spread syntax ([...bitmap]) for convenient iteration over set bits.
bash
npm install bitmap-index
``
#### Usage Example
`typescript
import { Bitmap } from 'bitmap-index';
// Create a new Bitmap with a size of 32 bits
const bitmap = new Bitmap(32);
// Set bits
bitmap.set(2);
bitmap.set(5);
bitmap.set(10);
// Check if a bit is set
console.log(bitmap.contains(5)); // true
console.log(bitmap.contains(3)); // false
// Perform logical operations with another bitmap
const otherBitmap = new Bitmap(32);
otherBitmap.set(5);
otherBitmap.set(10);
const andResult = bitmap.and(otherBitmap); // Bitmap with bits [5, 10]
const orResult = bitmap.or(otherBitmap); // Bitmap with bits [2, 5, 10]
const xorResult = bitmap.xor(otherBitmap); // Bitmap with bits [2]
// Iterate over set bits using range
bitmap.range((x) => {
console.log(Bit ${x} is set);
return true; // Continue iterating
});
// Iterate using for...of (generator)
for (const bit of bitmap) {
console.log(Iterated bit: ${bit});
}
// Spread operator
const bitsArray = [...bitmap]; // [2, 5, 10]
// Filter based on a condition
bitmap.filter((x) => x % 2 === 0); // Remove odd-numbered bits
// Count the number of set bits
console.log(bitmap.count()); // 1
// Find the minimum and maximum set bits
console.log(bitmap.min()); // 2
console.log(bitmap.max()); // 10
// Clear all bits
bitmap.clear();
// Clone the bitmap
const clonedBitmap = bitmap.clone();
`
#### API Documentation
* Bitmap Class
* Constructor: new Bitmap(size: number = 32)
* Set Operations: set(x: number), remove(x: number), contains(x: number), clear()
* Logical Operations: and(bitmap: Bitmap), andNot(bitmap: Bitmap), or(bitmap: Bitmap), xor(bitmap: Bitmap)
* Iteration and Filtering: range(fn: (x: number) => boolean), filter(fn: (x: number) => boolean), [Symbol.iterator](): Iterator
* Count and Extremes: count(), min(), max(), minZero(), maxZero()
* Cloning: clone(): Bitmap`