1// Undo Library
2// Copyright (C) 2015-2017 David Capello
3//
4// This file is released under the terms of the MIT license.
5// Read LICENSE.txt for more information.
6
7#ifndef UNDO_STATE_H_INCLUDED
8#define UNDO_STATE_H_INCLUDED
9#pragma once
10
11#include "undo_command.h"
12
13namespace undo {
14
15 class UndoCommand;
16 class UndoHistory;
17
18 // Represents a state that can be undone. If we are in this state,
19 // is because the command was already executed.
20 class UndoState {
21 friend class UndoHistory;
22 public:
23 UndoState(UndoCommand* cmd)
24 : m_prev(nullptr)
25 , m_next(nullptr)
26 , m_parent(nullptr)
27 , m_cmd(cmd) {
28 }
29
30 ~UndoState() {
31 if (m_cmd)
32 m_cmd->dispose();
33
34#ifdef _DEBUG
35 m_prev = nullptr;
36 m_next = nullptr;
37 m_parent = nullptr;
38 m_cmd = nullptr;
39#endif
40 }
41
42 UndoState* prev() const { return m_prev; }
43 UndoState* next() const { return m_next; }
44 UndoCommand* cmd() const { return m_cmd; }
45 private:
46 UndoState* m_prev;
47 UndoState* m_next;
48 UndoState* m_parent; // Parent state, after we undo
49 UndoCommand* m_cmd;
50 };
51
52} // namespace undo
53
54#endif // STATE_H_INCLUDED
55