Free cookie consent management tool by TermsFeed Policy Generator

Ignore:
Timestamp:
06/25/13 10:43:27 (11 years ago)
Author:
mkommend
Message:

#2075: Added element names for the ValueType- and StringArray classes.

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/sources/HeuristicLab.Data/3.3/ValueTypeArray.cs

    r9456 r9657  
    4343    protected T[] array;
    4444
     45    [Storable]
     46    protected List<string> elementNames;
     47    public virtual IEnumerable<string> ElementNames {
     48      get { return this.elementNames; }
     49      set {
     50        if (ReadOnly) throw new NotSupportedException("ElementNames cannot be set. ValueTypeArray is read-only.");
     51        if (value == null || !value.Any())
     52          elementNames = new List<string>();
     53        else if (value.Count() != Length)
     54          throw new ArgumentException("An element name must be specified for each element.");
     55        else
     56          elementNames = new List<string>(value);
     57        OnElementNamesChanged();
     58      }
     59    }
     60
    4561    public virtual int Length {
    4662      get { return array.Length; }
     
    5167        if (value != Length) {
    5268          Array.Resize<T>(ref array, value);
     69          while (elementNames.Count > value)
     70            elementNames.RemoveAt(elementNames.Count - 1);
     71          while (elementNames.Count < value)
     72            elementNames.Add("Element " + elementNames.Count);
     73          OnElementNamesChanged();
    5374          OnReset();
    5475        }
     
    7394    }
    7495
     96    [StorableHook(HookType.AfterDeserialization)]
     97    private void AfterDeserialization() {
     98      if (elementNames == null) { elementNames = new List<string>(); }
     99    }
     100
    75101    [StorableConstructor]
    76102    protected ValueTypeArray(bool deserializing) : base(deserializing) { }
     
    79105      this.array = (T[])original.array.Clone();
    80106      this.readOnly = original.readOnly;
     107      this.elementNames = new List<string>(original.elementNames);
    81108    }
    82109    protected ValueTypeArray() {
    83110      array = new T[0];
    84111      readOnly = false;
     112      elementNames = new List<string>();
    85113    }
    86114    protected ValueTypeArray(int length) {
    87115      array = new T[length];
    88116      readOnly = false;
     117      elementNames = new List<string>();
    89118    }
    90119    protected ValueTypeArray(T[] elements) {
     
    92121      array = (T[])elements.Clone();
    93122      readOnly = false;
     123      elementNames = new List<string>();
    94124    }
    95125
     
    125155    }
    126156
     157    public event EventHandler ElementNamesChanged;
     158    protected virtual void OnElementNamesChanged() {
     159      EventHandler handler = ElementNamesChanged;
     160      if (handler != null)
     161        handler(this, EventArgs.Empty);
     162    }
     163
    127164    public event EventHandler<EventArgs<int>> ItemChanged;
    128165    protected virtual void OnItemChanged(int index) {
Note: See TracChangeset for help on using the changeset viewer.