import { Primitive, PrimitiveEvents } from '../../Primitive';
import { System } from '../../system';
import { Dict } from '../../types/Dict';
import { Functional } from '../Functional';
import { Done } from '../Functional/Done';
import { Opt } from '../Unit';
export type Semifunctional_EE = {};
export type SemifunctionalEvents<_EE extends Dict<any[]>> = PrimitiveEvents<_EE & Semifunctional_EE> & Semifunctional_EE;
export interface SFIO {
    fi?: string[];
    fo?: string[];
    i?: string[];
    o?: string[];
}
export declare class Semifunctional<I extends Dict<any> = any, O extends Dict<any> = any, EE extends SemifunctionalEvents<Dict<any>> = SemifunctionalEvents<Semifunctional_EE>> extends Primitive<I, O, EE> {
    protected _f_i: Set<string>;
    protected _f_o: Set<string>;
    protected _functional: Functional<any, any>;
    protected _primitive: Primitive<I, O>;
    constructor({ fi, fo, i, o }: SFIO, opt: Opt, system: System, id: string);
    f(i: Partial<I>, done: Done<O>): void;
    d(): void;
    protected _done: Done<O>;
    onIterDataInputData<K extends keyof I>(name: K, data: any): void;
    onIterRefInputData<K extends keyof I>(name: K, data: any): void;
    onIterDataInputDrop<K extends keyof I>(name: K): void;
    onIterRefInputDrop<K extends keyof I>(name: K): void;
    onIterDataOutputDrop<K extends keyof O>(name: K): void;
    onIterRefOutputDrop<K extends keyof O>(name: K): void;
    onIterDataInputInvalid<K extends keyof I>(name: K): void;
    onIterRefInputInvalid<K extends keyof I>(name: K): void;
    destroy(): void;
    protected _backward_f(): void;
    protected _forward_empty_f(): void;
}
