diff --git a/src/async.ts b/src/async.ts index fdddfd6..3694aeb 100644 --- a/src/async.ts +++ b/src/async.ts @@ -273,7 +273,7 @@ export namespace sum { //#region implementations -abstract class BaseAsyncEnumerable implements AsyncEnumerable { +export abstract class BaseAsyncEnumerable implements AsyncEnumerable { [Symbol.asyncIterator]() { return this.iterator(); } diff --git a/src/bitarray.ts b/src/bitarray.ts index cc0b0d1..34d28a6 100644 --- a/src/bitarray.ts +++ b/src/bitarray.ts @@ -128,12 +128,10 @@ export class BitArray implements Iterable { } public isFull() { - // return enumerable.sequence(this).all(bit => bit); return this.#bits.subarray(0, this.#wholeBytes).every(byte => byte === FULL_BYTE) && (this.#remainingBits === 0 || this.#bits[this.#wholeBytes] === this.#remainingBitsMask); } public isEmpty() { - // return enumerable.sequence(this).none(bit => bit); return this.#bits.every(byte => byte === 0); } @@ -151,11 +149,6 @@ export class BitArray implements Iterable { public and(other: BitArray) { this.#ensureSameSize(other); - // let i = 0; - // for (const byte of getBytes(other)) { - // this.#bits[i++] &= byte; - // } - for (let i = 0; i < this.#length; i++) { this.#bits[i] &= other.#bits[i]; } @@ -166,11 +159,6 @@ export class BitArray implements Iterable { public or(other: BitArray) { this.#ensureSameSize(other); - // let i = 0; - // for (const byte of getBytes(other)) { - // this.#bits[i++] |= byte; - // } - for (let i = 0; i < this.#length; i++) { this.#bits[i] |= other.#bits[i]; } @@ -181,11 +169,6 @@ export class BitArray implements Iterable { public xor(other: BitArray) { this.#ensureSameSize(other); - // let i = 0; - // for (const byte of getBytes(other)) { - // this.#bits[i++] ^= byte; - // } - for (let i = 0; i < this.#length; i++) { this.#bits[i] ^= other.#bits[i]; } @@ -208,11 +191,6 @@ export class BitArray implements Iterable { public andNot(other: BitArray) { this.#ensureSameSize(other); - // let i = 0; - // for (const byte of getBytes(other)) { - // this.#bits[i++] &= ~byte; - // } - for (let i = 0; i < this.#length; i++) { this.#bits[i] &= ~other.#bits[i]; } @@ -223,14 +201,12 @@ export class BitArray implements Iterable { public contains(other: BitArray) { this.#ensureSameSize(other); - // return enumerable.sequence(this).zip(enumerable.sequence(other)).where(([, b]) => b).all(([a, b]) => a && b); return arrayLike(this.#bits).zip(arrayLike(other.#bits)).all(([a, b]) => (a & b) === b); } public intersects(other: BitArray) { this.#ensureSameSize(other); - // return enumerable.sequence(this).zip(enumerable.sequence(other)).any(([a, b]) => a && b); return arrayLike(this.#bits).zip(arrayLike(other.#bits)).any(([a, b]) => (a & b) !== 0); } diff --git a/src/collector.ts b/src/collector.ts index 460235d..4a324d2 100644 --- a/src/collector.ts +++ b/src/collector.ts @@ -6,11 +6,6 @@ export interface Collector { finalize(accumulator: TAccumulator): TResult; } -// export interface Collector2 { -// accumulate(element: TElement): void; -// finalize(): TResult; -// } - class SimpleCollector implements Collector { readonly #initialize: () => TAccumulator; readonly #accumulate: (accumulator: TAccumulator, element: TElement) => void; diff --git a/src/equality-map.ts b/src/equality-map.ts index 86170ec..f03a447 100644 --- a/src/equality-map.ts +++ b/src/equality-map.ts @@ -43,8 +43,8 @@ class NativeEqualityMap implements EqualityMap { } class CustomEqualityMap implements EqualityMap { + readonly #list: [K, V][] = []; readonly #keyComparer: Equater; - readonly #list = new Array<[K, V]>(); constructor(keyComparer: Equater) { this.#keyComparer = keyComparer; @@ -85,9 +85,7 @@ class CustomEqualityMap implements EqualityMap { } remove(key: K) { - const length = this.#list.length; - - for (let i = 0; i < length; i++) { + for (let i = 0; i < this.#list.length; i++) { if (this.#keyComparer(key, this.#list[i][0])) { const removed = this.#list.splice(i, 1); return removed[0][1]; @@ -151,8 +149,8 @@ class NativeAsyncEqualityMap implements AsyncEqualityMap { } class CustomAsyncEqualityMap implements AsyncEqualityMap { + readonly #list: [K, V][] = []; readonly #keyComparer: MaybeAsyncEquater; - readonly #list = new Array<[K, V]>(); constructor(keyComparer: MaybeAsyncEquater) { this.#keyComparer = keyComparer; @@ -193,9 +191,7 @@ class CustomAsyncEqualityMap implements AsyncEqualityMap { } async remove(key: K) { - const length = this.#list.length; - - for (let i = 0; i < length; i++) { + for (let i = 0; i < this.#list.length; i++) { if (await this.#keyComparer(key, this.#list[i][0])) { const removed = this.#list.splice(i, 1); return removed[0][1]; diff --git a/src/equality-set.ts b/src/equality-set.ts index e8c378b..c905b7d 100644 --- a/src/equality-set.ts +++ b/src/equality-set.ts @@ -41,8 +41,8 @@ class NativeEqualitySet implements EqualitySet { } class CustomEqualitySet implements EqualitySet { - readonly #equater: Equater; readonly #list: T[] = []; + readonly #equater: Equater; constructor(equater: Equater) { this.#equater = equater; @@ -137,8 +137,8 @@ class NativeAsyncEqualitySet implements AsyncEqualitySet { } class CustomAsyncEqualitySet implements AsyncEqualitySet { - readonly #equater: MaybeAsyncEquater; readonly #list: T[] = []; + readonly #equater: MaybeAsyncEquater; constructor(equater: MaybeAsyncEquater) { this.#equater = equater; diff --git a/src/random.ts b/src/random.ts index 9d62f33..7ef6f13 100644 --- a/src/random.ts +++ b/src/random.ts @@ -1,19 +1,11 @@ import { BitArray } from "./bitarray.js"; import { asArray } from "./utils.js"; -export interface ElementPredicate { - (index: number, obj: T): boolean; -} +export type ElementPredicate = (index: number, obj: T) => boolean; +export type ElementWeight = (index: number, obj: T) => number; +export type RandomGenerator = () => number; -export interface ElementWeight { - (index: number, obj: T): number; -} - -export interface RandomGenerator { - (): number; -} - -export interface RandomOptions { +export interface RandomOptions { predicate?: ElementPredicate; weight?: ElementWeight; random?: RandomGenerator; @@ -23,7 +15,7 @@ export const alwaysTrue: ElementPredicate = () => true; export const weightOfOne: ElementWeight = () => 1.0; export const mathRandom: RandomGenerator = () => Math.random(); -const defaultOptions = Object.freeze>>({ +const defaultOptions = Object.freeze>({ predicate: alwaysTrue, weight: weightOfOne, random: mathRandom @@ -50,7 +42,7 @@ function mergeOptions(first: RandomOptions | undefined, second: RandomOpti function withDefaultOptions(options: RandomOptions | undefined): Required> { if (!options) { - return { ...defaultOptions }; + return defaultOptions; } return { @@ -98,7 +90,7 @@ export class RandomPicker { public constructor(elements: T[], options?: RandomOptions) { this.#elements = elements; this.#flags = new BitArray(elements.length); - this.#options = withDefaultOptions(mergeOptions({ predicate: (i, o) => this.#flags.get(i) }, options)); + this.#options = withDefaultOptions(mergeOptions({ predicate: i => this.#flags.get(i) }, options)); this.reset(); } diff --git a/src/sync.ts b/src/sync.ts index 32a2ae1..d1d98bd 100644 --- a/src/sync.ts +++ b/src/sync.ts @@ -295,7 +295,7 @@ class EnumerableMarker { } -abstract class BaseEnumerable extends EnumerableMarker implements Enumerable { +export abstract class BaseEnumerable extends EnumerableMarker implements Enumerable { [Symbol.iterator]() { return this.iterator(); } diff --git a/src/utils.ts b/src/utils.ts index b74896c..f3df5d7 100644 --- a/src/utils.ts +++ b/src/utils.ts @@ -54,8 +54,7 @@ export function defaultArrayComparer(a: T, b: T) { return -1; } - const aStr = a === null ? "null" : a.toString(); - const bStr = b === null ? "null" : b.toString(); + const aStr = `${a}`, bStr = `${b}`; return aStr > bStr ? 1 : aStr < bStr ? -1 : 0; } @@ -81,7 +80,7 @@ export function* asGenerator(iterator: Iterator) { const next = iterator.next(); if (next.done) { - break; + return next.value; } yield next.value; @@ -93,7 +92,7 @@ export async function* asAsyncGenerator(iterator: MaybeAsyncIterator) { const next = await iterator.next(); if (next.done) { - break; + return next.value; } yield next.value;