import { ISubscription } from '../internal/Subscription';
export declare class DisposableImpl implements ISubscription {
    private work;
    private _disposed;
    constructor(work: () => void);
    readonly closed: boolean;
    readonly isDisposed: boolean;
    unsubscribe(): void;
    dispose: this['unsubscribe'];
}
export declare class Disposable implements ISubscription {
    static create(fn: () => void): Disposable;
    static empty: DisposableImpl;
    private constructor();
    readonly closed: boolean;
    readonly isDisposed: boolean;
    unsubscribe(): void;
    dispose: this['unsubscribe'];
}
export declare class CompositeDisposable implements ISubscription, Disposable {
    closed: boolean;
    private disposables;
    constructor(...disposables: ISubscription[]);
    add(v: ISubscription): void;
    remove(v: ISubscription): boolean;
    toArray(): ISubscription[];
    readonly length: number;
    unsubscribe(): void;
    readonly isDisposed: boolean;
    dispose: this['unsubscribe'];
}
export declare class SerialDisposable implements ISubscription, Disposable {
    closed: boolean;
    private current;
    unsubscribe(): void;
    getDisposable(): ISubscription;
    setDisposable(disposable: ISubscription): void;
    readonly isDisposed: boolean;
    dispose: this['unsubscribe'];
}
export declare class SingleAssignmentDisposable implements ISubscription, Disposable {
    closed: boolean;
    private disposable;
    unsubscribe(): void;
    getDisposable(): ISubscription;
    setDisposable(v: ISubscription): void;
    readonly isDisposed: boolean;
    dispose: this['unsubscribe'];
}
export declare class RefCountDisposable implements ISubscription {
    private subscription;
    closed: boolean;
    readonly isDisposed: boolean;
    private count;
    private primaryDisposed;
    constructor(subscription: ISubscription);
    unsubscribe(): void;
    private _disposeCheck();
    getDisposable(): DisposableImpl;
    dispose: this['unsubscribe'];
}
export declare type IDisposable = ISubscription;
