Changeset 2740 for trunk/sources/HeuristicLab.Parameters/3.3
- Timestamp:
- 02/03/10 04:43:06 (14 years ago)
- Location:
- trunk/sources/HeuristicLab.Parameters/3.3
- Files:
-
- 2 added
- 4 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/sources/HeuristicLab.Parameters/3.3/HeuristicLab.Parameters-3.3.csproj
r2714 r2740 49 49 </ItemGroup> 50 50 <ItemGroup> 51 <Compile Include="SubScopesItemParameter.cs" /> 52 <Compile Include="ScopeParameter.cs" /> 51 53 <Compile Include="HeuristicLabParametersPlugin.cs" /> 52 54 <Compile Include="ItemParameter.cs" /> -
trunk/sources/HeuristicLab.Parameters/3.3/ItemParameter.cs
r2715 r2740 29 29 namespace HeuristicLab.Parameters { 30 30 /// <summary> 31 /// Represents a parameter.31 /// A generic parameter which represents an instance of type T. 32 32 /// </summary> 33 33 [Item("ItemParameter<T>", "A generic parameter which represents an instance of type T.")] … … 46 46 } 47 47 48 private T value;48 private T localValue; 49 49 [Storable] 50 public T Value {51 get { return this. value; }50 public T LocalValue { 51 get { return this.localValue; } 52 52 set { 53 if (value != this. value) {53 if (value != this.localValue) { 54 54 if ((value != null) && (!DataType.IsInstanceOfType(value))) throw new ArgumentException("Static value does not match data type of parameter"); 55 if (this. value != null) this.value.Changed -= new ChangedEventHandler(Value_Changed);56 this. value = value;57 if (this. value != null) this.value.Changed += new ChangedEventHandler(Value_Changed);58 On ValueChanged();55 if (this.localValue != null) this.localValue.Changed -= new ChangedEventHandler(LocalValue_Changed); 56 this.localValue = value; 57 if (this.localValue != null) this.localValue.Changed += new ChangedEventHandler(LocalValue_Changed); 58 OnLocalValueChanged(); 59 59 } 60 60 } 61 } 62 63 public T Value { 64 get { return GetValue(); } 65 set { SetValue(value); } 61 66 } 62 67 … … 64 69 : base("Anonymous", null, typeof(T)) { 65 70 actualName = Name; 66 Value = null;71 LocalValue = null; 67 72 } 68 73 public ItemParameter(string name, string description) 69 74 : base(name, description, typeof(T)) { 70 this.actualName = Name;71 this.Value = null;75 actualName = Name; 76 LocalValue = null; 72 77 } 73 public ItemParameter(string name, string description, T value)78 public ItemParameter(string name, string description, T localValue) 74 79 : base(name, description, typeof(T)) { 75 this.actualName = Name;76 this.Value = value;80 actualName = Name; 81 LocalValue = localValue; 77 82 } 78 83 79 public override IItem GetValue(ExecutionContext context) { 84 public override IDeepCloneable Clone(Cloner cloner) { 85 ItemParameter<T> clone = (ItemParameter<T>)base.Clone(cloner); 86 clone.actualName = actualName; 87 clone.LocalValue = (T)cloner.Clone(localValue); 88 return clone; 89 } 90 91 public override string ToString() { 92 return string.Format("{0}: {1} ({2})", Name, LocalValue != null ? LocalValue.ToString() : ActualName, DataType.Name); 93 } 94 95 protected ItemParameter<T> GetParameter(out string name) { 80 96 ItemParameter<T> param = this; 81 ExecutionContext current = context;82 string actualName = null;97 ExecutionContext current = ExecutionContext; 98 name = param.Name; 83 99 while (param != null) { 84 if (param. Value != null) return param.Value;85 actualName = param.ActualName;100 if (param.LocalValue != null) return param; 101 name = param.ActualName; 86 102 current = current.Parent; 87 while ((current != null) && !current.Operator.Parameters.ContainsKey( actualName))103 while ((current != null) && !current.Operator.Parameters.ContainsKey(name)) 88 104 current = current.Parent; 89 105 if (current != null) … … 92 108 param = null; 93 109 } 94 95 IScope scope = context.Scope; 96 while ((scope != null) && !scope.Variables.ContainsKey(actualName)) 110 return null; 111 } 112 protected IVariable GetVariable(string name) { 113 IScope scope = ExecutionContext.Scope; 114 while ((scope != null) && !scope.Variables.ContainsKey(name)) 97 115 scope = scope.Parent; 98 return scope != null ? scope.Variables[actualName] .Value: null;116 return scope != null ? scope.Variables[actualName] : null; 99 117 } 100 101 public override IDeepCloneable Clone(Cloner cloner) { 102 ItemParameter<T> clone = (ItemParameter<T>)base.Clone(cloner); 103 clone.actualName = actualName; 104 clone.Value = (T)cloner.Clone(value); 105 return clone; 118 protected virtual T GetValue() { 119 string name; 120 // try to get local value from context stack 121 ItemParameter<T> param = GetParameter(out name); 122 if (param != null) return param.Value; 123 else { 124 // try to get variable from scope 125 IVariable var = GetVariable(name); 126 if (var != null) return (T)var.Value; 127 } 128 return null; 106 129 } 107 108 public override string ToString() { 109 return string.Format("{0}: {1} ({2})", Name, Value != null ? Value.ToString() : ActualName, DataType.Name); 130 protected virtual void SetValue(T value) { 131 string name; 132 // try to get local value from context stack 133 ItemParameter<T> param = GetParameter(out name); 134 if (param != null) param.Value = value; 135 else { 136 // try to get variable from scope 137 IVariable var = GetVariable(name); 138 if (var != null) var.Value = value; 139 else ExecutionContext.Scope.Variables.Add(new Variable(name, value)); 140 } 110 141 } 111 142 … … 116 147 OnChanged(); 117 148 } 118 public event EventHandler ValueChanged;119 private void On ValueChanged() {120 if ( ValueChanged != null)121 ValueChanged(this, new EventArgs());149 public event EventHandler LocalValueChanged; 150 private void OnLocalValueChanged() { 151 if (LocalValueChanged != null) 152 LocalValueChanged(this, new EventArgs()); 122 153 OnChanged(); 123 154 } 124 125 private void Value_Changed(object sender, ChangedEventArgs e) { 155 private void LocalValue_Changed(object sender, ChangedEventArgs e) { 126 156 OnChanged(e); 127 157 } -
trunk/sources/HeuristicLab.Parameters/3.3/OperatorParameter.cs
r2714 r2740 29 29 namespace HeuristicLab.Parameters { 30 30 /// <summary> 31 /// Represents a parameter.31 /// A parameter which represents an operator. 32 32 /// </summary> 33 33 [Item("OperatorParameter", "A parameter which represents an operator.")] 34 [EmptyStorableClass]35 34 [Creatable("Test")] 36 public class OperatorParameter : ItemParameter<IOperator>, IOperatorParameter { 35 public class OperatorParameter : Parameter, IOperatorParameter { 36 private IOperator value; 37 [Storable] 38 public IOperator Value { 39 get { return this.value; } 40 set { 41 if (value != this.value) { 42 if (this.value != null) this.value.Changed -= new ChangedEventHandler(Value_Changed); 43 this.value = value; 44 if (this.value != null) this.value.Changed += new ChangedEventHandler(Value_Changed); 45 OnValueChanged(); 46 } 47 } 48 } 49 37 50 public OperatorParameter() 38 : base("Anonymous", null ) {51 : base("Anonymous", null, typeof(IOperator)) { 39 52 } 40 53 public OperatorParameter(string name, string description) 41 : base(name, description ) {54 : base(name, description, typeof(IOperator)) { 42 55 } 43 56 public OperatorParameter(string name, string description, IOperator value) 44 : base(name, description, value) { 57 : base(name, description, typeof(IOperator)) { 58 Value = value; 59 } 60 61 public override IDeepCloneable Clone(Cloner cloner) { 62 OperatorParameter clone = (OperatorParameter)base.Clone(cloner); 63 clone.Value = (IOperator)cloner.Clone(value); 64 return clone; 65 } 66 67 public override string ToString() { 68 return string.Format("{0}: {1} ({2})", Name, Value != null ? Value.ToString() : "null", DataType.Name); 69 } 70 71 public event EventHandler ValueChanged; 72 private void OnValueChanged() { 73 if (ValueChanged != null) 74 ValueChanged(this, new EventArgs()); 75 OnChanged(); 76 } 77 private void Value_Changed(object sender, ChangedEventArgs e) { 78 OnChanged(e); 45 79 } 46 80 } -
trunk/sources/HeuristicLab.Parameters/3.3/Parameter.cs
r2714 r2740 29 29 namespace HeuristicLab.Parameters { 30 30 /// <summary> 31 /// Represents a parameter.31 /// A base class for parameters. 32 32 /// </summary> 33 33 [Item("Parameter", "A base class for parameters.")] … … 45 45 get { return dataType; } 46 46 } 47 [Storable] 48 private ExecutionContext executionContext; 49 public ExecutionContext ExecutionContext { 50 get { return executionContext; } 51 set { executionContext = value; } 52 } 47 53 48 54 protected Parameter() … … 56 62 } 57 63 58 public abstract IItem GetValue(ExecutionContext context);59 60 64 public override IDeepCloneable Clone(Cloner cloner) { 61 65 Parameter clone = (Parameter)base.Clone(cloner); 62 66 clone.dataType = dataType; 67 clone.executionContext = (ExecutionContext)cloner.Clone(executionContext); 63 68 return clone; 64 69 }
Note: See TracChangeset
for help on using the changeset viewer.