add element iterators to async collections
This commit is contained in:
@@ -154,6 +154,9 @@ export interface AsyncEqualityMap<K, V> extends Iterable<[K, V]> {
|
|||||||
contains(key: K): Promise<boolean>;
|
contains(key: K): Promise<boolean>;
|
||||||
remove(key: K): Promise<V | undefined>;
|
remove(key: K): Promise<V | undefined>;
|
||||||
clear(): void;
|
clear(): void;
|
||||||
|
keys(): IterableIterator<K>;
|
||||||
|
values(): IterableIterator<V>;
|
||||||
|
entries(): IterableIterator<[K, V]>;
|
||||||
}
|
}
|
||||||
|
|
||||||
class NativeAsyncEqualityMap<K, V> implements AsyncEqualityMap<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();
|
this.#map.clear();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
keys() {
|
||||||
|
return this.#map.keys();
|
||||||
|
}
|
||||||
|
|
||||||
|
values() {
|
||||||
|
return this.#map.values();
|
||||||
|
}
|
||||||
|
|
||||||
|
entries() {
|
||||||
|
return this.#map.entries();
|
||||||
|
}
|
||||||
|
|
||||||
[Symbol.iterator]() {
|
[Symbol.iterator]() {
|
||||||
return this.#map[Symbol.iterator]();
|
return this.#map[Symbol.iterator]();
|
||||||
}
|
}
|
||||||
@@ -245,6 +260,22 @@ class CustomAsyncEqualityMap<K, V> implements AsyncEqualityMap<K, V> {
|
|||||||
this.#list.length = 0;
|
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]() {
|
*[Symbol.iterator]() {
|
||||||
for (const entry of this.#list) {
|
for (const entry of this.#list) {
|
||||||
yield [entry[0], entry[1]] as [K, V]; // no entry mutation allowed!
|
yield [entry[0], entry[1]] as [K, V]; // no entry mutation allowed!
|
||||||
|
|||||||
@@ -111,6 +111,7 @@ export interface AsyncEqualitySet<T> extends Iterable<T> {
|
|||||||
contains(obj: T): Promise<boolean>;
|
contains(obj: T): Promise<boolean>;
|
||||||
remove(obj: T): Promise<boolean>;
|
remove(obj: T): Promise<boolean>;
|
||||||
clear(): void;
|
clear(): void;
|
||||||
|
values(): IterableIterator<T>;
|
||||||
}
|
}
|
||||||
|
|
||||||
class NativeAsyncEqualitySet<T> implements AsyncEqualitySet<T> {
|
class NativeAsyncEqualitySet<T> implements AsyncEqualitySet<T> {
|
||||||
@@ -138,6 +139,10 @@ class NativeAsyncEqualitySet<T> implements AsyncEqualitySet<T> {
|
|||||||
this.#set.clear();
|
this.#set.clear();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
values() {
|
||||||
|
return this.#set.values();
|
||||||
|
}
|
||||||
|
|
||||||
[Symbol.iterator]() {
|
[Symbol.iterator]() {
|
||||||
return this.#set[Symbol.iterator]();
|
return this.#set[Symbol.iterator]();
|
||||||
}
|
}
|
||||||
@@ -192,6 +197,10 @@ class CustomAsyncEqualitySet<T> implements AsyncEqualitySet<T> {
|
|||||||
this.#list.length = 0;
|
this.#list.length = 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
values() {
|
||||||
|
return this[Symbol.iterator]();
|
||||||
|
}
|
||||||
|
|
||||||
[Symbol.iterator]() {
|
[Symbol.iterator]() {
|
||||||
return this.#list[Symbol.iterator]();
|
return this.#list[Symbol.iterator]();
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user