Free cookie consent management tool by TermsFeed Policy Generator

Ignore:
Timestamp:
02/10/10 03:39:02 (14 years ago)
Author:
swagner
Message:

Operator architecture refactoring (#95)

  • worked on parameters and operators
File:
1 moved

Legend:

Unmodified
Added
Removed
  • trunk/sources/HeuristicLab.Operators/3.3/ValuesCollector.cs

    r2772 r2773  
    2424using System.Text;
    2525using System.Xml;
     26using HeuristicLab.Collections;
    2627using HeuristicLab.Core;
    2728using HeuristicLab.Parameters;
     
    3233  /// An operator which collects the actual values of parameters.
    3334  /// </summary>
    34   [Item("ValueCollector", "An operator which collects the actual values of parameters.")]
    35   [EmptyStorableClass]
     35  [Item("ValuesCollector", "An operator which collects the actual values of parameters.")]
    3636  [Creatable("Test")]
    37   public abstract class ValueCollector : SingleSuccessorOperator, IOperator {
    38     protected ValueParameter<ParameterCollection> CollectedValuesParameter {
    39       get { return (ValueParameter<ParameterCollection>)Parameters["CollectedValues"]; }
    40     }
     37  public abstract class ValuesCollector : SingleSuccessorOperator, IOperator {
     38    private ParameterCollection collectedValues;
     39    [Storable]
    4140    public ParameterCollection CollectedValues {
    42       get { return CollectedValuesParameter.Value; }
    43       set { CollectedValuesParameter.Value = value; }
     41      get { return collectedValues; }
     42      private set {
     43        collectedValues = value;
     44        collectedValues.ItemsAdded += new CollectionItemsChangedEventHandler<IParameter>(collectedValues_ItemsAdded);
     45        collectedValues.ItemsRemoved += new CollectionItemsChangedEventHandler<IParameter>(collectedValues_ItemsRemoved);
     46        collectedValues.CollectionReset += new CollectionItemsChangedEventHandler<IParameter>(collectedValues_CollectionReset);
     47      }
    4448    }
    4549
    46     public ValueCollector()
     50    public ValuesCollector()
    4751      : base() {
    48       Parameters.Add(new ValueParameter<ParameterCollection>("CollectedValues", "The parameters whose actual values are collected.", new ParameterCollection()));
     52      CollectedValues = new ParameterCollection();
    4953    }
    5054
    51     protected override void OnExecutionContextChanged() {
    52       foreach (IParameter param in CollectedValues)
    53         param.ExecutionContext = ExecutionContext;
     55    public override IDeepCloneable Clone(Cloner cloner) {
     56      ValuesCollector clone = (ValuesCollector)base.Clone(cloner);
     57      clone.CollectedValues = (ParameterCollection)cloner.Clone(collectedValues);
     58      return clone;
     59    }
     60
     61    private void collectedValues_ItemsAdded(object sender, CollectionItemsChangedEventArgs<IParameter> e) {
     62      Parameters.AddRange(e.Items);
     63    }
     64    private void collectedValues_ItemsRemoved(object sender, CollectionItemsChangedEventArgs<IParameter> e) {
     65      Parameters.RemoveRange(e.Items);
     66    }
     67    #region NOTE
     68    // NOTE: The ItemsReplaced event has not to be handled here as it is only fired when the name (i.e. key) of a parameter
     69    // changes. As the same parameter is also contained in the Parameters collection of the operator, the Parameters collection
     70    // will react on this name change on its own.
     71    #endregion
     72    private void collectedValues_CollectionReset(object sender, CollectionItemsChangedEventArgs<IParameter> e) {
     73      Parameters.RemoveRange(e.OldItems);
     74      Parameters.AddRange(e.Items);
    5475    }
    5576  }
Note: See TracChangeset for help on using the changeset viewer.