import { JalhydObject, MessageCode } from "../internal_modules";
import { Nub } from "../internal_modules";
import { cLog } from "../internal_modules";
import { Message } from "../internal_modules";
import { ResultElement } from "../internal_modules";
/**
 * Result of a calculation.
 * May contain several ResultElement, if one or more parameters were varying.
 */
export declare class Result extends JalhydObject {
    /** calculated parameter (main result) symbol */
    private _symbol;
    /** Nub that produced this result */
    private _sourceNub;
    /** global messages, related to the whole module */
    private _globalLog;
    /** one result element for each iteration (when parameters are varying) */
    private _resultElements;
    /**
     * @param v value of calculated parameter, or result element, or (usually error) Message
     * @param sourceNub Nub that generated this result
     * @param extraValues map of result values by symbol, to add to the first result element
     */
    constructor(v?: number | Message | ResultElement, sourceNub?: Nub, extraValues?: {
        [key: string]: number;
    });
    get symbol(): string;
    set symbol(s: string);
    get sourceNub(): Nub;
    /** Use with caution, for Solveur for ex. */
    updateSourceNub(sn: Nub): void;
    get globalLog(): cLog;
    get resultElements(): ResultElement[];
    /**
     * @return the most recent result element
     */
    get resultElement(): ResultElement;
    /**
     * sets the most recent result element
     */
    set resultElement(r: ResultElement);
    addResultElement(r: ResultElement): void;
    /**
     * @return true if there is at least 1 result element
     */
    hasResultElements(): boolean;
    /**
     * @return true if there are at least 2 result elements
     */
    hasMultipleValues(): boolean;
    /**
    * iterator on nth result element in this result and child results
    * @param index nth result element index
    */
    nthResultElementIterator(index: number): Iterator<ResultElement>;
    /**
     * Returns the list of calculated values for the parameter in CALC mode;
     * if no parameter is variated, the list will contain only 1 value
     */
    getCalculatedValues(): number[];
    /**
     * @returns proxy to .resultElement.ok (false if there is no result element)
     */
    get ok(): boolean;
    /** adds a message to the global log */
    addMessage(m: Message): void;
    /** merges the given log with the global log */
    addLog(l: cLog): void;
    /**
     * @return true if global log has at least one message, whatever its level
     */
    hasGlobalLog(): boolean;
    /**
     * @return true if union of global log and result elements logs has at least one
     *         message, whatever its level
     */
    hasLog(): boolean;
    /**
     * @returns true if globalLog has at least one message with level ERROR
     */
    hasGlobalError(): boolean;
    /**
     * @returns true if globalLog has at least one message with level WARNING
     * @WARNING this is NOT the famous hasGlobalWarming() Al-Gore-ithm !
     */
    hasGlobalWarning(): boolean;
    /**
     * @returns true if at least one of the log messages (general log or result elements logs)
     *          has an error-level message, i.e. true if at least one calculation has failed
     */
    hasErrorMessages(): boolean;
    /**
     * @returns true if at least one of the log messages (general log or result elements logs)
     *          has a warning-level message
     */
    hasWarningMessages(): boolean;
    /**
     * @returns true if every result element log contains an error (i.e. no calculation has succeeded);
     *          does not inspect global log
     */
    get hasOnlyErrors(): boolean;
    /**
     * determine if a message is present in result
     * @param code message code to find
     * @param recurs if true, search into nub children
     */
    hasMessage(code: MessageCode, recurs?: boolean): boolean;
    /**
     * determine if all messages have the same code
     * @param code message code to find
     */
    hasOnlyMessage(code: MessageCode): boolean;
    get uniqueMessageCodes(): MessageCode[];
    /**
     * compute log stats (# of error, warning, info) on all result element
     */
    resultElementsLogStats(n: number, res?: any): any;
    /**
     * @return value of the calculated parameter, for the most recent result element
     */
    get vCalc(): number;
    /**
     * sets the value of the calculated parameter, for the most recent result element
     */
    set vCalc(r: number);
    /**
     * @returns log from the most recent result element
     * @TODO ambiguous / counter-intuitive : should be renamed
     */
    get log(): cLog;
    get values(): {
        [key: string]: number;
    };
    get extraResults(): any;
    getValue(name: string): number;
    /**
     * Removes all values that are not vCalc, from all result elements
     */
    removeExtraResults(): void;
}
//# sourceMappingURL=result.d.ts.map