diff --git a/src/bitmap.ts b/src/bitmap.ts index 84591e6..b13ba11 100644 --- a/src/bitmap.ts +++ b/src/bitmap.ts @@ -12,6 +12,18 @@ export class Bitmap implements IBitmap { this.bits = new Uint8Array(computeBitsArrayLength(x)); } + public *[Symbol.iterator](): Generator { + for (let i = 0; i < this.bits.length; i++) { + const byte = this.bits[i]; + if (byte === 0) continue; + for (let j = 0; j < 8; j++) { + if ((byte & (1 << j)) !== 0) { + yield i * 8 + j; + } + } + } + } + public grow(x: number): void { const arrLength = Math.max(1, computeBitsArrayLength(x)); if (arrLength <= this.bits.length) return; diff --git a/src/types.ts b/src/types.ts index 03aafab..1d9b614 100644 --- a/src/types.ts +++ b/src/types.ts @@ -32,4 +32,6 @@ export interface IBitmap { minZero(): number; maxZero(): number; + + [Symbol.iterator](): Iterator; }