parametersystem: pass add callback for adding keys to positional parameter handler

this way the backing store for the parameters can be an implementation
detail of the parameter system
This commit is contained in:
Arne Morten Kvarving 2024-09-04 13:13:55 +02:00
parent be94b037bc
commit 2bdab9e518
5 changed files with 20 additions and 9 deletions

View File

@ -37,6 +37,7 @@
#include <dune/common/fvector.hh> #include <dune/common/fvector.hh>
#include <functional>
#include <iostream> #include <iostream>
#include <limits> #include <limits>
#include <string> #include <string>
@ -268,7 +269,9 @@ public:
* the next regular parameter. If this is less than 1, it indicated that the * the next regular parameter. If this is less than 1, it indicated that the
* positional parameter was invalid. * positional parameter was invalid.
*/ */
static int handlePositionalParameter(std::set<std::string>&, static int handlePositionalParameter(std::function<void(const std::string&,
const std::string&)>,
std::set<std::string>&,
std::string& errorMsg, std::string& errorMsg,
int, int,
const char** argv, const char** argv,

View File

@ -41,6 +41,7 @@
#include <charconv> #include <charconv>
#include <cstdlib> #include <cstdlib>
#include <functional>
#include <fstream> #include <fstream>
#include <iostream> #include <iostream>
#include <list> #include <list>
@ -449,7 +450,8 @@ inline void printUsage(const std::string& helpPreamble,
} }
/// \cond 0 /// \cond 0
inline int noPositionalParameters_(std::set<std::string>&, inline int noPositionalParameters_(std::function<void(const std::string&, const std::string&)>,
std::set<std::string>&,
std::string& errorMsg, std::string& errorMsg,
int, int,
const char** argv, const char** argv,
@ -613,8 +615,11 @@ std::string parseCommandLineOptions(int argc,
|| argv[i][1] != '-') || argv[i][1] != '-')
{ {
std::string errorMsg; std::string errorMsg;
int numHandled = posArgCallback(seenKeys, errorMsg, argc, argv, int numHandled = posArgCallback([](const std::string& k, const std::string& v)
i, numPositionalParams); {
MetaData::tree()[k] = v;
}, seenKeys, errorMsg,
argc, argv, i, numPositionalParams);
if (numHandled < 1) { if (numHandled < 1) {
std::ostringstream oss; std::ostringstream oss;

View File

@ -52,7 +52,8 @@ class EclipseState;
class Schedule; class Schedule;
template<typename Grid, typename GridView> class LookUpData; template<typename Grid, typename GridView> class LookUpData;
int eclPositionalParameter(Dune::ParameterTree& tree, int eclPositionalParameter(std::function<void(const std::string&,
const std::string&)> addKey,
std::set<std::string>& seenParams, std::set<std::string>& seenParams,
std::string& errorMsg, std::string& errorMsg,
const char** argv, const char** argv,

View File

@ -45,7 +45,7 @@
namespace Opm { namespace Opm {
int eclPositionalParameter(Dune::ParameterTree& tree, int eclPositionalParameter(std::function<void(const std::string&, const std::string&)> addKey,
std::set<std::string>& seenParams, std::set<std::string>& seenParams,
std::string& errorMsg, std::string& errorMsg,
const char** argv, const char** argv,
@ -73,7 +73,7 @@ int eclPositionalParameter(Dune::ParameterTree& tree,
return 0; return 0;
} }
tree["EclDeckFileName"] = argv[paramIdx]; addKey("EclDeckFileName", argv[paramIdx]);
seenParams.insert("EclDeckFileName"); seenParams.insert("EclDeckFileName");
return 1; return 1;
} }

View File

@ -228,14 +228,16 @@ public:
/*! /*!
* \copydoc FvBaseProblem::handlePositionalParameter * \copydoc FvBaseProblem::handlePositionalParameter
*/ */
static int handlePositionalParameter(std::set<std::string>& seenParams, static int handlePositionalParameter(std::function<void(const std::string&,
const std::string&)> addKey,
std::set<std::string>& seenParams,
std::string& errorMsg, std::string& errorMsg,
int, int,
const char** argv, const char** argv,
int paramIdx, int paramIdx,
int) int)
{ {
return eclPositionalParameter(Parameters::MetaData::tree(), return eclPositionalParameter(addKey,
seenParams, seenParams,
errorMsg, errorMsg,
argv, argv,