Files
fsh-oop/include/cmd/cmd_base.hpp
2025-08-29 00:02:45 +02:00

42 lines
1.3 KiB
C++

#pragma once
#include <array>
#include <string>
#include <sstream>
#include <unordered_map>
#include <memory>
#include "ast/ast.hpp"
#include "cmd/args/arg.hpp"
#include "util/error.hpp"
namespace fsh {
class Command {
public:
using FlagNode = std::optional<std::string>&;
using ArgNodes = std::vector<std::shared_ptr<CommandArgumentNode> >;
virtual void execute(FlagNode flag, ArgNodes& vec, std::istream& in, std::ostream& out, ArgFactory &arg_factory);
virtual 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:
// Register_flags se zove jednom pri registraciji komande i sluzi da u ArgFactory postavis
// pravila za argumente i opcije
virtual void register_flags() {};
// Korisnik u ovoj funkciju implementira glavnu funkcionalnost komande
virtual void run(std::istream& in, std::ostream& out, ArgManager& args) {};
ArgFactory& get_factory() { return arg_factory; }
private:
ArgFactory arg_factory;
};
}