/// <summary> /// Restores the subject to the previous state on the undo stack, and stores the state before undoing to redo stack. /// Method <see cref="CanUndo()"/> can be called before calling this method. /// </summary> /// <seealso cref="Redo()"/> public void Undo() { if (tempMemento != null) { throw new InvalidOperationException("The complex memento wasn't commited."); } inUndoRedo = true; IMemento <T> top = undoStack.Pop(); redoStack.Push(top.Restore(ref subject)); inUndoRedo = false; }
/// <summary> /// Internal <b>DO</b> action with no error checking /// </summary> /// <param name="m"></param> private void _Do(IMemento <T> m) { redoStack.Clear(); undoStack.Push(m); }