This commit is contained in:
Eugene 2025-12-10 16:01:18 +03:00
parent 594ec641a4
commit 5ae03c47da
2 changed files with 48 additions and 48 deletions

View File

@ -214,9 +214,9 @@ describe("Bitmap", () => {
expect(bitmap.toString()).toEqual(resultString);
expect(String(bitmap)).toEqual(resultString);
expect(`bitmap debug: ${bitmap}`).toEqual(`bitmap debug: ${resultString}`)
expect(`bitmap debug: ${bitmap}`).toEqual(`bitmap debug: ${resultString}`);
const bitmap2 = Bitmap.fromString(bitmap.toString());
expect(bitmap2.toString()).toEqual(bitmap.toString());
})
});
});

View File

@ -71,11 +71,11 @@ export class Bitmap {
* preserving byte order and padding leading zeros to maintain alignment.
*
* @returns {string} Binary string representing the full contents of the bitmap.
*/
*/
public toString(): string {
return Array.from(this.bits)
.map(x => x.toString(2).padStart(8, '0'))
.join(' ');
.map((x) => x.toString(2).padStart(8, "0"))
.join(" ");
}
/**
@ -86,10 +86,10 @@ export class Bitmap {
* @param {string} s - Binary string produced by `toString()` or compatible formatter.
* @returns {Bitmap} New Bitmap instance containing the parsed bits.
* @throws {Error} If the input length is not divisible by 8.
*/
*/
static fromString(s: string): Bitmap {
// allow "00000001 00000010", "0000000100000010", etc.
const cleaned = s.replace(/\s+/g, '');
const cleaned = s.replace(/\s+/g, "");
if (cleaned.length % 8 !== 0) {
throw new Error("Bitmap string must be aligned to bytes (len % 8 == 0)");
@ -122,12 +122,12 @@ export class Bitmap {
}
/**
* Set the bit at index `x` to 1.
* Automatically grows the bitmap if necessary.
* **Mutates this bitmap** in-place.
* @param {number} x - Bit index (0-based).
* @returns {this} The instance itself (for method chaining).
*/
* Set the bit at index `x` to 1.
* Automatically grows the bitmap if necessary.
* **Mutates this bitmap** in-place.
* @param {number} x - Bit index (0-based).
* @returns {this} The instance itself (for method chaining).
*/
public set(x: number): this {
const idx = getBitPositionIndex(x);
if (idx >= this.bits.length) this.grow(x);
@ -136,12 +136,12 @@ export class Bitmap {
}
/**
* Clear the bit at index `x` (set to 0).
* No-op if the index is outside current capacity.
* **Mutates this bitmap** in-place.
* @param {number} x - Bit index (0-based).
* @returns {this} The instance itself (for method chaining).
*/
* Clear the bit at index `x` (set to 0).
* No-op if the index is outside current capacity.
* **Mutates this bitmap** in-place.
* @param {number} x - Bit index (0-based).
* @returns {this} The instance itself (for method chaining).
*/
public remove(x: number): this {
const idx = getBitPositionIndex(x);
if (idx >= this.bits.length) return this;
@ -178,11 +178,11 @@ export class Bitmap {
}
/**
* Bitwise AND with another bitmap.
* **Mutates this bitmap** performs the operation in-place and clears extra bytes if needed.
* @param {Bitmap} bitmap - Other bitmap to AND with.
* @returns {this} The instance itself (for method chaining).
*/
* Bitwise AND with another bitmap.
* **Mutates this bitmap** performs the operation in-place and clears extra bytes if needed.
* @param {Bitmap} bitmap - Other bitmap to AND with.
* @returns {this} The instance itself (for method chaining).
*/
public and(bitmap: Bitmap): this {
const other = bitmap.bits;
const minlen = Math.min(this.bits.length, other.length);
@ -197,11 +197,11 @@ export class Bitmap {
}
/**
* Bitwise AND NOT (this = this & ~bitmap).
* **Mutates this bitmap** in-place.
* @param {Bitmap} bitmap - Bitmap whose set bits will be subtracted.
* @returns {this} The instance itself (for method chaining).
*/
* Bitwise AND NOT (this = this & ~bitmap).
* **Mutates this bitmap** in-place.
* @param {Bitmap} bitmap - Bitmap whose set bits will be subtracted.
* @returns {this} The instance itself (for method chaining).
*/
public andNot(bitmap: Bitmap): this {
const other = bitmap.bits;
const minlen = Math.min(this.bits.length, other.length);
@ -213,11 +213,11 @@ export class Bitmap {
}
/**
* Bitwise OR (union) with another bitmap.
* **Mutates this bitmap** in-place and grows it if necessary.
* @param {Bitmap} bitmap - Other bitmap to OR with.
* @returns {this} The instance itself (for method chaining).
*/
* Bitwise OR (union) with another bitmap.
* **Mutates this bitmap** in-place and grows it if necessary.
* @param {Bitmap} bitmap - Other bitmap to OR with.
* @returns {this} The instance itself (for method chaining).
*/
public or(bitmap: Bitmap): this {
const other = bitmap.bits;
@ -236,11 +236,11 @@ export class Bitmap {
return this;
}
/**
* Bitwise XOR with another bitmap.
* **Mutates this bitmap** in-place and grows it if necessary.
* @param {Bitmap} bitmap - Other bitmap to XOR with.
* @returns {this} The instance itself (for method chaining).
*/
* Bitwise XOR with another bitmap.
* **Mutates this bitmap** in-place and grows it if necessary.
* @param {Bitmap} bitmap - Other bitmap to XOR with.
* @returns {this} The instance itself (for method chaining).
*/
public xor(bitmap: Bitmap): this {
const other = bitmap.bits;
@ -280,11 +280,11 @@ export class Bitmap {
}
/**
* Remove bits for which the predicate returns `false`.
* **Mutates this bitmap** in-place.
* @param {(bitIndex: number) => boolean} fn - Predicate; bit is cleared if `false` is returned.
* @returns {void}
*/
* Remove bits for which the predicate returns `false`.
* **Mutates this bitmap** in-place.
* @param {(bitIndex: number) => boolean} fn - Predicate; bit is cleared if `false` is returned.
* @returns {void}
*/
public filter(fn: (x: number) => boolean): void {
for (let i = 0; i < this.bits.length; i++) {
for (let j = 0; j < 8; j++) {
@ -297,10 +297,10 @@ export class Bitmap {
}
/**
* Clear all bits in the bitmap (set everything to 0).
* **Mutates this bitmap** in-place.
* @returns {void}
*/
* Clear all bits in the bitmap (set everything to 0).
* **Mutates this bitmap** in-place.
* @returns {void}
*/
public clear(): void {
for (let i = 0; i < this.bits.length; i++) {
this.bits[i] = 0;