Free cookie consent management tool by TermsFeed Policy Generator

Ignore:
Timestamp:
04/20/10 02:02:39 (14 years ago)
Author:
swagner
Message:

Added ReadOnly property to all items of HeuristicLab.Data (#969)

File:
1 edited

Legend:

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

    r3320 r3430  
    3333  [Item("ValueTypeMatrix<T>", "An abstract base class for representing matrices of value types.")]
    3434  [StorableClass]
    35   public abstract class ValueTypeMatrix<T> : Item, IEnumerable where T : struct {
     35  public abstract class ValueTypeMatrix<T> : Item, IEnumerable<T> where T : struct {
    3636    public override Image ItemImage {
    3737      get { return HeuristicLab.Common.Resources.VS2008ImageLibrary.Class; }
     
    4242
    4343    [Storable]
    44     private List<string> columnNames;
    45     public IEnumerable<string> ColumnNames {
     44    protected List<string> columnNames;
     45    public virtual IEnumerable<string> ColumnNames {
    4646      get { return this.columnNames; }
    4747      set {
     48        if (ReadOnly) throw new NotSupportedException("ColumnNames cannot be set. ValueTypeMatrix is read-only.");
    4849        if (value == null || value.Count() == 0)
    4950          columnNames = new List<string>();
     
    5556    }
    5657    [Storable]
    57     private List<string> rowNames;
    58     public IEnumerable<string> RowNames {
     58    protected List<string> rowNames;
     59    public virtual IEnumerable<string> RowNames {
    5960      get { return this.rowNames; }
    6061      set {
     62        if (ReadOnly) throw new NotSupportedException("RowNames cannot be set. ValueTypeMatrix is read-only.");
    6163        if (value == null || value.Count() == 0)
    6264          rowNames = new List<string>();
     
    6870    }
    6971    [Storable]
    70     private bool sortableView;
    71     public bool SortableView {
     72    protected bool sortableView;
     73    public virtual bool SortableView {
    7274      get { return sortableView; }
    7375      set {
     76        if (ReadOnly) throw new NotSupportedException("SortableView cannot be set. ValueTypeMatrix is read-only.");
    7477        if (value != sortableView) {
    7578          sortableView = value;
     
    8285      get { return matrix.GetLength(0); }
    8386      protected set {
     87        if (ReadOnly) throw new NotSupportedException("Rows cannot be set. ValueTypeMatrix is read-only.");
    8488        if (value != Rows) {
    8589          T[,] newArray = new T[value, Columns];
     
    97101      get { return matrix.GetLength(1); }
    98102      protected set {
     103        if (ReadOnly) throw new NotSupportedException("Columns cannot be set. ValueTypeMatrix is read-only.");
    99104        if (value != Columns) {
    100105          T[,] newArray = new T[Rows, value];
     
    113118      get { return matrix[rowIndex, columnIndex]; }
    114119      set {
     120        if (ReadOnly) throw new NotSupportedException("Item cannot be set. ValueTypeMatrix is read-only.");
    115121        if (!value.Equals(matrix[rowIndex, columnIndex])) {
    116122          matrix[rowIndex, columnIndex] = value;
     
    118124        }
    119125      }
     126    }
     127
     128    [Storable]
     129    protected bool readOnly;
     130    public virtual bool ReadOnly {
     131      get { return readOnly; }
    120132    }
    121133
     
    125137      rowNames = new List<string>();
    126138      sortableView = false;
     139      readOnly = false;
    127140    }
    128141    protected ValueTypeMatrix(int rows, int columns) {
     
    131144      rowNames = new List<string>();
    132145      sortableView = false;
     146      readOnly = false;
    133147    }
    134148    protected ValueTypeMatrix(int rows, int columns, IEnumerable<string> columnNames)
     
    136150      ColumnNames = columnNames;
    137151    }
    138     protected ValueTypeMatrix(int rows, int columns, IEnumerable<string> columnNames,IEnumerable<string> rowNames)
     152    protected ValueTypeMatrix(int rows, int columns, IEnumerable<string> columnNames, IEnumerable<string> rowNames)
    139153      : this(rows, columns, columnNames) {
    140154      RowNames = rowNames;
     
    146160      rowNames = new List<string>();
    147161      sortableView = false;
     162      readOnly = false;
    148163    }
    149164    protected ValueTypeMatrix(T[,] elements, IEnumerable<string> columnNames)
     
    158173    public override IDeepCloneable Clone(Cloner cloner) {
    159174      ValueTypeMatrix<T> clone = (ValueTypeMatrix<T>)base.Clone(cloner);
    160       clone.SortableView = SortableView;
    161175      clone.matrix = (T[,])matrix.Clone();
    162176      clone.columnNames = new List<string>(columnNames);
    163177      clone.rowNames = new List<string>(rowNames);
     178      clone.sortableView = sortableView;
     179      clone.readOnly = readOnly;
    164180      return clone;
     181    }
     182
     183    public virtual ValueTypeMatrix<T> AsReadOnly() {
     184      ValueTypeMatrix<T> readOnlyValueTypeMatrix = (ValueTypeMatrix<T>)this.Clone();
     185      readOnlyValueTypeMatrix.readOnly = true;
     186      return readOnlyValueTypeMatrix;
    165187    }
    166188
     
    180202    }
    181203
    182     public virtual IEnumerator GetEnumerator() {
    183       return matrix.GetEnumerator();
     204    public virtual IEnumerator<T> GetEnumerator() {
     205      return matrix.Cast<T>().GetEnumerator();
     206    }
     207
     208    IEnumerator IEnumerable.GetEnumerator() {
     209      return GetEnumerator();
    184210    }
    185211
Note: See TracChangeset for help on using the changeset viewer.