From d15b5d470c01c8b3f4709e2e0c66901a5825f217 Mon Sep 17 00:00:00 2001 From: Bruce Perry Date: Thu, 29 Aug 2024 17:09:27 -0600 Subject: [PATCH 1/7] add optional arguments to enum parmparse functions --- Src/Base/AMReX_ParmParse.H | 30 ++++++++++++++++++------------ 1 file changed, 18 insertions(+), 12 deletions(-) diff --git a/Src/Base/AMReX_ParmParse.H b/Src/Base/AMReX_ParmParse.H index cc9588793d..2cc1383aeb 100644 --- a/Src/Base/AMReX_ParmParse.H +++ b/Src/Base/AMReX_ParmParse.H @@ -1192,10 +1192,10 @@ public: */ template , std::enable_if_t = 0> - int query (const char* name, T& ref) + int query (const char* name, T& ref, int ival = FIRST) { std::string s; - int exist = this->query(name, s); + int exist = this->query(name, s, ival); if (exist) { try { ref = amrex::getEnum(s); @@ -1216,10 +1216,10 @@ public: */ template , std::enable_if_t = 0> - void get (const char* name, T& ref) + void get (const char* name, T& ref, int ival = FIRST) { std::string s; - this->get(name, s); + this->get(name, s, ival); try { ref = amrex::getEnum(s); } catch (...) { @@ -1230,10 +1230,13 @@ 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) { 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) { @@ -1246,10 +1249,13 @@ 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) { 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]); @@ -1268,10 +1274,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) { 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 +1309,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) { - 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()) From 16902916ab82d878f6ba15915012992bcef9d758 Mon Sep 17 00:00:00 2001 From: Bruce Perry Date: Thu, 29 Aug 2024 17:12:40 -0600 Subject: [PATCH 2/7] const enum related function templates in parmparse --- Src/Base/AMReX_ParmParse.H | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/Src/Base/AMReX_ParmParse.H b/Src/Base/AMReX_ParmParse.H index 2cc1383aeb..81914f4280 100644 --- a/Src/Base/AMReX_ParmParse.H +++ b/Src/Base/AMReX_ParmParse.H @@ -1192,7 +1192,7 @@ public: */ template , std::enable_if_t = 0> - int query (const char* name, T& ref, int ival = FIRST) + int query (const char* name, T& ref, int ival = FIRST) const { std::string s; int exist = this->query(name, s, ival); @@ -1216,7 +1216,7 @@ public: */ template , std::enable_if_t = 0> - void get (const char* name, T& ref, int ival = FIRST) + void get (const char* name, T& ref, int ival = FIRST) const { std::string s; this->get(name, s, ival); @@ -1233,7 +1233,7 @@ public: int queryarr (const char* name, std::vector& ref, int start_ix = FIRST, - int num_val = ALL) + int num_val = ALL) const { std::vector s; int exist = this->queryarr(name, s, start_ix, num_val); @@ -1252,7 +1252,7 @@ public: void getarr (const char* name, std::vector& ref, int start_ix = FIRST, - int num_val = ALL) + int num_val = ALL) const { std::vector s; this->getarr(name, s, start_ix, num_val); @@ -1274,7 +1274,7 @@ public: */ template , std::enable_if_t = 0> - int query_enum_case_insensitive (const char* name, T& ref, int ival = FIRST) + int query_enum_case_insensitive (const char* name, T& ref, int ival = FIRST) const { std::string s; int exist = this->query(name, s, ival); @@ -1309,7 +1309,7 @@ public: */ template , std::enable_if_t = 0> - void get_enum_case_insensitive (const char* name, T& ref, int ival = FIRST) + void get_enum_case_insensitive (const char* name, T& ref, int ival = FIRST) const { int exist = this->query_enum_case_insensitive(name, ref, ival); if (!exist) { From d2474fd880587d1209b6c1cca162f4859d36abaf Mon Sep 17 00:00:00 2001 From: Bruce Perry Date: Thu, 29 Aug 2024 17:17:08 -0600 Subject: [PATCH 3/7] unprotect prefixedName in parmparse --- Src/Base/AMReX_ParmParse.H | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/Src/Base/AMReX_ParmParse.H b/Src/Base/AMReX_ParmParse.H index 81914f4280..76eb1f2e59 100644 --- a/Src/Base/AMReX_ParmParse.H +++ b/Src/Base/AMReX_ParmParse.H @@ -1393,10 +1393,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; From de69923e8a819bdbf082dbd2f66bf0c80cfd7868 Mon Sep 17 00:00:00 2001 From: Bruce Perry Date: Fri, 30 Aug 2024 11:03:17 -0600 Subject: [PATCH 4/7] add some helpful information when enum queries fail --- Src/Base/AMReX_ParmParse.H | 20 ++++++++++++++++++-- 1 file changed, 18 insertions(+), 2 deletions(-) diff --git a/Src/Base/AMReX_ParmParse.H b/Src/Base/AMReX_ParmParse.H index 76eb1f2e59..768538ca6b 100644 --- a/Src/Base/AMReX_ParmParse.H +++ b/Src/Base/AMReX_ParmParse.H @@ -1200,6 +1200,8 @@ public: try { ref = amrex::getEnum(s); } catch (...) { + amrex::Print() << "amrex::ParmParse::query (input name: " + << this->prefixedName(name) << "):" << std::endl; throw; } } @@ -1223,6 +1225,8 @@ public: try { ref = amrex::getEnum(s); } catch (...) { + amrex::Print() << "amrex::ParmParse::get (input name: " + << this->prefixedName(name) << "):" << std::endl; throw; } } @@ -1240,7 +1244,13 @@ public: 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 (...) { + amrex::Print() << "amrex::ParmParse::queryarr (input name: " + << this->prefixedName(name) << "):" << std::endl; + throw; + } } } return exist; @@ -1258,7 +1268,13 @@ public: 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 (...) { + amrex::Print() << "amrex::ParmParse::getarr (input name: " + << this->prefixedName(name) << "):" << std::endl; + throw; + } } } From f780aa0d7615a8005c841985df6425493439c2b3 Mon Sep 17 00:00:00 2001 From: Bruce Perry Date: Fri, 30 Aug 2024 11:48:07 -0600 Subject: [PATCH 5/7] \n instead of endl --- Src/Base/AMReX_ParmParse.H | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/Src/Base/AMReX_ParmParse.H b/Src/Base/AMReX_ParmParse.H index 768538ca6b..ae14510214 100644 --- a/Src/Base/AMReX_ParmParse.H +++ b/Src/Base/AMReX_ParmParse.H @@ -1201,7 +1201,7 @@ public: ref = amrex::getEnum(s); } catch (...) { amrex::Print() << "amrex::ParmParse::query (input name: " - << this->prefixedName(name) << "):" << std::endl; + << this->prefixedName(name) << "):\n"; throw; } } @@ -1226,7 +1226,7 @@ public: ref = amrex::getEnum(s); } catch (...) { amrex::Print() << "amrex::ParmParse::get (input name: " - << this->prefixedName(name) << "):" << std::endl; + << this->prefixedName(name) << "):\n"; throw; } } @@ -1248,7 +1248,7 @@ public: ref[i] = amrex::getEnum(s[i]); } catch (...) { amrex::Print() << "amrex::ParmParse::queryarr (input name: " - << this->prefixedName(name) << "):" << std::endl; + << this->prefixedName(name) << "):\n"; throw; } } @@ -1272,7 +1272,7 @@ public: ref[i] = amrex::getEnum(s[i]); } catch (...) { amrex::Print() << "amrex::ParmParse::getarr (input name: " - << this->prefixedName(name) << "):" << std::endl; + << this->prefixedName(name) << "):\n"; throw; } } From 9e70570a8dc74646164b297980edd628c2bfcf92 Mon Sep 17 00:00:00 2001 From: Bruce Perry Date: Tue, 3 Sep 2024 11:16:29 -0600 Subject: [PATCH 6/7] NOLINT const for parmparse add in cpp --- Src/Base/AMReX_ParmParse.cpp | 34 +++++++++++++++++----------------- 1 file changed, 17 insertions(+), 17 deletions(-) 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); } From 21c950a3ee77fcad5d1580b08d22e1295488468c Mon Sep 17 00:00:00 2001 From: Bruce Perry Date: Wed, 4 Sep 2024 13:29:19 -0600 Subject: [PATCH 7/7] put parmparse enum error info in verbose checks --- Src/Base/AMReX_ParmParse.H | 24 ++++++++++++++++-------- 1 file changed, 16 insertions(+), 8 deletions(-) diff --git a/Src/Base/AMReX_ParmParse.H b/Src/Base/AMReX_ParmParse.H index ae14510214..d49b2cac5d 100644 --- a/Src/Base/AMReX_ParmParse.H +++ b/Src/Base/AMReX_ParmParse.H @@ -1200,8 +1200,10 @@ public: try { ref = amrex::getEnum(s); } catch (...) { - amrex::Print() << "amrex::ParmParse::query (input name: " - << this->prefixedName(name) << "):\n"; + if (amrex::Verbose() > 0 ) { + amrex::Print() << "amrex::ParmParse::query (input name: " + << this->prefixedName(name) << "):\n"; + } throw; } } @@ -1225,8 +1227,10 @@ public: try { ref = amrex::getEnum(s); } catch (...) { - amrex::Print() << "amrex::ParmParse::get (input name: " - << this->prefixedName(name) << "):\n"; + if (amrex::Verbose() > 0 ) { + amrex::Print() << "amrex::ParmParse::get (input name: " + << this->prefixedName(name) << "):\n"; + } throw; } } @@ -1247,8 +1251,10 @@ public: try { ref[i] = amrex::getEnum(s[i]); } catch (...) { - amrex::Print() << "amrex::ParmParse::queryarr (input name: " - << this->prefixedName(name) << "):\n"; + if (amrex::Verbose() > 0 ) { + amrex::Print() << "amrex::ParmParse::queryarr (input name: " + << this->prefixedName(name) << "):\n"; + } throw; } } @@ -1271,8 +1277,10 @@ public: try { ref[i] = amrex::getEnum(s[i]); } catch (...) { - amrex::Print() << "amrex::ParmParse::getarr (input name: " - << this->prefixedName(name) << "):\n"; + if (amrex::Verbose() > 0 ) { + amrex::Print() << "amrex::ParmParse::getarr (input name: " + << this->prefixedName(name) << "):\n"; + } throw; } }