- Timestamp:
- 02/03/10 04:43:06 (14 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
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 }
Note: See TracChangeset
for help on using the changeset viewer.