From 10800da0909eb8ee2a412b905410dbd35d6189a9 Mon Sep 17 00:00:00 2001 From: Axel Huebl Date: Fri, 21 May 2021 17:29:08 -0700 Subject: [PATCH 1/2] ParamParse: Find Entries under Prefix Extend the "unused params" checks to find generally parameters under a given inputs prefix. --- Src/Base/AMReX_ParmParse.H | 3 +++ Src/Base/AMReX_ParmParse.cpp | 33 ++++++++++++++++++++++++--------- 2 files changed, 27 insertions(+), 9 deletions(-) diff --git a/Src/Base/AMReX_ParmParse.H b/Src/Base/AMReX_ParmParse.H index 5e3c801dc05..76229eded33 100644 --- a/Src/Base/AMReX_ParmParse.H +++ b/Src/Base/AMReX_ParmParse.H @@ -935,6 +935,9 @@ public: //! Returns unused [prefix.]* parameters. static std::vector getUnusedInputs (const std::string& prefix = std::string()); + //! Returns [prefix.]* parameters. + static std::vector getEntries (const std::string& prefix = std::string()); + struct PP_entry; typedef std::list Table; static void appendTable(ParmParse::Table& tab); diff --git a/Src/Base/AMReX_ParmParse.cpp b/Src/Base/AMReX_ParmParse.cpp index c286ae8c5ba..70823103b1a 100644 --- a/Src/Base/AMReX_ParmParse.cpp +++ b/Src/Base/AMReX_ParmParse.cpp @@ -1112,23 +1112,30 @@ ParmParse::hasUnusedInputs (const std::string& prefix) static void -get_unused_inputs(std::vector& unused, const ParmParse::Table& table, - const std::string& prefix) +get_entries_under_prefix (std::vector& found_entries, + const ParmParse::Table& table, + const std::string& prefix, + const bool only_unused = false, + const bool add_values = false) { const std::string prefixdot = prefix.empty() ? std::string() : prefix+"."; for (auto const& entry : table) { - if (! entry.m_queried) { + if ((! only_unused) || (only_unused && ! entry.m_queried)) { if (entry.m_name.substr(0,prefixdot.size()) == prefixdot) { - std::string tmp(entry.m_name + " ="); - for (auto const& v : entry.m_vals) { - tmp += " " + v; + std::string tmp(entry.m_name); + if (add_values) { + tmp.append(" ="); + for (auto const& v : entry.m_vals) { + tmp += " " + v; + } } - unused.emplace_back(std::move(tmp)); + found_entries.emplace_back(std::move(tmp)); } } if (entry.m_table) { - get_unused_inputs(unused, table, prefix); + get_entries_under_prefix(found_entries, table, prefix, + only_unused, add_values); } } } @@ -1137,7 +1144,15 @@ std::vector ParmParse::getUnusedInputs (const std::string& prefix) { std::vector r; - get_unused_inputs(r, g_table, prefix); + get_entries_under_prefix(r, g_table, prefix, true, true); + return r; +} + +std::vector +ParmParse::getEntries (const std::string& prefix) +{ + std::vector r; + get_entries_under_prefix(r, g_table, prefix, false, false); return r; } From 1b3ce6449db7456cee4d081ba6b6a2c6d7126051 Mon Sep 17 00:00:00 2001 From: Axel Huebl Date: Mon, 24 May 2021 10:43:10 -0700 Subject: [PATCH 2/2] getEntries: set --- Src/Base/AMReX_ParmParse.H | 3 ++- Src/Base/AMReX_ParmParse.cpp | 6 ++++-- 2 files changed, 6 insertions(+), 3 deletions(-) diff --git a/Src/Base/AMReX_ParmParse.H b/Src/Base/AMReX_ParmParse.H index 76229eded33..afd2f06d885 100644 --- a/Src/Base/AMReX_ParmParse.H +++ b/Src/Base/AMReX_ParmParse.H @@ -5,6 +5,7 @@ #include +#include #include #include #include @@ -936,7 +937,7 @@ public: static std::vector getUnusedInputs (const std::string& prefix = std::string()); //! Returns [prefix.]* parameters. - static std::vector getEntries (const std::string& prefix = std::string()); + static std::set getEntries (const std::string& prefix = std::string()); struct PP_entry; typedef std::list Table; diff --git a/Src/Base/AMReX_ParmParse.cpp b/Src/Base/AMReX_ParmParse.cpp index 70823103b1a..c14f29802b3 100644 --- a/Src/Base/AMReX_ParmParse.cpp +++ b/Src/Base/AMReX_ParmParse.cpp @@ -19,6 +19,8 @@ #include #include #include +#include +#include extern "C" void amrex_init_namelist (const char*); extern "C" void amrex_finalize_namelist (); @@ -1148,12 +1150,12 @@ ParmParse::getUnusedInputs (const std::string& prefix) return r; } -std::vector +std::set ParmParse::getEntries (const std::string& prefix) { std::vector r; get_entries_under_prefix(r, g_table, prefix, false, false); - return r; + return std::set(r.begin(), r.end()); } void