Free cookie consent management tool by TermsFeed Policy Generator

Ignore:
Timestamp:
05/03/10 14:30:55 (14 years ago)
Author:
gkronber
Message:

Separated MultiOperator into two classes MultiOperator and CheckedMultiOperator. #992 (CheckedItemList and CheckedItemCollection is necessary)

File:
1 copied

Legend:

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

    r3588 r3591  
    3131namespace HeuristicLab.Operators {
    3232  /// <summary>
    33   /// A base class for operators which apply arbitrary many other operators of a specific type.
     33  /// A base class for operators which apply arbitrary many other operators of a specific type, operators can be checked/unchecked.
    3434  /// </summary>
    35   [Item("MultiOperator<T>", "A base class for operators which apply arbitrary many other operators of a specific type.")]
     35  [Item("CheckedMultiOperator<T>", "A base class for operators which apply arbitrary many other operators of a specific type.")]
    3636  [StorableClass]
    37   public abstract class MultiOperator<T> : SingleSuccessorOperator where T : class, IOperator {
    38     private List<IValueParameter<T>> operatorParameters;
    39 
    40     [Storable]
    41     private CheckedItemList<T> operators;
    42     public CheckedItemList<T> Operators {
    43       get { return operators; }
     37  public abstract class CheckedMultiOperator<T> : MultiOperator<T> where T : class, IOperator {
     38    /// <summary>
     39    /// Gets the operators of the checked multi operator
     40    /// </summary>
     41    public new ICheckedItemList<T> Operators {
     42      get { return (ICheckedItemList<T>)base.Operators; }
     43      protected set { base.Operators = value; }
    4444    }
    45 
    46     public MultiOperator()
     45    /// <summary>
     46    /// Creates a new instance of CheckedMultiOperator
     47    /// </summary>
     48    public CheckedMultiOperator()
    4749      : base() {
    48       operators = new CheckedItemList<T>();
    49       Initialize();
     50      Operators = new CheckedItemList<T>();
    5051    }
    5152    [StorableConstructor]
    52     protected MultiOperator(bool deserializing) : base(deserializing) { }
    53 
    54     [StorableHook(HookType.AfterDeserialization)]
    55     private void Initialize() {
    56       if (operators != null) RegisterOperatorsEvents();
    57       operatorParameters = new List<IValueParameter<T>>();
    58       for (int i = 0; i < Operators.Count; i++) {
    59         IValueParameter<T> opParam = (IValueParameter<T>)Parameters[i.ToString()];
    60         operatorParameters.Add(opParam);
    61         opParam.ValueChanged += new EventHandler(opParam_ValueChanged);
    62       }
    63     }
    64 
    65     public override IDeepCloneable Clone(Cloner cloner) {
    66       MultiOperator<T> clone = (MultiOperator<T>)base.Clone(cloner);
    67       clone.operators = (CheckedItemList<T>)cloner.Clone(operators);
    68       clone.Initialize();
    69       return clone;
    70     }
    71 
    72     private void UpdateOperatorParameters() {
    73       foreach (IValueParameter<T> opParam in operatorParameters) {
    74         opParam.ValueChanged -= new EventHandler(opParam_ValueChanged);
    75         Parameters.Remove(opParam.Name);
    76       }
    77       operatorParameters.Clear();
    78       for (int i = 0; i < Operators.Count; i++) {
    79         IValueParameter<T> opParam = new ValueParameter<T>(i.ToString(), string.Empty, Operators[i]);
    80         opParam.ValueChanged += new EventHandler(opParam_ValueChanged);
    81         Parameters.Add(opParam);
    82         operatorParameters.Add(opParam);
    83       }
    84     }
    85 
    86     #region Events
    87     private void RegisterOperatorsEvents() {
    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);
    93     }
    94     private void DeregisterOperatorsEvents() {
    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);
    100     }
    101     protected virtual void Operators_ItemsAdded(object sender, CollectionItemsChangedEventArgs<IndexedItem<T>> e) {
    102       UpdateOperatorParameters();
    103     }
    104     protected virtual void Operators_ItemsRemoved(object sender, CollectionItemsChangedEventArgs<IndexedItem<T>> e) {
    105       UpdateOperatorParameters();
    106     }
    107     protected virtual void Operators_ItemsReplaced(object sender, CollectionItemsChangedEventArgs<IndexedItem<T>> e) {
    108       foreach (IndexedItem<T> item in e.Items)
    109         operatorParameters[item.Index].Value = item.Value;
    110     }
    111     protected virtual void Operators_ItemsMoved(object sender, CollectionItemsChangedEventArgs<IndexedItem<T>> e) {
    112       foreach (IndexedItem<T> item in e.Items)
    113         operatorParameters[item.Index].Value = item.Value;
    114     }
    115     protected virtual void Operators_CollectionReset(object sender, CollectionItemsChangedEventArgs<IndexedItem<T>> e) {
    116       UpdateOperatorParameters();
    117     }
    118     private void opParam_ValueChanged(object sender, EventArgs e) {
    119       IValueParameter<T> opParam = (IValueParameter<T>)sender;
    120       operators[operatorParameters.IndexOf(opParam)] = opParam.Value;
    121     }
    122     #endregion
     53    protected CheckedMultiOperator(bool deserializing) : base(deserializing) { }
    12354  }
    12455}
Note: See TracChangeset for help on using the changeset viewer.