Commit 07e57b8f authored by Dorchies David's avatar Dorchies David
Browse files

Tentative résolution #49 version 2

Showing with 24 additions and 50 deletions
+24 -50
......@@ -79,59 +79,34 @@ export abstract class Nub extends ComputeNode implements IReferencedNub {
let computedParam: ParamDefinition;
// instance de ParamValues utilisée pour le paramètre varié (qui peut être un paramètre référencé (importé))
let variatedPrmValues: ParamValues;
let refResult: Result;
for (const p of this.parameterIterator) {
switch (p.valueMode) {
if (p.valueMode === ParamValueMode.CALCUL) {
if (sDonnee === undefined) {
if (computedParam === undefined) {
computedParam = p;
} else {
// tslint:disable-next-line:max-line-length
throw new Error(`CalcSerie() : il y plusieurs paramètres à calculer (au moins ${computedParam.symbol} et ${p.symbol})`);
}
}
}
switch (p.paramValues.valueMode) {
case ParamValueMode.SINGLE:
break;
case ParamValueMode.LISTE:
case ParamValueMode.MINMAX:
if (variatedPrmValues === undefined) {
variatedPrmValues = p.paramValues;
} else {
// tslint:disable-next-line:max-line-length
throw new Error(`CalcSerie() : il y plusieurs paramètres à varier : ${p.symbol}`);
}
variatedPrmValues = this.setVariatedPrmValues(p, variatedPrmValues);
break;
case ParamValueMode.CALCUL:
if (sDonnee === undefined) {
if (computedParam === undefined) {
computedParam = p;
} else {
// tslint:disable-next-line:max-line-length
throw new Error(`CalcSerie() : il y plusieurs paramètres à calculer (au moins ${computedParam.symbol} et ${p.symbol})`);
}
}
break;
case ParamValueMode.LINK:
if (p.referencedParamValues !== undefined) {
switch (p.referencedParamValues.valueMode) {
case ParamValueMode.SINGLE:
break;
case ParamValueMode.LISTE:
case ParamValueMode.MINMAX:
variatedPrmValues = this.setVariatedPrmValues(
p.referencedParamValues, variatedPrmValues, p.symbol
);
break;
case ParamValueMode.CALCUL:
// Le paramètre lié est un résultat de calcul
if (p.referencedResult.nbResultElements > 1) {
variatedPrmValues = this.setVariatedPrmValues(
p.referencedParamValues, variatedPrmValues, p.symbol
);
}
break;
default:
// tslint:disable-next-line:max-line-length
throw new Error(`CalcSerie() : valeur référencée de ParamValueMode ${ParamValueMode[p.referencedParamValues.valueMode]} non prise en charge`);
}
// Le paramètre lié est un résultat de calcul
if (p.isReferenceDefined && p.referencedResult.nbResultElements > 1) {
variatedPrmValues = this.setVariatedPrmValues(p, variatedPrmValues);
refResult = p.referencedResult;
}
break;
......@@ -159,7 +134,7 @@ export abstract class Nub extends ComputeNode implements IReferencedNub {
this._result = this.Calc(computedSymbol, rInit, rPrec); // résultat dans this._result
} else {
const res = new Result();
variatedPrmValues.initIterator();
variatedPrmValues.initIterator(false, refResult);
while (variatedPrmValues.hasNext) {
// tslint:disable-next-line:no-unused-expression
variatedPrmValues.next;
......@@ -308,12 +283,12 @@ export abstract class Nub extends ComputeNode implements IReferencedNub {
return prefix === undefined ? str : `${prefix}${str}`;
}
private setVariatedPrmValues(prmValues: ParamValues, variatedPrmValues: ParamValues, symbol: string) {
private setVariatedPrmValues(p: ParamDefinition, variatedPrmValues: ParamValues) {
if (variatedPrmValues === undefined) {
return prmValues;
return p.paramValues;
} else {
// tslint:disable-next-line:max-line-length
throw new Error(`CalcSerie() : il y plusieurs paramètres à varier : ${symbol}`);
throw new Error(`CalcSerie() : Paramètres à varier redondant : ${p.symbol}`);
}
}
......
......@@ -247,7 +247,7 @@ export class ParamValues implements INubReference, IterableValues {
* prépare un itérateur pour parcourir les valeurs
* @param reverse
*/
public initIterator(reverse: boolean = false) {
public initIterator(reverse: boolean = false, result?: Result) {
switch (this._valueMode) {
case ParamValueMode.LISTE:
case ParamValueMode.MINMAX:
......@@ -255,9 +255,8 @@ export class ParamValues implements INubReference, IterableValues {
break;
case ParamValueMode.CALCUL:
this._iterator = this._nubRef.referencedResult.valuesIterator;
this._iterator = result.valuesIterator;
break;
default:
throw new Error(`ParamValues : mode de valeurs ${ParamValueMode[this._valueMode]} incorrect`);
}
......
Supports Markdown
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment