An error occurred while loading the file. Please try again.
-
Grand Francois authored0d5fc5fb
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;
}
}