53 lines
1.7 KiB
C++
53 lines
1.7 KiB
C++
#pragma once
|
|
|
|
#include <unordered_map>
|
|
|
|
#include "cmd/cmd_base.hpp"
|
|
#include "cmd/cmd_date.hpp"
|
|
#include "cmd/cmd_echo.hpp"
|
|
#include "cmd/cmd_misc.hpp"
|
|
#include "cmd/cmd_time.hpp"
|
|
#include "cmd/cmd_touch.hpp"
|
|
#include "cmd/cmd_truncate.hpp"
|
|
#include "cmd/cmd_tr.hpp"
|
|
#include "cmd/cmd_prompt.hpp"
|
|
#include "cmd/cmd_rm.hpp"
|
|
#include "cmd/cmd_wc.hpp"
|
|
|
|
namespace fsh {
|
|
|
|
// Ovaj singleton odrzava podatke o komanadama
|
|
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 " + n); }
|
|
return *(cmds[n]);
|
|
}
|
|
|
|
Command& operator[](const std::string n) { return get(n); }
|
|
|
|
private:
|
|
// Nove komande bi registrovali ovde:
|
|
CommandRegistry() {
|
|
cmds["tr"] = Command::register_cmd<CmdTr>();
|
|
cmds["rm"] = Command::register_cmd<CmdRM>();
|
|
cmds["wc"] = Command::register_cmd<CmdWc>();
|
|
cmds["date"] = Command::register_cmd<CmdDate>();
|
|
cmds["time"] = Command::register_cmd<CmdTime>();
|
|
cmds["echo"] = Command::register_cmd<CmdEcho>();
|
|
cmds["exit"] = Command::register_cmd<CmdExit>();
|
|
cmds["touch"] = Command::register_cmd<CmdTouch>();
|
|
cmds["debug"] = Command::register_cmd<CmdPrintTree>();
|
|
cmds["prompt"] = Command::register_cmd<CmdPrompt>();
|
|
cmds["truncate"] = Command::register_cmd<CmdTruncate>();
|
|
}
|
|
|
|
std::unordered_map<std::string, std::unique_ptr<Command> > cmds;
|
|
};
|
|
|
|
} |