1
0

add equality collection element iterators

This commit is contained in:
2024-05-13 22:24:57 +02:00
parent 35d284f030
commit eda8c8cf5d
2 changed files with 44 additions and 2 deletions

View File

@@ -8,6 +8,9 @@ export interface EqualityMap<K, V> extends Iterable<[K, V]> {
contains(key: K): boolean; contains(key: K): boolean;
remove(key: K): V | undefined; remove(key: K): V | undefined;
clear(): void; clear(): void;
keys(): IterableIterator<K>;
values(): IterableIterator<V>;
entries(): IterableIterator<[K, V]>;
} }
class NativeEqualityMap<K, V> implements EqualityMap<K, V> { class NativeEqualityMap<K, V> implements EqualityMap<K, V> {
@@ -41,6 +44,18 @@ class NativeEqualityMap<K, V> implements EqualityMap<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]();
} }
@@ -107,8 +122,26 @@ class CustomEqualityMap<K, V> implements EqualityMap<K, V> {
this.#list.length = 0; this.#list.length = 0;
} }
[Symbol.iterator]() { *keys() {
return this.#list[Symbol.iterator](); 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

@@ -7,6 +7,7 @@ export interface EqualitySet<T> extends Iterable<T> {
contains(obj: T): boolean; contains(obj: T): boolean;
remove(obj: T): boolean; remove(obj: T): boolean;
clear(): void; clear(): void;
values(): IterableIterator<T>;
} }
class NativeEqualitySet<T> implements EqualitySet<T> { class NativeEqualitySet<T> implements EqualitySet<T> {
@@ -34,6 +35,10 @@ class NativeEqualitySet<T> implements EqualitySet<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]();
} }
@@ -88,6 +93,10 @@ class CustomEqualitySet<T> implements EqualitySet<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]();
} }