Skip to content

Commit

Permalink
perf: improve addOne speed
Browse files Browse the repository at this point in the history
  • Loading branch information
crimx committed Nov 12, 2024
1 parent ffb5332 commit 2f8b96d
Show file tree
Hide file tree
Showing 2 changed files with 17 additions and 12 deletions.
2 changes: 1 addition & 1 deletion src/disposable-map.ts
Original file line number Diff line number Diff line change
Expand Up @@ -126,7 +126,7 @@ function set<T extends DisposableType, K>(
if (isAbortable(disposable)) {
disposable.abortable(() => this.remove(key));
}
(this._disposables_ ||= new Map()).set(key, disposable);
(this._disposables_ ??= new Map()).set(key, disposable);
return disposable;
}

Expand Down
27 changes: 16 additions & 11 deletions src/disposable-store.ts
Original file line number Diff line number Diff line change
Expand Up @@ -153,20 +153,25 @@ function has(this: DisposableStore, disposable: DisposableType): boolean {

function add<T extends DisposableType>(
this: DisposableStore,
disposable: T | T[]
disposables: T | T[]
): T | T[] {
const disposables = Array.isArray(disposable) ? disposable : [disposable];

for (const disposable of disposables) {
if (!this._disposables_?.has(disposable)) {
(this._disposables_ ||= new Set()).add(disposable);
if (isAbortable(disposable)) {
disposable.abortable(() => this.remove(disposable));
}
// eslint-disable-next-line @typescript-eslint/no-unused-expressions
Array.isArray(disposables)
? disposables.forEach(_addOne, this)
: _addOne.call(this, disposables);
return disposables;
}

function _addOne<T extends DisposableType>(
this: DisposableStore,
disposable: T
): void {
if (!this._disposables_?.has(disposable)) {
(this._disposables_ ??= new Set()).add(disposable);
if (isAbortable(disposable)) {
disposable.abortable(() => this.remove(disposable));
}
}

return disposable;
}

function make<T extends DisposableType>(
Expand Down

0 comments on commit 2f8b96d

Please sign in to comment.