import { ION, Opt, Unit, UnitEvents } from './Class/Unit';
import { Pin } from './Pin';
import { PinOpt } from './PinOpt';
import { System } from './system';
import { Dict } from './types/Dict';
export type Primitive_EE = {};
export type PrimitiveEvents<_EE extends Dict<any[]>> = UnitEvents<_EE & Primitive_EE> & Primitive_EE;
export declare class Primitive<I = {}, O = {}, _EE extends PrimitiveEvents<_EE> & Dict<any[]> = PrimitiveEvents<Primitive_EE>> extends Unit<I, O, _EE> {
    protected _i: Partial<I>;
    protected _o: Partial<O>;
    _active_i_count: number;
    _active_o_count: number;
    protected _i_start_count: number;
    protected _i_start: Dict<boolean>;
    protected _o_invalid_count: number;
    protected _o_invalid: Dict<boolean>;
    protected _i_invalid_count: number;
    protected _i_invalid: Dict<boolean>;
    protected _forwarding: boolean;
    protected _backwarding: boolean;
    protected _forwarding_empty: boolean;
    private _inputUnlisten;
    private _outputUnlisten;
    private __buffer;
    constructor({ i, o }: ION<I, O>, opt: Opt, system: System, id: string);
    getActiveInputCount(): number;
    getActiveOutputCount(): number;
    getOutputData(): Partial<O>;
    private _plunkOutput;
    private _plunkInput;
    private _setupInputs;
    private _setupDataInput;
    private _setupRefInput;
    private _setupInput;
    private _setupOutputs;
    private __setupOutput;
    private _setupDataOutput;
    private _setupRefOutput;
    private _setupOutput;
    private _onDataInputData;
    private _input_effemeral;
    private _onRefInputData;
    private __onRefInputData;
    private _onInputSet;
    onInputSet(name: string, input: Pin<any>, opt: PinOpt, propagate: boolean): void;
    private _onOutputSet;
    onOutputSet(name: string, output: Pin<O[keyof O]>, opt: PinOpt, propagate: boolean): void;
    private _onInputRemoved;
    onInputRemoved(name: string, input: Pin<any>): void;
    _onOutputRemoved(name: string, output: Pin<any>): void;
    onOutputRemoved(name: string, output: Pin<any>): void;
    onDataInputData(name: string, data: any): void;
    onRefInputData(name: any, data: any): void;
    private _onInputRenamed;
    private _onOutputRenamed;
    onInputRenamed(name: string, newName: string, opt: PinOpt, newOpt: PinOpt): void;
    onOutputRenamed(name: string, newName: string, opt: PinOpt, newOpt: PinOpt): void;
    private _activateInput;
    private _deactivateInput;
    private _onDataInputDrop;
    private _onRefInputDrop;
    private __onRefInputDrop;
    private _onRefInputInvalid;
    onDataInputDrop(name: string, data: any): void;
    onRefInputDrop(name: string, data: any): void;
    private _activateOutput;
    private _deactivateOutput;
    private __onOutputData;
    private _onDataOutputData;
    private _onRefOutputData;
    private _onDataOutputDrop;
    private _onRefOutputDrop;
    onDataOutputData(name: string, data: any): void;
    onDataOutputDrop(name: string): void;
    onRefOutputData(name: string, data: any): void;
    onRefOutputDrop(name: string): void;
    onOutputInvalid(name: string): void;
    private _onOutputInvalid;
    private _onInputEnd;
    onDataInputEnd(name: string): void;
    private _onInputStart;
    onDataInputStart(name: string): void;
    private _onDataInputInvalid;
    protected _start(): void;
    protected _invalidate(): void;
    protected _end(): void;
    protected _forward(name: string, data: any): void;
    protected _forward_(output: Pin, data: any): void;
    protected _forward_all_empty(): void;
    protected _forward_empty(name: keyof O): void;
    protected _backward_all(): void;
    protected _backward(name: keyof I): void;
    onDataInputInvalid(name: string): void;
    onRefInputInvalid(name: string): void;
    snapshotSelf(): Dict<any>;
    restoreSelf(state: Dict<any>): void;
}
