import { ParamValueMode } from "../param/param-values"; /** * objet (paramètre ou résultat) dont les valeurs sont référençables pour réutilisation * (d'une calculette sur une autre par ex) */ export interface IReferencedObject { /** * getter de la (des) valeurs */ getReferencedValues(desc: string): number[]; /** * getter du mode de valeur */ getReferencedValueMode(desc: string): ParamValueMode; } /** * référence vers un objet contenant une valeur vers laquelle on crée un lien */ export interface IObjectReference { /** * définition de la valeur référencée dans l'objet * @param target objet 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: IReferencedObject, desc: string): void; /** * true si la référence a été définie */ readonly isReferenceDefined: boolean; /** * valeurs de l'objet IReferencedObject référencé */ readonly referencedValues: number[]; /** * mode de valeur dans l'objet référencé */ readonly referencedValueMode: ParamValueMode; } /** * implémentation par défaut de IObjectReference */ export class ObjectReference implements IObjectReference { private _referencedObject: IReferencedObject; private _refDefinition: string; public defineReference(target: IReferencedObject, desc: string) { this._referencedObject = target; this._refDefinition = desc; } public get isReferenceDefined(): boolean { return this._referencedObject !== undefined && this._refDefinition !== undefined; } /** * objet référencé */ public get referencedObject(): IReferencedObject { return this._referencedObject; } /** * valeurs dans l'objet référencé */ public get referencedValues(): number[] { return this._referencedObject.getReferencedValues(this._refDefinition); } /** * mode de valeur dans l'objet référencé */ public get referencedValueMode(): ParamValueMode { return this._referencedObject.getReferencedValueMode(this._refDefinition); } }