Files
fsh-oop/include/cmd/cmd_base.hpp
2024-12-06 15:51:22 +01:00

41 lines
849 B
C++

#pragma once
#include <array>
#include <string>
#include <sstream>
#include <unordered_map>
#include <memory>
#include "ast/ast.hpp"
#include "cmd/arg.hpp"
namespace fsh{
class Command {
using FlagNode = std::optional<std::string>&;
using ArgNodes = std::vector<std::shared_ptr<CommandArgumentNode > >;
public:
void execute(FlagNode flag, ArgNodes& vec, std::istream& in, std::ostream& out);
template <typename T>
static std::unique_ptr<Command> register_cmd() {
std::unique_ptr<Command> cmd = std::make_unique<T>();
cmd->register_flags();
return cmd;
}
protected:
virtual void register_flags() {};
virtual void run(std::istream& in, std::ostream& out, ArgManager& args) {};
ArgFactory& get_factory() {return arg_factory;}
private:
ArgFactory arg_factory;
};
}