Add Disposable and DisposableList

This commit is contained in:
2025-10-25 16:31:39 -04:00
parent 3d7135aa71
commit 2c4a886e27
3 changed files with 48 additions and 0 deletions

24
src/lang/Disposable.ts Normal file
View File

@@ -0,0 +1,24 @@
import IDisposable from "./IDisposable";
export default class Disposable implements IDisposable {
private readonly _cleanup: () => void;
private _isDisposed: boolean;
constructor(cleanup: () => void) {
this._cleanup = cleanup;
this._isDisposed = false;
}
get isDisposed() {
return this._isDisposed;
}
public dispose(): void {
if (this._isDisposed) {
return;
}
this._cleanup();
this._isDisposed = true;
}
}

View File

@@ -0,0 +1,21 @@
import IDisposable from "./IDisposable";
export default class DisposableList implements IDisposable {
private readonly _list: IDisposable[];
constructor() {
this._list = [];
}
public add(disposable: IDisposable): void {
this._list.push(disposable);
}
public dispose(): void {
while (this._list.length) {
const disposable = this._list.shift();
disposable.dispose();
}
}
}

3
src/lang/IDisposable.ts Normal file
View File

@@ -0,0 +1,3 @@
export default interface IDisposable {
dispose(): void;
}