An error occurred while loading the file. Please try again.
-
81dbc9f1
import { ComputeNode } from "../compute-node";
import { MapIterator } from "../util/iterator";
import { ParamDefinition } from "./param-definition";
import { ParamDomainValue } from "./param-domain";
export interface IParamDefinitionIterator extends IterableIterator<ParamDefinition> {
}
/**
* itérateur sur les paramètres d'une seule instance de ParamsEquation
*/
export class ParamDefinitionIterator implements IParamDefinitionIterator {
private _mapIterator: MapIterator<ParamDefinition>;
constructor(_params: ParamsEquation) {
this._mapIterator = new MapIterator(_params.map);
}
public next(): IteratorResult<ParamDefinition> {
return this._mapIterator.next();
}
public [Symbol.iterator](): IterableIterator<ParamDefinition> {
return this;
}
}
/**
* itérateur sur les paramètres d'un tableau de de ParamsEquation
*/
// tslint:disable-next-line:max-classes-per-file
export class ParamsEquationArrayIterator implements IParamDefinitionIterator {
private get done(): IteratorResult<ParamDefinition> {
return {
done: true,
value: undefined
};
}
private _paramsEqs: ParamsEquation[];
private _index: number = 0;
private _currentMapIterator: MapIterator<ParamDefinition>;
constructor(p: ParamsEquation[]) {
this._paramsEqs = p;
}
public next(): IteratorResult<ParamDefinition> {
if (this._currentMapIterator === undefined) {
this.nextIterator();
}
let res = this.done;
if (this._currentMapIterator) {
res = this._currentMapIterator.next();
if (res.done) {
this.nextIterator();
if (this._currentMapIterator) {
res = this._currentMapIterator.next();
}
}
}
return res;
}
public [Symbol.iterator](): IterableIterator<ParamDefinition> {
return this;
7172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140
}
private nextIterator() {
if (this._index < this._paramsEqs.length) {
this._currentMapIterator = new MapIterator(this._paramsEqs[this._index++].map);
} else {
this._currentMapIterator = undefined;
}
}
}
/**
* liste des paramètres d'une équation
*/
// tslint:disable-next-line:max-classes-per-file
export abstract class ParamsEquation implements Iterable<ParamDefinition> {
/** précision de calcul par défaut */
private static DEFAULT_COMPUTE_PREC = 0.0001;
/**
* Pointer to calculator using these parameters; usually defined in Nub constructor
* when affecting ParamsEquation. Usually a Nub but might be an acSection
*/
public parent: ComputeNode;
protected _paramMap: { [key: string]: ParamDefinition } = {};
/** Précision de calcul */
private _Pr: ParamDefinition;
private _calculabilityDefined: boolean;
public constructor(parent?: ComputeNode) {
this.parent = parent;
this._calculabilityDefined = false;
this._Pr = new ParamDefinition(this, "Pr", ParamDomainValue.POS, ParamsEquation.DEFAULT_COMPUTE_PREC);
this.addParamDefinition(this._Pr);
}
get Pr() {
return this._Pr;
}
get nubUid() {
if (! this.parent) {
throw new Error("ParamsEquation.nubUid : equation has no parent Nub !");
}
return this.parent.uid;
}
get calculabilityDefined(): boolean {
return this._calculabilityDefined;
}
public DefineCalculability() {
this._calculabilityDefined = true;
}
public hasParameter(name: string): boolean {
for (const p of this) {
if (p.symbol === name) {
return true;
}
}
return false;
}
public get map(): { [key: string]: ParamDefinition } {
return this._paramMap;
141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184
}
public resetParametersCalculability() {
for (const p of this) {
p.calculability = undefined;
}
}
public checkParametersCalculability() {
const res = [];
for (const p of this) {
if (p.calculability === undefined) {
res.push(p.symbol);
}
}
if (res.length > 0) {
throw new Error("Calculability of parameter(s) " + res.toString() + " has not been defined");
}
}
public [Symbol.iterator](): Iterator<ParamDefinition> {
return this.iterator;
}
public get iterator(): IParamDefinitionIterator {
return new ParamDefinitionIterator(this);
}
protected addParamDefinition(p: ParamDefinition, force: boolean = false) {
if (force || !this.hasParameter(p.symbol)) {
this._paramMap[p.symbol] = p;
}
}
protected addParamDefinitions(ps: ParamsEquation) {
for (const p of ps) {
// Force update of the map index
this.addParamDefinition(p, true);
}
}
}