param.ts 12.46 KiB
import { Debug } from "./base";
import { DefinedNumber } from "./util/definedvalue";
import { Interval } from "./util/interval";
import { Message, MessageCode } from "./util/message";
import { MapIterator } from "./util/iterator";
import { JalhydObject } from "./jalhyd_object";
/**
 * domaine de définition du paramètre
export enum ParamDomainValue {
    /**
     * >0, =0, <0 (-inf -> +inf)
    ANY,
    /**
     * >=0
    POS_NULL,
    /**
     * > 0
    POS,
    /**
     * <>0
    NOT_NULL,
    /**
     * intervalle
    INTERVAL
export class ParamDomain {
    public static getDefaultBounds(d: ParamDomainValue): { min: number, max: number } {
        switch (d) {
            case ParamDomainValue.INTERVAL:
                const e: Message = new Message(MessageCode.ERROR_PARAMDOMAIN_INVALID);
                throw e;
            case ParamDomainValue.ANY:
            case ParamDomainValue.NOT_NULL:
                return { min: -Infinity, max: Infinity };
            case ParamDomainValue.POS:
                return { min: 1e-9, max: Infinity };
            case ParamDomainValue.POS_NULL:
                return { min: 0, max: Infinity };
            // default:
            //     throw "valeur de ParamDomainValue" + ParamDomainValue[d] + " non prise en charge";
    private _domain: ParamDomainValue;
    private _minValue: number;
    private _maxValue: number;
    constructor(d: ParamDomainValue, min?: number, max?: number) {
        this.checkValue(d, min, max);
        this._domain = d;
7172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140
switch (this._domain) { case ParamDomainValue.INTERVAL: this._minValue = min; this._maxValue = max; break; default: const b = ParamDomain.getDefaultBounds(this._domain); this._minValue = b.min; this._maxValue = b.max; break; } } get domain() { return this._domain; } get minValue() { return this._minValue; } get maxValue() { return this._maxValue; } public get interval(): Interval { switch (this._domain) { case ParamDomainValue.INTERVAL: return new Interval(this._minValue, this._maxValue); default: const b = ParamDomain.getDefaultBounds(this._domain); return new Interval(b.min, b.max); } } public clone(): ParamDomain { switch (this._domain) { case ParamDomainValue.INTERVAL: return new ParamDomain(this._domain, this._minValue, this._maxValue); default: return new ParamDomain(this._domain); } } private checkValue(val: number, min: number, max: number) { switch (val) { case ParamDomainValue.INTERVAL: if (min === undefined || max === undefined || min > max) { const e: Message = new Message(MessageCode.ERROR_PARAMDOMAIN_INTERVAL_BOUNDS); e.extraVar.minValue = min; e.extraVar.maxValue = max; throw e; } break; default: // en dehors du cas INTERVAL, on ne doit pas fournir de valeur if (min !== undefined || max !== undefined) { const e: Message = new Message(MessageCode.ERROR_PARAMDOMAIN_INTERVAL_BOUNDS); e.extraVar.minValue = min; e.extraVar.maxValue = max; throw e; } break; } }