#ifndef ACTION__H #define ACTION__H #include <functional> #include <string> #include <vector> #include "Config.hpp" class Action { public : enum Type { Push, Pop, Write, MoveWord, MoveChar, AddLines, Check }; private : Type type; std::function<void(Config & config, Action & action)> apply; std::function<void(Config & config, Action & action)> undo; std::function<bool(Config & config, Action & action)> appliable; std::vector<std::string> data; public : Action(Type type, std::function<void(Config & config, Action & action)> apply, std::function<void(Config & config, Action & action)> undo, std::function<bool(Config & config, Action & action)> appliable); public : static Action addLinesIfNeeded(int nbLines); static Action moveWordIndex(int movement); static Action moveCharacterIndex(int movement); }; #endif