+#include <deque>
+#include <memory>
+
+template<class StateType>
+class HistoryHandler{
+public:
+ HistoryHandler(int maxElements);
+ ~HistoryHandler();
+ void CleanHistory();
+ StateType* Undo(StateType* State);
+ StateType* UndoKeepCurrent();
+ StateType* Redo(StateType* State);
+ StateType* RedoKeepCurrent();
+ void Save(StateType* State);
+ StateType* GetPrevious();
+ StateType* GetNext();
+ int UndoSize();
+ int RedoSize();
+
+private:
+ std::deque<StateType*> undoStack;
+ std::deque<StateType*> redoStack;
+ int maxElements;
+};