Add disposable management classes and interface
- Introduced IDisposable interface for defining disposable behavior - Implemented Disposable class for single disposable resources - Created DisposableList class to manage multiple disposables - Updated index file to export the new classes and interface
This commit is contained in:
23
src/lang/disposables/Disposable.ts
Normal file
23
src/lang/disposables/Disposable.ts
Normal file
@@ -0,0 +1,23 @@
|
|||||||
|
import type IDisposable from './IDisposable';
|
||||||
|
|
||||||
|
export default class Disposable implements IDisposable {
|
||||||
|
private _isDisposed = false;
|
||||||
|
private _disposable: () => void;
|
||||||
|
|
||||||
|
constructor(disposable: () => void) {
|
||||||
|
this._disposable = disposable;
|
||||||
|
}
|
||||||
|
|
||||||
|
get isDisposed(): boolean {
|
||||||
|
return this._isDisposed;
|
||||||
|
}
|
||||||
|
|
||||||
|
public dispose(): void {
|
||||||
|
if (this._isDisposed) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
this._disposable();
|
||||||
|
this._isDisposed = true;
|
||||||
|
}
|
||||||
|
}
|
||||||
17
src/lang/disposables/DisposableList.ts
Normal file
17
src/lang/disposables/DisposableList.ts
Normal file
@@ -0,0 +1,17 @@
|
|||||||
|
import type IDisposable from './IDisposable';
|
||||||
|
|
||||||
|
export default class DisposableList implements IDisposable {
|
||||||
|
private readonly _disposables: IDisposable[] = [];
|
||||||
|
|
||||||
|
public add(disposable: IDisposable): void {
|
||||||
|
this._disposables.push(disposable);
|
||||||
|
}
|
||||||
|
|
||||||
|
public dispose(): void {
|
||||||
|
while (this._disposables.length) {
|
||||||
|
const disposable = this._disposables.shift() as IDisposable;
|
||||||
|
|
||||||
|
disposable.dispose();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
3
src/lang/disposables/IDisposable.ts
Normal file
3
src/lang/disposables/IDisposable.ts
Normal file
@@ -0,0 +1,3 @@
|
|||||||
|
export default interface IDisposable {
|
||||||
|
dispose(): void;
|
||||||
|
}
|
||||||
6
src/lang/disposables/index.ts
Normal file
6
src/lang/disposables/index.ts
Normal file
@@ -0,0 +1,6 @@
|
|||||||
|
import type IDisposable from './IDisposable';
|
||||||
|
import Disposable from './Disposable';
|
||||||
|
import DisposableList from './DisposableList';
|
||||||
|
|
||||||
|
export type {IDisposable};
|
||||||
|
export {Disposable, DisposableList};
|
||||||
Reference in New Issue
Block a user