#pragma once class Action { public: bool was_saved = false; virtual void run() = 0; virtual void undo() = 0; virtual Action* get_redo() = 0; virtual size_t memory() = 0; virtual ~Action(){}; }; class ActionManager { public: static ActionManager I; std::stack> m_actions; std::stack> m_redos; size_t m_memory = 0; static void add(Action* action); static void undo(); static void redo(); static void clear(); static bool empty() { return I.m_actions.empty(); } };