Free cookie consent management tool by TermsFeed Policy Generator

Ignore:
Timestamp:
05/07/14 11:04:44 (10 years ago)
Author:
tsteinre
Message:
  • refactored PowerTransformation
  • repaired Transformations / refactored TransactionalPreprocessingData
File:
1 edited

Legend:

Unmodified
Added
Removed
  • branches/DataPreprocessing/HeuristicLab.DataPreprocessing/3.3/Implementations/TransactionalPreprocessingData.cs

    r10740 r10805  
    5050    private IList<PDSnapshot> undoHistory;
    5151
    52     private int transactionDepth = 0;
     52    private Stack<DataPreprocessingChangedEventType> eventStack = new Stack<DataPreprocessingChangedEventType>();
     53
     54    private DataPreprocessingChangedEventType lastOccuredChangedType = DataPreprocessingChangedEventType.Any;
     55
     56    public bool IsInTransaction { get { return eventStack.Count > 0; } }
    5357
    5458    public TransactionalPreprocessingData(IDataAnalysisProblemData problemData)
     
    6367
    6468    private void SaveSnapshot(DataPreprocessingChangedEventType changedType, int column, int row) {
    65       if (transactionDepth > 0) return;
     69      if (eventStack.Count > 0) return;
    6670
    6771      PDSnapshot currentSnapshot = new PDSnapshot();
     
    9296      SaveSnapshot(DataPreprocessingChangedEventType.ChangeItem, columnIndex, rowIndex);
    9397      base.SetCell<T>(columnIndex, rowIndex, value);
    94       if (transactionDepth <= 0)
     98      if (!IsInTransaction)
    9599        OnChanged(DataPreprocessingChangedEventType.ChangeItem, columnIndex, rowIndex);
    96100    }
     
    99103      SaveSnapshot(DataPreprocessingChangedEventType.ChangeColumn, columnIndex, -1);
    100104      base.SetValues<T>(columnIndex, values);
    101       if (transactionDepth <= 0)
     105      if (!IsInTransaction)
    102106        OnChanged(DataPreprocessingChangedEventType.ChangeColumn, columnIndex, -1);
    103107    }
     
    106110      SaveSnapshot(DataPreprocessingChangedEventType.DeleteRow, -1, rowIndex);
    107111      base.InsertRow(rowIndex);
    108       if (transactionDepth <= 0)
     112      if (!IsInTransaction)
    109113        OnChanged(DataPreprocessingChangedEventType.AddRow, -1, rowIndex);
    110114    }
     
    113117      SaveSnapshot(DataPreprocessingChangedEventType.AddRow, -1, rowIndex);
    114118      base.DeleteRow(rowIndex);
    115       if (transactionDepth <= 0)
     119      if (!IsInTransaction)
    116120        OnChanged(DataPreprocessingChangedEventType.DeleteRow, -1, rowIndex);
    117121    }
     
    120124      SaveSnapshot(DataPreprocessingChangedEventType.DeleteColumn, columnIndex, -1);
    121125      base.InsertColumn<T>(variableName, columnIndex);
    122       if (transactionDepth <= 0)
     126      if (!IsInTransaction)
    123127        OnChanged(DataPreprocessingChangedEventType.AddColumn, columnIndex, -1);
    124128    }
     
    127131      SaveSnapshot(DataPreprocessingChangedEventType.AddColumn, columnIndex, -1);
    128132      base.DeleteColumn(columnIndex);
    129       if (transactionDepth <= 0)
     133      if (!IsInTransaction)
    130134        OnChanged(DataPreprocessingChangedEventType.DeleteColumn, columnIndex, -1);
    131135    }
     
    166170    public void BeginTransaction(DataPreprocessingChangedEventType type) {
    167171      SaveSnapshot(type, -1, -1);
    168       transactionDepth++;
     172      eventStack.Push(type);
    169173    }
    170174
    171175    public void EndTransaction() {
    172       transactionDepth--;
    173       if (transactionDepth < 0)
     176      if (eventStack.Count == 0)
    174177        throw new InvalidOperationException("There is no open transaction that can be ended.");
    175       if (transactionDepth == 0)
    176         OnChanged(DataPreprocessingChangedEventType.Any, -1, -1);
     178     
     179      var @event = eventStack.Pop();
     180      OnChanged(@event, -1, -1);
    177181    }
    178182
Note: See TracChangeset for help on using the changeset viewer.