#include "settings.h" static const char* defaultConfig = #include "generated/default.conf" ; enum class Flag { config, help, none }; enum class Option { level, type, source, destination, parallel, _optionsSize }; using Literals = std::array; constexpr std::array(Flag::none)> flags({{ {"-c", "--config"}, {"-h", "--help"} }}); constexpr std::array actions({ "convert", "help", "config" }); constexpr std::array(Option::_optionsSize)> options({ "level", "type", "source", "destination", "parallel" }); constexpr std::array types({ "mp3" }); bool is_space(char ch){ return std::isspace(static_cast(ch)); } Flag getFlag(const std::string_view arg) { for (int i = 0; i < flags.size(); ++i) { const Literals& lit = flags[i]; unsigned char dist = std::distance(lit.begin(), std::find(lit.begin(), lit.end(), arg)); if (dist < lit.size()) return static_cast(i); } return Flag::none; } Option stringToOption(const std::string& source) { unsigned char dist = std::distance(options.begin(), std::find(options.begin(), options.end(), source)); if (dist < static_cast(Option::_optionsSize)) return static_cast