import { CoreGraphNodeId } from './CoreGraph';
import { DirtyController, PostDirtyHook } from './DirtyController';
import { PolyScene } from '../../engine/scene/PolyScene';
/**
 *
 *
 * This is the base class for nodes and params, which are part of the same graph, and are connected to dependencies.
 *
 */
export declare class CoreGraphNode {
    protected _scene: PolyScene;
    protected _name: string;
    private _graph;
    private _graphNodeId;
    private _dirtyController;
    private _allPredecessors;
    private _allSuccessors;
    private _allPredecessorsDirty;
    private _allSuccessorsDirty;
    constructor(_scene: PolyScene, _name: string);
    private _disposed;
    dispose(): void;
    disposed(): boolean;
    /**
     * returns the name
     *
     */
    name(): string;
    setName(name: string): void;
    /**
     * returns the scene
     *
     */
    scene(): PolyScene;
    /**
     * returns the id, which is unique for the scene
     *
     */
    graphNodeId(): CoreGraphNodeId;
    get dirtyController(): DirtyController;
    /**
     * makes the graphNode dirty, which in turns makes its dependencies dirty
     *
     */
    setDirty(trigger?: CoreGraphNode | null): void;
    /**
     * makes dependencies dirty
     *
     */
    setSuccessorsDirty(trigger?: CoreGraphNode): void;
    /**
     * removes the dirty state
     *
     */
    removeDirtyState(): void;
    isDirty(): boolean;
    /**
     * adds a callback that gets run when the graphNode is dirty
     *
     */
    addPostDirtyHook(name: string, callback: PostDirtyHook): void;
    removePostDirtyHook(name: string): void;
    graphRemove(): void;
    addGraphInput(src: CoreGraphNode, checkCycle?: boolean): boolean;
    removeGraphInput(src: CoreGraphNode): void;
    graphDisconnectPredecessors(): void;
    graphDisconnectSuccessors(): void;
    graphPredecessorIds(): Readonly<CoreGraphNodeId[]> | undefined;
    graphPredecessors(): Readonly<CoreGraphNode[]> | undefined;
    graphSuccessorIds(): Readonly<CoreGraphNodeId[]> | undefined;
    graphSuccessors(): Readonly<CoreGraphNode[]> | undefined;
    private _clearAllPredecessors;
    private _clearAllSuccessors;
    graphAllPredecessors(): Readonly<CoreGraphNode[]>;
    graphAllSuccessors(): Readonly<CoreGraphNode[]>;
    hasPredecessor(node: CoreGraphNode): boolean;
    clearCachesWithPredecessorsAndSuccessors(): void;
    setForbiddenTriggerNodes(nodes: CoreGraphNode | CoreGraphNode[]): void;
    clearForbiddenTriggerNodes(): void;
    setSelfDirtyForbidden(state: boolean): void;
    selfDirtyForbidden(): boolean;
}
