diff --git a/Src/Base/AMReX_ParmParse.H b/Src/Base/AMReX_ParmParse.H index cc9588793d..d49b2cac5d 100644 --- a/Src/Base/AMReX_ParmParse.H +++ b/Src/Base/AMReX_ParmParse.H @@ -1192,14 +1192,18 @@ public: */ template , std::enable_if_t = 0> - int query (const char* name, T& ref) + int query (const char* name, T& ref, int ival = FIRST) const { std::string s; - int exist = this->query(name, s); + int exist = this->query(name, s, ival); if (exist) { try { ref = amrex::getEnum(s); } catch (...) { + if (amrex::Verbose() > 0 ) { + amrex::Print() << "amrex::ParmParse::query (input name: " + << this->prefixedName(name) << "):\n"; + } throw; } } @@ -1216,13 +1220,17 @@ public: */ template , std::enable_if_t = 0> - void get (const char* name, T& ref) + void get (const char* name, T& ref, int ival = FIRST) const { std::string s; - this->get(name, s); + this->get(name, s, ival); try { ref = amrex::getEnum(s); } catch (...) { + if (amrex::Verbose() > 0 ) { + amrex::Print() << "amrex::ParmParse::get (input name: " + << this->prefixedName(name) << "):\n"; + } throw; } } @@ -1230,14 +1238,25 @@ public: //! Query an array of enum values using given name. template , std::enable_if_t = 0> - int queryarr (const char* name, std::vector& ref) + int queryarr (const char* name, + std::vector& ref, + int start_ix = FIRST, + int num_val = ALL) const { std::vector s; - int exist = this->queryarr(name, s); + int exist = this->queryarr(name, s, start_ix, num_val); if (exist) { ref.resize(s.size()); for (std::size_t i = 0; i < s.size(); ++i) { - ref[i] = amrex::getEnum(s[i]); + try { + ref[i] = amrex::getEnum(s[i]); + } catch (...) { + if (amrex::Verbose() > 0 ) { + amrex::Print() << "amrex::ParmParse::queryarr (input name: " + << this->prefixedName(name) << "):\n"; + } + throw; + } } } return exist; @@ -1246,13 +1265,24 @@ public: //! Get an array of enum values using given name. template , std::enable_if_t = 0> - void getarr (const char* name, std::vector& ref) + void getarr (const char* name, + std::vector& ref, + int start_ix = FIRST, + int num_val = ALL) const { std::vector s; - this->getarr(name, s); + this->getarr(name, s, start_ix, num_val); ref.resize(s.size()); for (std::size_t i = 0; i < s.size(); ++i) { - ref[i] = amrex::getEnum(s[i]); + try { + ref[i] = amrex::getEnum(s[i]); + } catch (...) { + if (amrex::Verbose() > 0 ) { + amrex::Print() << "amrex::ParmParse::getarr (input name: " + << this->prefixedName(name) << "):\n"; + } + throw; + } } } @@ -1268,10 +1298,10 @@ public: */ template , std::enable_if_t = 0> - int query_enum_case_insensitive (const char* name, T& ref) + int query_enum_case_insensitive (const char* name, T& ref, int ival = FIRST) const { std::string s; - int exist = this->query(name, s); + int exist = this->query(name, s, ival); if (exist) { s = amrex::toLower(s); auto const& enum_names = amrex::getEnumNameStrings(); @@ -1303,9 +1333,9 @@ public: */ template , std::enable_if_t = 0> - void get_enum_case_insensitive (const char* name, T& ref) + void get_enum_case_insensitive (const char* name, T& ref, int ival = FIRST) const { - int exist = this->query_enum_case_insensitive(name, ref); + int exist = this->query_enum_case_insensitive(name, ref, ival); if (!exist) { std::string msg("get_enum_case_insensitive(\""); msg.append(name).append("\",").append(amrex::getEnumClassName()) @@ -1387,10 +1417,10 @@ public: static std::string ParserPrefix; -protected: - [[nodiscard]] std::string prefixedName (const std::string_view& str) const; +protected: + std::string m_prefix; // Prefix used in keyword search std::string m_parser_prefix; // Prefix used by Parser Table* m_table; diff --git a/Src/Base/AMReX_ParmParse.cpp b/Src/Base/AMReX_ParmParse.cpp index df1e18e9b0..572d9013da 100644 --- a/Src/Base/AMReX_ParmParse.cpp +++ b/Src/Base/AMReX_ParmParse.cpp @@ -1283,7 +1283,7 @@ ParmParse::query (const char* name, } void -ParmParse::add (const char* name, +ParmParse::add (const char* name, // NOLINT(readability-make-member-function-const) const bool val) { saddval(prefixedName(name),val); @@ -1315,7 +1315,7 @@ ParmParse::query (const char* name, int& ref, int ival) const } void -ParmParse::add (const char* name, const int val) +ParmParse::add (const char* name, const int val) // NOLINT(readability-make-member-function-const) { saddval(prefixedName(name),val); } @@ -1349,7 +1349,7 @@ ParmParse::queryarr (const char* name, std::vector& ref, int start_ix, } void -ParmParse::addarr (const char* name, const std::vector& ref) +ParmParse::addarr (const char* name, const std::vector& ref) // NOLINT(readability-make-member-function-const) { saddarr(prefixedName(name),ref); } @@ -1381,7 +1381,7 @@ ParmParse::query (const char* name, long& ref, int ival) const } void -ParmParse::add (const char* name, +ParmParse::add (const char* name, // NOLINT(readability-make-member-function-const) const long val) { saddval(prefixedName(name),val); @@ -1416,7 +1416,7 @@ ParmParse::queryarr (const char* name, std::vector& ref, int start_ix, } void -ParmParse::addarr (const char* name, const std::vector& ref) +ParmParse::addarr (const char* name, const std::vector& ref) // NOLINT(readability-make-member-function-const) { saddarr(prefixedName(name),ref); } @@ -1447,7 +1447,7 @@ ParmParse::query (const char* name, long long& ref, int ival) const } void -ParmParse::add (const char* name, const long long val) +ParmParse::add (const char* name, const long long val) // NOLINT(readability-make-member-function-const) { saddval(prefixedName(name),val); } @@ -1481,7 +1481,7 @@ ParmParse::queryarr (const char* name, std::vector& ref, int start_ix } void -ParmParse::addarr (const char* name, const std::vector& ref) +ParmParse::addarr (const char* name, const std::vector& ref) // NOLINT(readability-make-member-function-const) { saddarr(prefixedName(name),ref); } @@ -1512,7 +1512,7 @@ ParmParse::query (const char* name, float& ref, int ival) const } void -ParmParse::add (const char* name, const float val) +ParmParse::add (const char* name, const float val) // NOLINT(readability-make-member-function-const) { saddval(prefixedName(name),val); } @@ -1546,7 +1546,7 @@ ParmParse::queryarr (const char* name, std::vector& ref, int start_ix, } void -ParmParse::addarr (const char* name, const std::vector& ref) +ParmParse::addarr (const char* name, const std::vector& ref) // NOLINT(readability-make-member-function-const) { saddarr(prefixedName(name),ref); } @@ -1579,7 +1579,7 @@ ParmParse::query (const char* name, double& ref, int ival) const } void -ParmParse::add (const char* name, const double val) +ParmParse::add (const char* name, const double val) // NOLINT(readability-make-member-function-const) { saddval(prefixedName(name),val); } @@ -1613,7 +1613,7 @@ ParmParse::queryarr (const char* name, std::vector& ref, int start_ix, } void -ParmParse::addarr (const char* name, const std::vector& ref) +ParmParse::addarr (const char* name, const std::vector& ref) // NOLINT(readability-make-member-function-const) { saddarr(prefixedName(name),ref); } @@ -1646,7 +1646,7 @@ ParmParse::query (const char* name, std::string& ref, int ival) const } void -ParmParse::add (const char* name, const std::string& val) +ParmParse::add (const char* name, const std::string& val) // NOLINT(readability-make-member-function-const) { saddval(prefixedName(name),val); } @@ -1680,7 +1680,7 @@ ParmParse::queryarr (const char* name, std::vector& ref, } void -ParmParse::addarr (const char* name, const std::vector& ref) +ParmParse::addarr (const char* name, const std::vector& ref) // NOLINT(readability-make-member-function-const) { saddarr(prefixedName(name),ref); } @@ -1713,7 +1713,7 @@ ParmParse::query (const char* name, IntVect& ref, int ival) const } void -ParmParse::add (const char* name, const IntVect& val) +ParmParse::add (const char* name, const IntVect& val) // NOLINT(readability-make-member-function-const) { saddval(prefixedName(name),val); } @@ -1747,7 +1747,7 @@ ParmParse::queryarr (const char* name, std::vector& ref, } void -ParmParse::addarr (const char* name, const std::vector& ref) +ParmParse::addarr (const char* name, const std::vector& ref) // NOLINT(readability-make-member-function-const) { saddarr(prefixedName(name),ref); } @@ -1778,7 +1778,7 @@ ParmParse::query (const char* name, Box& ref, int ival) const } void -ParmParse::add (const char* name, const Box& val) +ParmParse::add (const char* name, const Box& val) // NOLINT(readability-make-member-function-const) { saddval(prefixedName(name),val); } @@ -1812,7 +1812,7 @@ ParmParse::queryarr (const char* name, std::vector& ref, } void -ParmParse::addarr (const char* name, const std::vector& ref) +ParmParse::addarr (const char* name, const std::vector& ref) // NOLINT(readability-make-member-function-const) { saddarr(prefixedName(name),ref); }