1
0

add element iterators to async collections

This commit is contained in:
2024-05-13 22:42:43 +02:00
parent 1f8e8039b6
commit 7553b70882
2 changed files with 40 additions and 0 deletions

View File

@@ -154,6 +154,9 @@ export interface AsyncEqualityMap<K, V> extends Iterable<[K, V]> {
contains(key: K): Promise<boolean>;
remove(key: K): Promise<V | undefined>;
clear(): void;
keys(): IterableIterator<K>;
values(): IterableIterator<V>;
entries(): IterableIterator<[K, V]>;
}
class NativeAsyncEqualityMap<K, V> implements AsyncEqualityMap<K, V> {
@@ -183,6 +186,18 @@ class NativeAsyncEqualityMap<K, V> implements AsyncEqualityMap<K, V> {
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<K, V> implements AsyncEqualityMap<K, V> {
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!

View File

@@ -111,6 +111,7 @@ export interface AsyncEqualitySet<T> extends Iterable<T> {
contains(obj: T): Promise<boolean>;
remove(obj: T): Promise<boolean>;
clear(): void;
values(): IterableIterator<T>;
}
class NativeAsyncEqualitySet<T> implements AsyncEqualitySet<T> {
@@ -138,6 +139,10 @@ class NativeAsyncEqualitySet<T> implements AsyncEqualitySet<T> {
this.#set.clear();
}
values() {
return this.#set.values();
}
[Symbol.iterator]() {
return this.#set[Symbol.iterator]();
}
@@ -192,6 +197,10 @@ class CustomAsyncEqualitySet<T> implements AsyncEqualitySet<T> {
this.#list.length = 0;
}
values() {
return this[Symbol.iterator]();
}
[Symbol.iterator]() {
return this.#list[Symbol.iterator]();
}