Changeset 2687 for trunk/sources/HeuristicLab.Core/3.3/Scope.cs
- Timestamp:
- 01/27/10 03:55:16 (14 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/sources/HeuristicLab.Core/3.3/Scope.cs
r2664 r2687 33 33 [Item("Scope", "A scope which contains variables and sub-scopes.")] 34 34 [Creatable("Test")] 35 public class Scope : NamedItem{35 public sealed class Scope : NamedItem, IScope { 36 36 [Storable] 37 private Scope parent; 37 private IScope parent; 38 public IScope Parent { 39 get { return parent; } 40 set { 41 if (parent != null) parent.SubScopes.Remove(this); 42 parent = value; 43 if ((parent != null) && !parent.SubScopes.Contains(this)) parent.SubScopes.Add(this); 44 } 45 } 38 46 39 47 private VariableCollection variables; … … 79 87 } 80 88 81 public Variable Lookup(string name, bool recursive) {82 return Lookup(name, recursive, true);83 }84 public Variable Lookup(string name, bool recursive, bool throwOnError) {85 Variable variable;86 87 if (this.variables.TryGetValue(name, out variable)) {88 return variable;89 } else if (recursive) {90 Scope scope = this.parent;91 while (scope != null) {92 if (scope.variables.TryGetValue(name, out variable))93 return variable;94 scope = scope.parent;95 }96 }97 if (throwOnError)98 throw new ArgumentException("Variable " + name + " not found");99 else100 return null;101 }102 103 89 /// <inheritdoc/> 104 90 public void Clear() { … … 109 95 /// <inheritdoc/> 110 96 public override IDeepCloneable Clone(Cloner cloner) { 111 Scope clone = (Scope)base.Clone(cloner); 112 clone.parent = (Scope)cloner.Clone(parent); 97 Scope clone = new Scope(); 98 cloner.RegisterClonedObject(this, clone); 99 clone.name = name; 100 clone.description = description; 101 clone.parent = (IScope)cloner.Clone(parent); 113 102 clone.Variables = (VariableCollection)cloner.Clone(variables); 114 103 clone.SubScopes = (ScopeList)cloner.Clone(subScopes); … … 119 108 private void RegisterSubScopesEvents() { 120 109 if (subScopes != null) { 121 subScopes.ItemsAdded += new CollectionItemsChangedEventHandler<IndexedItem< Scope>>(SubScopes_ItemsAdded);122 subScopes.ItemsRemoved += new CollectionItemsChangedEventHandler<IndexedItem< Scope>>(SubScopes_ItemsRemoved);123 subScopes.ItemsReplaced += new CollectionItemsChangedEventHandler<IndexedItem< Scope>>(SubScopes_ItemsReplaced);124 subScopes.CollectionReset += new CollectionItemsChangedEventHandler<IndexedItem< Scope>>(SubScopes_CollectionReset);110 subScopes.ItemsAdded += new CollectionItemsChangedEventHandler<IndexedItem<IScope>>(SubScopes_ItemsAdded); 111 subScopes.ItemsRemoved += new CollectionItemsChangedEventHandler<IndexedItem<IScope>>(SubScopes_ItemsRemoved); 112 subScopes.ItemsReplaced += new CollectionItemsChangedEventHandler<IndexedItem<IScope>>(SubScopes_ItemsReplaced); 113 subScopes.CollectionReset += new CollectionItemsChangedEventHandler<IndexedItem<IScope>>(SubScopes_CollectionReset); 125 114 subScopes.Changed += new ChangedEventHandler(SubScopes_Changed); 126 115 } … … 128 117 private void DeregisterSubScopesEvents() { 129 118 if (subScopes != null) { 130 subScopes.ItemsAdded -= new CollectionItemsChangedEventHandler<IndexedItem< Scope>>(SubScopes_ItemsAdded);131 subScopes.ItemsRemoved -= new CollectionItemsChangedEventHandler<IndexedItem< Scope>>(SubScopes_ItemsRemoved);132 subScopes.ItemsReplaced -= new CollectionItemsChangedEventHandler<IndexedItem< Scope>>(SubScopes_ItemsReplaced);133 subScopes.CollectionReset -= new CollectionItemsChangedEventHandler<IndexedItem< Scope>>(SubScopes_CollectionReset);119 subScopes.ItemsAdded -= new CollectionItemsChangedEventHandler<IndexedItem<IScope>>(SubScopes_ItemsAdded); 120 subScopes.ItemsRemoved -= new CollectionItemsChangedEventHandler<IndexedItem<IScope>>(SubScopes_ItemsRemoved); 121 subScopes.ItemsReplaced -= new CollectionItemsChangedEventHandler<IndexedItem<IScope>>(SubScopes_ItemsReplaced); 122 subScopes.CollectionReset -= new CollectionItemsChangedEventHandler<IndexedItem<IScope>>(SubScopes_CollectionReset); 134 123 subScopes.Changed -= new ChangedEventHandler(SubScopes_Changed); 135 124 } 136 125 } 137 private void SubScopes_ItemsAdded(object sender, CollectionItemsChangedEventArgs<IndexedItem< Scope>> e) {138 foreach (IndexedItem< Scope> item in e.Items)139 item.Value. parent = this;126 private void SubScopes_ItemsAdded(object sender, CollectionItemsChangedEventArgs<IndexedItem<IScope>> e) { 127 foreach (IndexedItem<IScope> item in e.Items) 128 item.Value.Parent = this; 140 129 } 141 private void SubScopes_ItemsRemoved(object sender, CollectionItemsChangedEventArgs<IndexedItem< Scope>> e) {142 foreach (IndexedItem< Scope> item in e.Items)143 item.Value. parent = null;130 private void SubScopes_ItemsRemoved(object sender, CollectionItemsChangedEventArgs<IndexedItem<IScope>> e) { 131 foreach (IndexedItem<IScope> item in e.Items) 132 item.Value.Parent = null; 144 133 } 145 private void SubScopes_ItemsReplaced(object sender, CollectionItemsChangedEventArgs<IndexedItem< Scope>> e) {146 foreach (IndexedItem< Scope> oldItem in e.OldItems)147 oldItem.Value. parent = null;148 foreach (IndexedItem< Scope> item in e.Items)149 item.Value. parent = this;134 private void SubScopes_ItemsReplaced(object sender, CollectionItemsChangedEventArgs<IndexedItem<IScope>> e) { 135 foreach (IndexedItem<IScope> oldItem in e.OldItems) 136 oldItem.Value.Parent = null; 137 foreach (IndexedItem<IScope> item in e.Items) 138 item.Value.Parent = this; 150 139 } 151 private void SubScopes_CollectionReset(object sender, CollectionItemsChangedEventArgs<IndexedItem< Scope>> e) {152 foreach (IndexedItem< Scope> oldItem in e.OldItems)153 oldItem.Value. parent = null;154 foreach (IndexedItem< Scope> item in e.Items)155 item.Value. parent = this;140 private void SubScopes_CollectionReset(object sender, CollectionItemsChangedEventArgs<IndexedItem<IScope>> e) { 141 foreach (IndexedItem<IScope> oldItem in e.OldItems) 142 oldItem.Value.Parent = null; 143 foreach (IndexedItem<IScope> item in e.Items) 144 item.Value.Parent = this; 156 145 } 157 146 private void SubScopes_Changed(object sender, ChangedEventArgs e) {
Note: See TracChangeset
for help on using the changeset viewer.