Free cookie consent management tool by TermsFeed Policy Generator

Ignore:
Timestamp:
04/19/10 03:28:16 (14 years ago)
Author:
swagner
Message:

Restricted types of child operators in MultiOperator (#979)

File:
1 moved

Legend:

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

    r3401 r3407  
    3131namespace HeuristicLab.Operators {
    3232  /// <summary>
    33   /// A base class for operators which apply multiple user-defined operators.
     33  /// A base class for operators which apply arbitrary many other operators of a specific type.
    3434  /// </summary>
    35   [Item("MultipleCallsOperator", "A base class for operators which apply multiple user-defined operators.")]
     35  [Item("MultiOperator<T>", "A base class for operators which apply arbitrary many other operators of a specific type.")]
    3636  [StorableClass]
    37   public abstract class MultipleCallsOperator : SingleSuccessorOperator {
    38     private List<IValueParameter<IOperator>> operatorParameters;
     37  public abstract class MultiOperator<T> : SingleSuccessorOperator where T : class, IOperator {
     38    private List<IValueParameter<T>> operatorParameters;
    3939
    4040    [Storable]
    41     private OperatorList operators;
    42     public OperatorList Operators {
     41    private ItemList<T> operators;
     42    public ItemList<T> Operators {
    4343      get { return operators; }
    4444    }
    4545
    46     public MultipleCallsOperator()
     46    public MultiOperator()
    4747      : base() {
    48       operators = new OperatorList();
     48      operators = new ItemList<T>();
    4949      Initialize();
    5050    }
    5151    [StorableConstructor]
    52     protected MultipleCallsOperator(bool deserializing) : base(deserializing) { }
     52    protected MultiOperator(bool deserializing) : base(deserializing) { }
    5353
    5454    [StorableHook(HookType.AfterDeserialization)]
    5555    private void Initialize() {
    5656      if (operators != null) RegisterOperatorsEvents();
    57       operatorParameters = new List<IValueParameter<IOperator>>();
     57      operatorParameters = new List<IValueParameter<T>>();
    5858      for (int i = 0; i < Operators.Count; i++) {
    59         IValueParameter<IOperator> opParam = (IValueParameter<IOperator>)Parameters[i.ToString()];
     59        IValueParameter<T> opParam = (IValueParameter<T>)Parameters[i.ToString()];
    6060        operatorParameters.Add(opParam);
    6161        opParam.ValueChanged += new EventHandler(opParam_ValueChanged);
     
    6464
    6565    public override IDeepCloneable Clone(Cloner cloner) {
    66       MultipleCallsOperator clone = (MultipleCallsOperator)base.Clone(cloner);
    67       clone.operators = (OperatorList)cloner.Clone(operators);
     66      MultiOperator<T> clone = (MultiOperator<T>)base.Clone(cloner);
     67      clone.operators = (ItemList<T>)cloner.Clone(operators);
    6868      clone.Initialize();
    6969      return clone;
     
    7171
    7272    private void UpdateOperatorParameters() {
    73       foreach (IValueParameter<IOperator> opParam in operatorParameters) {
     73      foreach (IValueParameter<T> opParam in operatorParameters) {
    7474        opParam.ValueChanged -= new EventHandler(opParam_ValueChanged);
    7575        Parameters.Remove(opParam.Name);
     
    7777      operatorParameters.Clear();
    7878      for (int i = 0; i < Operators.Count; i++) {
    79         IValueParameter<IOperator> opParam = new ValueParameter<IOperator>(i.ToString(), string.Empty, Operators[i]);
     79        IValueParameter<T> opParam = new ValueParameter<T>(i.ToString(), string.Empty, Operators[i]);
    8080        opParam.ValueChanged += new EventHandler(opParam_ValueChanged);
    8181        Parameters.Add(opParam);
     
    8686    #region Events
    8787    private void RegisterOperatorsEvents() {
    88       operators.ItemsAdded += new CollectionItemsChangedEventHandler<IndexedItem<IOperator>>(operators_ItemsAdded);
    89       operators.ItemsRemoved += new CollectionItemsChangedEventHandler<IndexedItem<IOperator>>(operators_ItemsRemoved);
    90       operators.ItemsReplaced += new CollectionItemsChangedEventHandler<IndexedItem<IOperator>>(operators_ItemsReplaced);
    91       operators.ItemsMoved += new CollectionItemsChangedEventHandler<IndexedItem<IOperator>>(operators_ItemsMoved);
    92       operators.CollectionReset += new CollectionItemsChangedEventHandler<IndexedItem<IOperator>>(operators_CollectionReset);
     88      operators.ItemsAdded += new CollectionItemsChangedEventHandler<IndexedItem<T>>(operators_ItemsAdded);
     89      operators.ItemsRemoved += new CollectionItemsChangedEventHandler<IndexedItem<T>>(operators_ItemsRemoved);
     90      operators.ItemsReplaced += new CollectionItemsChangedEventHandler<IndexedItem<T>>(operators_ItemsReplaced);
     91      operators.ItemsMoved += new CollectionItemsChangedEventHandler<IndexedItem<T>>(operators_ItemsMoved);
     92      operators.CollectionReset += new CollectionItemsChangedEventHandler<IndexedItem<T>>(operators_CollectionReset);
    9393    }
    9494    private void DeregisterOperatorsEvents() {
    95       operators.ItemsAdded -= new CollectionItemsChangedEventHandler<IndexedItem<IOperator>>(operators_ItemsAdded);
    96       operators.ItemsRemoved -= new CollectionItemsChangedEventHandler<IndexedItem<IOperator>>(operators_ItemsRemoved);
    97       operators.ItemsReplaced -= new CollectionItemsChangedEventHandler<IndexedItem<IOperator>>(operators_ItemsReplaced);
    98       operators.ItemsMoved -= new CollectionItemsChangedEventHandler<IndexedItem<IOperator>>(operators_ItemsMoved);
    99       operators.CollectionReset -= new CollectionItemsChangedEventHandler<IndexedItem<IOperator>>(operators_CollectionReset);
     95      operators.ItemsAdded -= new CollectionItemsChangedEventHandler<IndexedItem<T>>(operators_ItemsAdded);
     96      operators.ItemsRemoved -= new CollectionItemsChangedEventHandler<IndexedItem<T>>(operators_ItemsRemoved);
     97      operators.ItemsReplaced -= new CollectionItemsChangedEventHandler<IndexedItem<T>>(operators_ItemsReplaced);
     98      operators.ItemsMoved -= new CollectionItemsChangedEventHandler<IndexedItem<T>>(operators_ItemsMoved);
     99      operators.CollectionReset -= new CollectionItemsChangedEventHandler<IndexedItem<T>>(operators_CollectionReset);
    100100    }
    101     private void operators_ItemsAdded(object sender, CollectionItemsChangedEventArgs<IndexedItem<IOperator>> e) {
     101    private void operators_ItemsAdded(object sender, CollectionItemsChangedEventArgs<IndexedItem<T>> e) {
    102102      UpdateOperatorParameters();
    103103    }
    104     private void operators_ItemsRemoved(object sender, CollectionItemsChangedEventArgs<IndexedItem<IOperator>> e) {
     104    private void operators_ItemsRemoved(object sender, CollectionItemsChangedEventArgs<IndexedItem<T>> e) {
    105105      UpdateOperatorParameters();
    106106    }
    107     private void operators_ItemsReplaced(object sender, CollectionItemsChangedEventArgs<IndexedItem<IOperator>> e) {
    108       foreach (IndexedItem<IOperator> item in e.Items)
     107    private void operators_ItemsReplaced(object sender, CollectionItemsChangedEventArgs<IndexedItem<T>> e) {
     108      foreach (IndexedItem<T> item in e.Items)
    109109        operatorParameters[item.Index].Value = item.Value;
    110110    }
    111     private void operators_ItemsMoved(object sender, CollectionItemsChangedEventArgs<IndexedItem<IOperator>> e) {
    112       foreach (IndexedItem<IOperator> item in e.Items)
     111    private void operators_ItemsMoved(object sender, CollectionItemsChangedEventArgs<IndexedItem<T>> e) {
     112      foreach (IndexedItem<T> item in e.Items)
    113113        operatorParameters[item.Index].Value = item.Value;
    114114    }
    115     private void operators_CollectionReset(object sender, CollectionItemsChangedEventArgs<IndexedItem<IOperator>> e) {
     115    private void operators_CollectionReset(object sender, CollectionItemsChangedEventArgs<IndexedItem<T>> e) {
    116116      UpdateOperatorParameters();
    117117    }
    118118    private void opParam_ValueChanged(object sender, EventArgs e) {
    119       IValueParameter<IOperator> opParam = (IValueParameter<IOperator>)sender;
     119      IValueParameter<T> opParam = (IValueParameter<T>)sender;
    120120      operators[operatorParameters.IndexOf(opParam)] = opParam.Value;
    121121    }
Note: See TracChangeset for help on using the changeset viewer.