Commit 2890084a authored by Grand Francois's avatar Grand Francois
Browse files

#45 déplacement de l'implémentation de IObjectReference de ParamDefinition vers BaseParam

Showing with 35 additions and 35 deletions
+35 -35
...@@ -5,12 +5,13 @@ import { Message, MessageCode } from "../util/message"; ...@@ -5,12 +5,13 @@ import { Message, MessageCode } from "../util/message";
import { JalhydObject } from "../jalhyd_object" import { JalhydObject } from "../jalhyd_object"
import { ParamDomain, ParamDomainValue } from "./param-domain"; import { ParamDomain, ParamDomainValue } from "./param-domain";
import { ParamValues, ParamValueMode } from "./param-values"; import { ParamValues, ParamValueMode } from "./param-values";
import { IReferencedObject, IObjectReference, ObjectReference } from "../value_ref/object_ref";
/** /**
* paramètre avec symbole et domaine de définition * paramètre avec symbole et domaine de définition
*/ */
// tslint:disable-next-line:max-classes-per-file // tslint:disable-next-line:max-classes-per-file
export class BaseParam extends JalhydObject { export class BaseParam extends JalhydObject implements IObjectReference {
/** /**
* symbole * symbole
*/ */
...@@ -26,9 +27,15 @@ export class BaseParam extends JalhydObject { ...@@ -26,9 +27,15 @@ export class BaseParam extends JalhydObject {
*/ */
private _paramValues: ParamValues; private _paramValues: ParamValues;
/**
* implémentation par délégation de IObjectReference
*/
private _valueRef: ObjectReference;
constructor(symb: string, d: ParamDomain | ParamDomainValue, val?: number) { constructor(symb: string, d: ParamDomain | ParamDomainValue, val?: number) {
super(); super();
this._symbol = symb; this._symbol = symb;
this._valueRef = new ObjectReference();
this._paramValues = new ParamValues(); this._paramValues = new ParamValues();
this._paramValues.setSingleValue(val); this._paramValues.setSingleValue(val);
...@@ -75,7 +82,16 @@ export class BaseParam extends JalhydObject { ...@@ -75,7 +82,16 @@ export class BaseParam extends JalhydObject {
throw e; throw e;
} }
return this._paramValues.singleValue; switch (this.valueMode) {
case ParamValueMode.SINGLE:
return this._paramValues.singleValue;
case ParamValueMode.LINK:
return this._valueRef.referencedValues[0];
default:
throw new Error(`mode de valeur ${ParamValueMode[this.valueMode]} invalide`);
}
} }
public setValue(val: number) { public setValue(val: number) {
...@@ -144,4 +160,18 @@ export class BaseParam extends JalhydObject { ...@@ -144,4 +160,18 @@ export class BaseParam extends JalhydObject {
public get valueMode() { public get valueMode() {
return this._paramValues.valueMode; return this._paramValues.valueMode;
} }
// interface IObjectReference
public defineReference(target: IReferencedObject, desc: string) {
this.paramValues.valueMode = ParamValueMode.LINK;
this._valueRef.defineReference(target, desc);
}
/**
* valeurs de l'objet IReferencedObject référencé
*/
public get referencedValues(): number[] {
return this._valueRef.referencedValues;
}
} }
...@@ -2,8 +2,7 @@ import { Message, MessageCode } from "../util/message"; ...@@ -2,8 +2,7 @@ import { Message, MessageCode } from "../util/message";
import { BaseParam } from "./param-base"; import { BaseParam } from "./param-base";
import { ParamDomain, ParamDomainValue } from "./param-domain"; import { ParamDomain, ParamDomainValue } from "./param-domain";
import { ParamValueMode } from "./param-values"; import { ParamValueMode, ParamValueIterator } from "./param-values";
import { IReferencedObject, IObjectReference, ObjectReference } from "../value_ref/object_ref";
/** /**
* calculabilité du paramètre * calculabilité du paramètre
...@@ -34,34 +33,19 @@ export enum ParamCalculability { ...@@ -34,34 +33,19 @@ export enum ParamCalculability {
* définition d'un paramètre d'un noeud de calcul * définition d'un paramètre d'un noeud de calcul
*/ */
// tslint:disable-next-line:max-classes-per-file // tslint:disable-next-line:max-classes-per-file
export class ParamDefinition extends BaseParam implements IObjectReference { export class ParamDefinition extends BaseParam {
/** /**
* calculabilité * calculabilité
*/ */
private _calc: ParamCalculability; private _calc: ParamCalculability;
/**
* implémentation par délégation de IObjectReference
*/
private _valueRef: ObjectReference;
constructor(s: string, d: ParamDomain | ParamDomainValue, val?: number) { constructor(s: string, d: ParamDomain | ParamDomainValue, val?: number) {
super(s, d, val); super(s, d, val);
this._valueRef = new ObjectReference();
this._calc = ParamCalculability.FREE; this._calc = ParamCalculability.FREE;
} }
get v(): number { get v(): number {
switch (this.valueMode) { return super.getValue();
case ParamValueMode.SINGLE:
return super.getValue();
case ParamValueMode.LINK:
return this._valueRef.referencedValues[0];
default:
throw new Error(`mode de valeur ${ParamValueMode[this.valueMode]} invalide`);
}
} }
set v(val: number) { set v(val: number) {
...@@ -104,18 +88,4 @@ export class ParamDefinition extends BaseParam implements IObjectReference { ...@@ -104,18 +88,4 @@ export class ParamDefinition extends BaseParam implements IObjectReference {
res._calc = this._calc; res._calc = this._calc;
return res; return res;
} }
// interface IObjectReference
public defineReference(target: IReferencedObject, desc: string) {
this.paramValues.valueMode = ParamValueMode.LINK;
this._valueRef.defineReference(target, desc);
}
/**
* valeurs de l'objet IReferencedObject référencé
*/
public get referencedValues(): number[] {
return this._valueRef.referencedValues;
}
} }
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