Free cookie consent management tool by TermsFeed Policy Generator

Ignore:
Timestamp:
04/18/10 02:27:02 (14 years ago)
Author:
swagner
Message:

Refactored HeuristicLab.Collections (#977)

Location:
trunk/sources/HeuristicLab.Core/3.3/Collections
Files:
1 added
1 moved

Legend:

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

    r3381 r3390  
    3535  [StorableClass]
    3636  [Item("ItemSet<T>", "Represents a set of items.")]
    37   public class ItemSet<T> : ObservableSet<T>, IItem where T : class, IItem {
     37  public class ItemSet<T> : ObservableSet<T>, IItemSet<T> where T : class, IItem {
    3838    public virtual string ItemName {
    3939      get { return ItemAttribute.GetName(this.GetType()); }
     
    4646    }
    4747
    48     public ItemSet() : base() { }
    49     public ItemSet(IEnumerable<T> collection) : base(collection) { }
     48    [Storable]
     49    private HashSet<T> Items {
     50      get { return set; }
     51      set { set = value; }
     52    }
     53
     54    [Storable]
     55    private bool readOnlyView;
     56    public virtual bool ReadOnlyView {
     57      get { return readOnlyView; }
     58      set {
     59        if ((readOnlyView != value) && !((ICollection<T>)set).IsReadOnly) {
     60          readOnlyView = value;
     61          OnReadOnlyViewChanged();
     62          OnPropertyChanged("ReadOnlyView");
     63        }
     64      }
     65    }
     66
     67    public ItemSet()
     68      : base() {
     69      readOnlyView = ((ICollection<T>)set).IsReadOnly;
     70    }
     71    public ItemSet(IEnumerable<T> collection)
     72      : base(collection) {
     73      readOnlyView = ((ICollection<T>)set).IsReadOnly;
     74    }
     75    [StorableConstructor]
     76    protected ItemSet(bool deserializing) { }
    5077
    5178    public object Clone() {
    5279      return Clone(new Cloner());
    5380    }
    54 
    5581    public virtual IDeepCloneable Clone(Cloner cloner) {
    5682      ItemSet<T> clone = (ItemSet<T>)Activator.CreateInstance(this.GetType());
    5783      cloner.RegisterClonedObject(this, clone);
    58       clone.ReadOnlyView = ReadOnlyView;
     84      clone.readOnlyView = readOnlyView;
    5985      clone.set = new HashSet<T>(this.Select(x => (T)cloner.Clone(x)));
    6086      return clone;
     87    }
     88
     89    public new ReadOnlyItemSet<T> AsReadOnly() {
     90      return new ReadOnlyItemSet<T>(this);
    6191    }
    6292
     
    75105      if (handler != null) handler(this, EventArgs.Empty);
    76106    }
     107    public event EventHandler ReadOnlyViewChanged;
     108    protected virtual void OnReadOnlyViewChanged() {
     109      EventHandler handler = ReadOnlyViewChanged;
     110      if (handler != null) handler(this, EventArgs.Empty);
     111    }
    77112  }
    78113}
Note: See TracChangeset for help on using the changeset viewer.