simplify set implementation

pull/10791/head
Dominic Gannaway 2 years ago
parent 2701c0ad64
commit 4d4ab2a204

@ -497,6 +497,7 @@ export function schedule_effect(signal, sync) {
}
}
if ((flags & EFFECT) !== 0) {
debugger
current_queued_effects.push(signal);
// Prevent any nested user effects from potentially triggering
// before this effect is scheduled. We know they will be destroyed

@ -35,8 +35,8 @@ var inited = false;
* @template T
*/
export class ReactiveSet extends Set {
/** @type {Map<T, import('#client').Source<boolean>>} */
#sources = new Map();
/** @type {Set<T>} */
#entries = new Set();
#version = source(0);
#size = source(0);
@ -81,25 +81,17 @@ export class ReactiveSet extends Set {
/** @param {T} value */
has(value) {
var source = this.#sources.get(value);
// We should always track the version in case
// the Set ever gets this value in the future.
get(this.#version);
if (source === undefined) {
return false;
}
return get(source);
return this.#entries.has(value);
}
/** @param {T} value */
add(value) {
var sources = this.#sources;
var entries = this.#entries;
if (!sources.has(value)) {
sources.set(value, source(true));
set(this.#size, sources.size);
if (!entries.has(value)) {
entries.add(value);
set(this.#size, entries.size);
this.#increment_version();
}
@ -108,13 +100,11 @@ export class ReactiveSet extends Set {
/** @param {T} value */
delete(value) {
var sources = this.#sources;
var source = sources.get(value);
var entries = this.#entries;
if (source !== undefined) {
sources.delete(value);
set(this.#size, sources.size);
set(source, false);
if (entries.has(value)) {
entries.delete(value);
set(this.#size, entries.size);
this.#increment_version();
}
@ -122,18 +112,14 @@ export class ReactiveSet extends Set {
}
clear() {
var sources = this.#sources;
var entries = this.#entries;
if (sources.size !== 0) {
if (entries.size !== 0) {
set(this.#size, 0);
for (var source of sources.values()) {
set(source, false);
}
this.#increment_version();
entries.clear();
super.clear();
}
sources.clear();
super.clear();
}
keys() {
@ -143,7 +129,7 @@ export class ReactiveSet extends Set {
values() {
get(this.#version);
var iterator = this.#sources.keys();
var iterator = this.#entries.keys();
return make_iterable(
/** @type {IterableIterator<T>} */ ({

Loading…
Cancel
Save