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 <functional>
#include <iostream>
#include <limits>
#include <string>
@ -268,7 +269,9 @@ public:
* the next regular parameter. If this is less than 1, it indicated that the
* 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,
int,
const char** argv,

View File

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

View File

@ -52,7 +52,8 @@ class EclipseState;
class Schedule;
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::string& errorMsg,
const char** argv,

View File

@ -45,7 +45,7 @@
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::string& errorMsg,
const char** argv,
@ -73,7 +73,7 @@ int eclPositionalParameter(Dune::ParameterTree& tree,
return 0;
}
tree["EclDeckFileName"] = argv[paramIdx];
addKey("EclDeckFileName", argv[paramIdx]);
seenParams.insert("EclDeckFileName");
return 1;
}

View File

@ -228,14 +228,16 @@ public:
/*!
* \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,
int,
const char** argv,
int paramIdx,
int)
{
return eclPositionalParameter(Parameters::MetaData::tree(),
return eclPositionalParameter(addKey,
seenParams,
errorMsg,
argv,