Free cookie consent management tool by TermsFeed Policy Generator

Ignore:
Timestamp:
02/19/10 02:15:10 (14 years ago)
Author:
swagner
Message:

Operator architecture refactoring (#95)

  • worked on operators and SGA
  • improved performance
File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/sources/HeuristicLab.Core/3.3/NamedItemCollection.cs

    r2790 r2830  
    2121
    2222using System;
     23using System.Linq;
    2324using System.Collections.Generic;
    2425using System.Drawing;
     
    4344    private object RestoreEvents {
    4445      get { return null; }
    45       set {
    46         foreach (T item in this) {
    47           item.NameChanging += new EventHandler<CancelEventArgs<string>>(Item_NameChanging);
    48           item.NameChanged += new EventHandler(Item_NameChanged);
    49           item.Changed += new ChangedEventHandler(Item_Changed);
    50         }
    51       }
     46      set { RegisterItemEvents(this); }
    5247    }
    5348
    5449    public NamedItemCollection() : base() { }
    5550    public NamedItemCollection(int capacity) : base(capacity) { }
    56     public NamedItemCollection(IEnumerable<T> collection) : base(collection) { }
     51    public NamedItemCollection(IEnumerable<T> collection) : base(collection) {
     52      RegisterItemEvents(this);
     53    }
    5754
    5855    public object Clone() {
    5956      return Clone(new Cloner());
    6057    }
    61     public IDeepCloneable Clone(Cloner cloner) {
    62       List<T> items = new List<T>();
    63       foreach (T item in this)
    64         items.Add((T)cloner.Clone(item));
    65       NamedItemCollection<T> clone = (NamedItemCollection<T>)Activator.CreateInstance(this.GetType(), items);
     58    public virtual IDeepCloneable Clone(Cloner cloner) {
     59      NamedItemCollection<T> clone = (NamedItemCollection<T>)Activator.CreateInstance(this.GetType(), this.Select(x => (T)cloner.Clone(x)));
    6660      cloner.RegisterClonedObject(this, clone);
    6761      return clone;
     
    8680
    8781    protected override void OnItemsAdded(IEnumerable<T> items) {
    88       foreach (T item in items) {
    89         item.NameChanging += new EventHandler<CancelEventArgs<string>>(Item_NameChanging);
    90         item.NameChanged += new EventHandler(Item_NameChanged);
    91         item.Changed += new ChangedEventHandler(Item_Changed);
    92       }
     82      RegisterItemEvents(items);
    9383      base.OnItemsAdded(items);
    9484    }
    9585    protected override void OnItemsRemoved(IEnumerable<T> items) {
    96       foreach (T item in items) {
    97         item.NameChanging -= new EventHandler<CancelEventArgs<string>>(Item_NameChanging);
    98         item.NameChanged -= new EventHandler(Item_NameChanged);
    99         item.Changed -= new ChangedEventHandler(Item_Changed);
    100       }
     86      DeregisterItemEvents(items);
    10187      base.OnItemsRemoved(items);
    10288    }
     
    10894    #endregion
    10995    protected override void OnCollectionReset(IEnumerable<T> items, IEnumerable<T> oldItems) {
    110       foreach (T oldItem in oldItems) {
    111         oldItem.NameChanging -= new EventHandler<CancelEventArgs<string>>(Item_NameChanging);
    112         oldItem.NameChanged -= new EventHandler(Item_NameChanged);
    113         oldItem.Changed -= new ChangedEventHandler(Item_Changed);
    114       }
     96      DeregisterItemEvents(oldItems);
     97      RegisterItemEvents(items);
     98      base.OnCollectionReset(items, oldItems);
     99    }
     100    protected override void OnPropertyChanged(string propertyName) {
     101      base.OnPropertyChanged(propertyName);
     102      OnChanged();
     103    }
     104
     105    private void RegisterItemEvents(IEnumerable<T> items) {
    115106      foreach (T item in items) {
    116107        item.NameChanging += new EventHandler<CancelEventArgs<string>>(Item_NameChanging);
     
    118109        item.Changed += new ChangedEventHandler(Item_Changed);
    119110      }
    120       base.OnCollectionReset(items, oldItems);
    121111    }
    122     protected override void OnPropertyChanged(string propertyName) {
    123       base.OnPropertyChanged(propertyName);
    124       OnChanged();
     112    private void DeregisterItemEvents(IEnumerable<T> items) {
     113      foreach (T item in items) {
     114        item.NameChanging -= new EventHandler<CancelEventArgs<string>>(Item_NameChanging);
     115        item.NameChanged -= new EventHandler(Item_NameChanged);
     116        item.Changed -= new ChangedEventHandler(Item_Changed);
     117      }
    125118    }
    126119
Note: See TracChangeset for help on using the changeset viewer.