Add Disposable and DisposableList
This commit is contained in:
24
src/lang/Disposable.ts
Normal file
24
src/lang/Disposable.ts
Normal 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;
|
||||||
|
}
|
||||||
|
}
|
||||||
21
src/lang/DisposableList.ts
Normal file
21
src/lang/DisposableList.ts
Normal 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
3
src/lang/IDisposable.ts
Normal file
@@ -0,0 +1,3 @@
|
|||||||
|
export default interface IDisposable {
|
||||||
|
dispose(): void;
|
||||||
|
}
|
||||||
Reference in New Issue
Block a user