#pragma once #include #include "cmd/cmd_base.hpp" #include "cmd/cmd_wc.hpp" #include "cmd/cmd_time.hpp" #include "cmd/cmd_date.hpp" #include "cmd/cmd_echo.hpp" #include "cmd/cmd_touch.hpp" #include "cmd/cmd_misc.hpp" namespace fsh { class CommandRegistry { public: static CommandRegistry& instance() { static CommandRegistry cmd_registry; return cmd_registry; } Command& get(const std::string n) { if(cmds.find(n) == cmds.end()) { throw std::runtime_error("Command not found"); } return *(cmds[n]); } Command& operator[](const std::string n) { return get(n); } private: CommandRegistry() { cmds["wc" ] = Command::register_cmd(); cmds["date" ] = Command::register_cmd(); cmds["time" ] = Command::register_cmd(); cmds["echo" ] = Command::register_cmd(); cmds["exit" ] = Command::register_cmd(); cmds["touch"] = Command::register_cmd(); cmds["debug"] = Command::register_cmd(); } std::unordered_map > cmds; }; }