diff --git a/src/param/param-values.ts b/src/param/param-values.ts index dea1db9d04ea3f282f7fae570d5ca27489234532..81f1835b278a7ad7e316ca3f952445d7c48002d7 100644 --- a/src/param/param-values.ts +++ b/src/param/param-values.ts @@ -6,6 +6,12 @@ import { IterableValues, NamedIterableValues, NumberIterator, ParamValueIterator import { ParamValueMode } from "./param-value-mode"; export class ParamValues implements INubReference, IterableValues { + + /** + * implémentation par délégation de INubReference + */ + public _nubRef: NubReference; + /** * mode de génération des valeurs : min/max, liste, ... */ @@ -46,11 +52,6 @@ export class ParamValues implements INubReference, IterableValues { */ private _iterator: NumberIterator; - /** - * implémentation par délégation de INubReference - */ - private _nubRef: NubReference; - constructor() { this._singleValue = new DefinedNumber(); this._currentValue = new DefinedNumber(); @@ -163,12 +164,6 @@ export class ParamValues implements INubReference, IterableValues { return this._currentValue.isDefined; } - private checkValueMode(expected: ParamValueMode) { - if (this._valueMode !== expected) { - throw new Error(`ParamValues : mode de valeurs ${ParamValueMode[expected]} incorrect`); - } - } - public get min() { switch (this._valueMode) { case ParamValueMode.MINMAX: @@ -356,12 +351,14 @@ export class ParamValues implements INubReference, IterableValues { * @return prochaine valeur à parcourir par l'itérateur courant */ public next(): IteratorResult<number> { - if (this.isReferenceDefined) - var res = this.referencedObject.next(); - else { + let res; + if (this.isReferenceDefined) { + res = this.referencedObject.next(); + } else { res = this._iterator.next(); - if (!res.done) + if (!res.done) { this._currentValue.value = res.value; + } } return res; } @@ -369,4 +366,10 @@ export class ParamValues implements INubReference, IterableValues { public [Symbol.iterator](): IterableIterator<number> { return this; } + + private checkValueMode(expected: ParamValueMode) { + if (this._valueMode !== expected) { + throw new Error(`ParamValues : mode de valeurs ${ParamValueMode[expected]} incorrect`); + } + } } diff --git a/src/value_ref/object_ref.ts b/src/value_ref/object_ref.ts index 7670eaaaaca224f4f3b985c6ac42bacecd42cc7d..f087ebb3af1cfd6fa518f1a2c3a2cf32d11ce622 100644 --- a/src/value_ref/object_ref.ts +++ b/src/value_ref/object_ref.ts @@ -6,7 +6,8 @@ import { Result } from "../util/result"; /* * gestion de la valeur d'un paramètre par référence à une autre valeur (paramètre, résultat, résultat complémentaire) * - * la référence (cf. INubReference.defineReference) (cf. INubReference.defineReference) est de la forme <n | ouvrage[n] | N1>[.[N2]] + * la référence (cf. INubReference.defineReference) (cf. INubReference.defineReference) + * est de la forme <n | ouvrage[n] | N1>[.[N2]] * n : indice de de l'ouvrage dans le cas des ouvrages parallèles * N1 : un nom de paramètre/résultat (dans le cas d'un résultat, il est suivi d'un point) * N2 : nom de résultat complémentaire (optionnel) @@ -58,17 +59,6 @@ export interface IReferencedNub { * référence vers un Nub contenant une valeur vers laquelle on crée un lien */ export interface INubReference { - /** - * définition de la valeur référencée dans le Nub - * @param target Nub contenant la valeur qu'on va référencer - * @param desc : description de la valeur pointée sous forme symbolique. Exemples : Q, <n° d'ouvrage>.Z1 - */ - defineReference(target: IReferencedNub, desc: string): void; - - /** - * supprime la référence - */ - undefineReference(): void; /** * description symbolique de la référence @@ -104,6 +94,18 @@ export interface INubReference { * objet (paramètre/résultat/résultat complémentaire) référencé */ readonly referencedObject: NamedIterableValues; + + /** + * définition de la valeur référencée dans le Nub + * @param target Nub contenant la valeur qu'on va référencer + * @param desc : description de la valeur pointée sous forme symbolique. Exemples : Q, <n° d'ouvrage>.Z1 + */ + defineReference(target: IReferencedNub, desc: string): void; + + /** + * supprime la référence + */ + undefineReference(): void; } /** @@ -135,7 +137,7 @@ export class NubReference implements INubReference { } public get isReferenceDefined(): boolean { - return this._referencedNub !== undefined && this._refDefinition !== undefined; + return this._referencedNub != undefined && this._refDefinition != undefined; } /** @@ -152,7 +154,9 @@ export class NubReference implements INubReference { if (!this.isReferenceDefined) { return undefined; } - return this._referencedNub.getReferencedParamValues(this._refDefinition); + const rpv = this._referencedNub.getReferencedParamValues(this._refDefinition); + rpv._nubRef = this; + return rpv; } /**