From 7553b70882be9225c9f5644b6ed922dd81d4d0f8 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Herv=C3=A9=20BECHER?= Date: Mon, 13 May 2024 22:42:43 +0200 Subject: [PATCH] add element iterators to async collections --- src/equality-map.ts | 31 +++++++++++++++++++++++++++++++ src/equality-set.ts | 9 +++++++++ 2 files changed, 40 insertions(+) diff --git a/src/equality-map.ts b/src/equality-map.ts index 0ab15a9..c91d105 100644 --- a/src/equality-map.ts +++ b/src/equality-map.ts @@ -154,6 +154,9 @@ export interface AsyncEqualityMap extends Iterable<[K, V]> { contains(key: K): Promise; remove(key: K): Promise; clear(): void; + keys(): IterableIterator; + values(): IterableIterator; + entries(): IterableIterator<[K, V]>; } class NativeAsyncEqualityMap implements AsyncEqualityMap { @@ -183,6 +186,18 @@ class NativeAsyncEqualityMap implements AsyncEqualityMap { this.#map.clear(); } + keys() { + return this.#map.keys(); + } + + values() { + return this.#map.values(); + } + + entries() { + return this.#map.entries(); + } + [Symbol.iterator]() { return this.#map[Symbol.iterator](); } @@ -245,6 +260,22 @@ class CustomAsyncEqualityMap implements AsyncEqualityMap { this.#list.length = 0; } + *keys() { + for (const entry of this.#list) { + yield entry[0]; + } + } + + *values() { + for (const entry of this.#list) { + yield entry[1]; + } + } + + entries() { + return this[Symbol.iterator](); + } + *[Symbol.iterator]() { for (const entry of this.#list) { yield [entry[0], entry[1]] as [K, V]; // no entry mutation allowed! diff --git a/src/equality-set.ts b/src/equality-set.ts index a8ce0f5..dc58753 100644 --- a/src/equality-set.ts +++ b/src/equality-set.ts @@ -111,6 +111,7 @@ export interface AsyncEqualitySet extends Iterable { contains(obj: T): Promise; remove(obj: T): Promise; clear(): void; + values(): IterableIterator; } class NativeAsyncEqualitySet implements AsyncEqualitySet { @@ -138,6 +139,10 @@ class NativeAsyncEqualitySet implements AsyncEqualitySet { this.#set.clear(); } + values() { + return this.#set.values(); + } + [Symbol.iterator]() { return this.#set[Symbol.iterator](); } @@ -192,6 +197,10 @@ class CustomAsyncEqualitySet implements AsyncEqualitySet { this.#list.length = 0; } + values() { + return this[Symbol.iterator](); + } + [Symbol.iterator]() { return this.#list[Symbol.iterator](); }