Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #pragma once
- #include <cinttypes>
- #include <string>
- #include <vector>
- #include <string_view>
- #include <array>
- namespace translate::token{
- enum class Command:uint16_t{
- UNDEF,
- OUT_PATH,
- IN_PATH,
- DATE_FROM,
- DATE_TO,
- POSITION,
- LAT_TOP,
- LON_LEFT,
- LAT_BOT,
- LON_RIG,
- THREADS,
- EXTRACT_FORMAT,
- EXTRACTION_TIME_INTERVAL,
- CAPITALIZE_HIERARCHY,
- CAPITALIZE_FORMAT,
- CENTER,
- PARAMETERS,
- TABLE_VERSION,
- COLLECTION,
- TIME_FCST,
- GRID_TYPE
- };
- enum class ModeArgs:uint8_t{
- NONE,
- EXTRACT,
- CAPITALIZE,
- INTEGRITY,
- CONFIG,
- HELP,
- SAVE,
- EXIT,
- CONTAINS
- };
- enum class ConfigAction:uint8_t{
- UNDEF, //undefined action (error)
- ADD, //check and add configuration by name
- REDEFINE, //redefine configuration by name if exists or create
- REMOVE, //remove configuration by name
- SET, //set permanent configuration
- ADDSET,
- GET //get config action by name or all (if '.' is inputed)
- };
- enum class FileFormat:uint8_t{
- UNDEF,
- TXT,
- BIN,
- GRIB,
- ARCHIVED
- };
- }
- template<typename T>
- struct __Token_text__;
- template<>
- struct __Token_text__<translate::token::Command>{
- static constexpr std::array<const char*,21> txt = {
- "",
- "-outp",
- "-inp",
- "-dfrom",
- "-dto",
- "-pos",
- "-lattop",
- "-latbot",
- "-lonleft",
- "-lonrig",
- "-j",
- "-extoutfmt",
- "-extti",
- "-caporder",
- "-capfmt",
- "-center",
- "-params",
- "-tablev",
- "-collect",
- "-time_fcst",
- "-grid"
- };
- };
- template<>
- struct __Token_text__<translate::token::ModeArgs>{
- static constexpr std::array<const char*,9> txt = {
- "",
- "-ext",
- "-cap",
- "-integrity",
- "-config",
- "-help",
- "-save",
- "exit()",
- "-contains"
- };
- };
- template<>
- struct __Token_text__<translate::token::ConfigAction>{
- static constexpr std::array<const char*,7> txt = {
- "",
- "add",
- "redef",
- "remove",
- "set",
- "addset",
- "get"
- };
- };
- template<>
- struct __Token_text__<translate::token::FileFormat>{
- static constexpr std::array<const char*,5> txt = {
- "",
- "txt",
- "bin",
- "grib",
- "zip"
- };
- };
- template<typename T>
- inline T translate_from_txt(std::string_view cmd) noexcept{
- for(int i=0;i<__Token_text__<T>::txt.size();++i){
- if(cmd==__Token_text__<T>::txt[i])
- return (T)i;
- }
- return (T)0U;
- }
- template<typename T>
- inline std::string_view translate_from_token(T token) noexcept{
- return __Token_text__<T>::txt.at((uint)token);
- }
- //пример использования
- ...
- switch(translate_from_txt<translate::token::ModeArgs>(argv.at(0))){
- case translate::token::ModeArgs::CAPITALIZE:
- if(arguments.empty()){
- ErrorPrint::print_error(ErrorCode::TO_FEW_ARGUMENTS,"",AT_ERROR_ACTION::CONTINUE);
- return ErrorCode::TO_FEW_ARGUMENTS;
- }
- return capitalize_parse(arguments);
- break;
- case translate::token::ModeArgs::EXTRACT:
- if(arguments.empty()){
- ErrorPrint::print_error(ErrorCode::TO_FEW_ARGUMENTS,"",AT_ERROR_ACTION::CONTINUE);
- return ErrorCode::TO_FEW_ARGUMENTS;
- }
- return extract_parse(arguments);
- break;
- case translate::token::ModeArgs::INTEGRITY:
- if(arguments.empty()){
- ErrorPrint::print_error(ErrorCode::TO_FEW_ARGUMENTS,"",AT_ERROR_ACTION::CONTINUE);
- return ErrorCode::TO_FEW_ARGUMENTS;
- }
- return integrity_parse(arguments);
- break;
- case translate::token::ModeArgs::CONTAINS:
- if(arguments.empty()){
- ErrorPrint::print_error(ErrorCode::TO_FEW_ARGUMENTS,"",AT_ERROR_ACTION::CONTINUE);
- return ErrorCode::TO_FEW_ARGUMENTS;
- }
- //TODO
- break;
- case translate::token::ModeArgs::CONFIG:
- if(arguments.empty()){
- ErrorPrint::print_error(ErrorCode::TO_FEW_ARGUMENTS,"",AT_ERROR_ACTION::CONTINUE);
- return ErrorCode::TO_FEW_ARGUMENTS;
- }
- return config_parse(arguments);
- break;
- case translate::token::ModeArgs::HELP:
- if(arguments.size()>1){
- ErrorPrint::print_error(ErrorCode::TO_MANY_ARGUMENTS,"",AT_ERROR_ACTION::CONTINUE);
- return ErrorCode::TO_MANY_ARGUMENTS;
- }
- else if(arguments.size()==1){
- //help(*mode*)
- }
- else
- help();
- break;
- case translate::token::ModeArgs::SAVE:
- if(!arguments.empty()){
- ErrorPrint::print_error(ErrorCode::TO_MANY_ARGUMENTS,"",AT_ERROR_ACTION::CONTINUE);
- return ErrorCode::TO_MANY_ARGUMENTS;
- }
- if(!hProgram || !hProgram->save()){
- ErrorPrint::print_error(ErrorCode::IGNORING_VALUE_X1,"Nothing to save",AT_ERROR_ACTION::CONTINUE,argv.at(0));
- return ErrorCode::IGNORING_VALUE_X1;
- }
- break;
- case translate::token::ModeArgs::EXIT:
- if(argv.size()>1){
- ErrorPrint::print_error(ErrorCode::TO_MANY_ARGUMENTS,"",AT_ERROR_ACTION::CONTINUE,argv.at(1));
- return ErrorCode::TO_MANY_ARGUMENTS;
- }
- exit(0);
- break;
- default:{
- if(Application::config().has_config_name(argv.at(0))){
- if(argv.size()>1){
- ErrorPrint::print_error(ErrorCode::TO_MANY_ARGUMENTS,"",AT_ERROR_ACTION::CONTINUE,argv.at(1));
- return ErrorCode::TO_MANY_ARGUMENTS;
- }
- return read_command(Application::config().get_user_config(argv.at(0))|std::ranges::views::transform([](auto& str){
- return std::string_view(str);
- })|std::ranges::to<std::vector<std::string_view>>());
- }
- else{
- ErrorPrint::print_error(ErrorCode::COMMAND_INPUT_X1_ERROR,"Undefined mode argument",AT_ERROR_ACTION::CONTINUE,argv.at(0));
- return ErrorCode::COMMAND_INPUT_X1_ERROR;
- }
- }
- ...
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement