2 * Copyright (c) 2018 The xterm.js authors. All rights reserved.
6 import { IDisposable } from 'common/Types';
9 * A base class that can be extended to provide convenience methods for managing the lifecycle of an
10 * object and its components.
12 export abstract class Disposable implements IDisposable {
13 protected _disposables: IDisposable[] = [];
14 protected _isDisposed: boolean = false;
20 * Disposes the object, triggering the `dispose` method on all registered IDisposables.
22 public dispose(): void {
23 this._isDisposed = true;
24 this._disposables.forEach(d => d.dispose());
25 this._disposables.length = 0;
29 * Registers a disposable object.
30 * @param d The disposable to register.
32 public register<T extends IDisposable>(d: T): void {
33 this._disposables.push(d);
37 * Unregisters a disposable object if it has been registered, if not do
39 * @param d The disposable to unregister.
41 public unregister<T extends IDisposable>(d: T): void {
42 const index = this._disposables.indexOf(d);
44 this._disposables.splice(index, 1);