#include"Managers/ActionManager.h" #include #include #include #include using std::cout; using std::endl; using std::string; using std::string_view; using std::vector; using Models::Flags; using Models::IcarusAction; namespace Managers { #pragma region Constructors ActionManager::ActionManager(char **param, int paramCount) : params(std::move(param)), paramCount(paramCount) { initialize(); } #pragma endregion #pragma region Functions IcarusAction ActionManager::retrieveIcarusAction() const { IcarusAction icarusAction; icarusAction.flags = flags; icarusAction.action = action; return icarusAction; } constexpr std::array ActionManager::supportedFlags() noexcept { constexpr std::array allFlags{"-u", "-p", "-t", "-h", "-s", "-sd", "-sr", "-d", "-D", "-b", "-rt", "-nc"}; return allFlags; } bool ActionManager::isNumber(string_view val) noexcept { return !val.empty() && std::find_if(val.begin(), val.end(), [](char c) { return !std::isdigit(c); }) == val.end(); } void ActionManager::initialize() { validateFlags(); action = std::move(string{params[1]}); transform(action.begin(), action.end(), action.begin(), ::tolower); } void ActionManager::validateFlags() { cout<<"Validating flags"< 3 || isNumber(flag)) { flg.value = flag; flags.push_back(flg); flg = Flags{}; continue; } if (std::any_of(allSupportedFlags.begin(), allSupportedFlags.end(), [&](const char *val) { return !flag.compare(val); })) { flg.flag = flag; } else { cout<<"Flag is not valid"< ActionManager::parsedFlags() { auto parsed = vector(); for (auto i = 2; i < paramCount; ++i) { const std::string flag(std::move(*(params + i))); parsed.push_back(std::move(flag)); } return parsed; } #pragma region Testing void ActionManager::printAction() noexcept { if (action.empty()) { printf("Action is empty\n"); } else { cout<<"Action is "<