5#ifndef MADNESS_COMMANDLINEPARSER_H
6#define MADNESS_COMMANDLINEPARSER_H
30 std::map<std::string, std::string>
keyval;
41 std::vector<std::string> allArgs_raw(argv, argv + argc);
42 allArgs_raw.erase(allArgs_raw.begin());
43 for (
auto &
a : allArgs_raw) {
47 std::replace_copy(
a.begin(),
a.end(),
a.begin(),
'=',
' ');
49 std::stringstream sa(
a);
51 val=
a.substr(key.size());
52 if (key==
"input")
set_keyval(
"user_defined_input_file",
"1");
53 if (key==
"prefix")
set_keyval(
"user_defined_prefix",
"1");
59 if (key==
"file" || key==
"input") {
75 for (
auto&[key, val] :
keyval) {
76 printf(
"%20s %20s \n", key.c_str(), val.c_str());
84 std::string
value(
const std::string key)
const {
85 std::string msg=
"key not found: " + key;
93 std::string
value_raw(
const std::string key)
const {
94 std::string msg =
"key not found: " + key;
122 if (line[0]==
'-')
return line;
123 auto words=
split(line,
"=");
124 if (words.size()==1) line=
"input="+line;
129 std::transform(s.begin(), s.end(), s.begin(), [](
unsigned char c){ return std::tolower(c); });
136 static std::vector<std::string>
split(std::string s,
const std::string delimiter) {
139 std::vector<std::string> result;
140 while ((pos = s.find(delimiter)) != std::string::npos) {
141 token = s.substr(0, pos);
142 result.push_back(token);
143 s.erase(0, pos + delimiter.length());
150 std::size_t first=
arg.find_first_not_of(
'-');
151 return arg.substr(first);
155 std::string result=
arg;
156 const std::string item=
"=";
157 const std::string blank=
" ";
158 auto it=std::find_first_of(result.begin(),result.end(),item.begin(),item.end());
159 std::replace(it,it+1,item.front(),blank.front());
165 std::string str2 =
arg;
166 str2.erase(std::remove_if(str2.begin(), str2.end(),
167 [](
unsigned char x){return std::isspace(x);}),str2.end());
173 if (
arg.size()==0)
return arg;
174 std::size_t first=
arg.find_first_not_of(
' ');
175 std::size_t last=
arg.find_last_not_of(
' ');
176 return arg.substr(first,last-first+1);
179 static std::string
base_name(std::string
const &
path, std::string
const & delims =
"/")
181 return path.substr(
path.find_last_of(delims) + 1);
186 std::size_t
p=
filename.find_last_of(
'.');
char * p(char *buf, const char *name, int k, int initial_level, double thresh, int order)
Definition derivatives.cc:72
Tensor< typename Tensor< T >::scalar_type > arg(const Tensor< T > &t)
Return a new tensor holding the argument of each element of t (complex types only)
Definition tensor.h:2643
#define MADNESS_CHECK_THROW(condition, msg)
Check a condition — even in a release build the condition is always evaluated so it can have side eff...
Definition madness_exception.h:207
Namespace for all elements and tools of MADNESS.
Definition DFParameters.h:10
static const char * filename
Definition legendre.cc:96
static const double a
Definition nonlinschro.cc:118
static const double c
Definition relops.cc:10
very simple command line parser
Definition commandlineparser.h:28
static std::string trim_blanks(const std::string arg)
remove blanks at the beginning and the end only
Definition commandlineparser.h:172
void set_keyval_keep_case(const std::string key, const std::string value)
Definition commandlineparser.h:112
std::string value(const std::string key) const
Definition commandlineparser.h:84
std::map< std::string, std::string > keyval_raw
Definition commandlineparser.h:31
void set_keyval(const std::string key, const std::string value)
Definition commandlineparser.h:106
bool key_exists(std::string key) const
Definition commandlineparser.h:80
std::map< std::string, std::string > keyval
Definition commandlineparser.h:30
std::string value_raw(const std::string key) const
Definition commandlineparser.h:93
static std::string base_name(std::string const &path, std::string const &delims="/")
Definition commandlineparser.h:179
static std::string tolower(std::string s)
make lower case
Definition commandlineparser.h:128
void set_defaults()
set default values from the command line
Definition commandlineparser.h:68
commandlineparser(int argc, char **argv)
Definition commandlineparser.h:39
static std::string remove_first_equal(const std::string arg)
Definition commandlineparser.h:154
static std::string remove_extension(std::string const &filename)
Definition commandlineparser.h:184
static std::string remove_blanks(const std::string arg)
remove all blanks
Definition commandlineparser.h:164
commandlineparser()
Definition commandlineparser.h:33
std::string check_for_input_file(std::string line)
special option: the input file has no hyphens in front and is just a value
Definition commandlineparser.h:121
void print_map() const
Definition commandlineparser.h:74
static std::string remove_front_hyphens(const std::string arg)
Definition commandlineparser.h:149
static std::vector< std::string > split(std::string s, const std::string delimiter)
split a string s into a vector of strings, using delimiter
Definition commandlineparser.h:136