import { Nub } from "./internal_modules";
import { INamedIterableValues } from "./internal_modules";
import { ParamValues } from "./internal_modules";
export declare class LinkedValue {
    /** linked value metadata (ex: calculator title for GUI) */
    meta: any;
    /** target Nub */
    private _nub;
    /**
     * nub indeed holding targeted parameter in case target nub does not
     */
    private _realNub;
    /** target value : ParamDefinition (possibly in CALC mode) | undefined (extra result) */
    private _element;
    /** parameter / result symbol (ex: "Q") */
    private _symbol;
    /** magic param values: proxy to target when target is a not a result, handcrafted fake object otherwise */
    private _paramValues;
    constructor(nub: Nub, element: INamedIterableValues, symbol: string, meta?: any, real?: Nub);
    get nub(): Nub;
    get element(): INamedIterableValues;
    get symbol(): string;
    /**
     * Returns true if targetted value is a ParamDefinition (in CALC mode or not),
     * and not an extra result
     */
    isParameter(): boolean;
    /**
     * Returns true if targetted value is a ParamDefinition in CALC mode
     * (might not have any value yet)
     */
    isResult(): boolean;
    /**
     * Returns true if targetted value is a ParamDefinition in CALC mode,
     * or in LINK mode targetting a result (might not have any value yet)
     */
    isCalculated(): boolean;
    /**
     * Returns true if targetted value is an extra result
     * (might not have any value yet)
     */
    isExtraResult(): boolean;
    /**
     * @returns true if given nub/symbol combination is targeted by "this"
     */
    isTargetOf(nub: Nub, symbol: string): boolean;
    /**
     * Returns true if v and the current objects have the same :
     *  - Nub UID
     *  - symbol
     *  - value type (Parameter / Result)
     * (ignores metadata)
     * @param v
     */
    equals(v: LinkedValue): boolean;
    /**
     * Returs the ParamValues for the linked Parameter if any, or a
     * fake ParamValues object if the targetted element is a Result
     * or extra result.
     * If target is a result and triggerChainComputation is true,
     * triggers a chain computation to obtain the result
     */
    getParamValues(triggerChainComputation?: boolean): ParamValues;
    /**
     * Returns the single value of this.paramValues; triggers a chain computation
     * if required to obtain ParamValues
     */
    getValue(triggerChainComputation?: boolean): number;
    /**
     * Returns true if
     * - a parameter is targetted and it has multiple values
     * - a result / extra result is targetted and it has more than 1 value
     */
    hasMultipleValues(): boolean;
    /**
     * Returns true if target value is available
     */
    isDefined(): boolean;
    /**
     * When invalidating a Nub's result, parameters pointing to this result should
     * invalidate their proxy paramValues too
     */
    invalidateParamValues(): void;
    private getExtraResults;
}
//# sourceMappingURL=linked-value.d.ts.map