24#ifndef IO_CLI_READER_H_
25#define IO_CLI_READER_H_
36 std::vector<std::string> _tokens;
40 for (
int i=1; i < argc; ++i) {
41 _tokens.emplace_back(argv[i]);
47 return std::find(_tokens.begin(), _tokens.end(), name) != _tokens.end();
52 auto iter = std::find(_tokens.begin(), _tokens.end(), name);
53 if (iter != _tokens.end() && ++iter != _tokens.end()){
61 template <
typename TYPE>
67 if constexpr (std::is_integral_v<TYPE>) {
68 auto result = std::from_chars(str.data(),
69 str.data() + str.size(),
71 if (result.ec != std::errc()) {
75 }
else if constexpr (std::is_floating_point_v<TYPE>) {
77 std::size_t nProcessed{};
78 value =
static_cast<TYPE
>(std::stod(str, &nProcessed));
79 if (nProcessed != str.size()) {
87 static_assert([](){
return false; },
"Unsupported type");
97std::string CLIreader::getValueOrFallback<std::string>(
98 const std::string& name, std::string fallback)
const {
100 return operator[](name);
Very simple CLI argument parser.
CLIreader(int &argc, char **argv)
std::string operator[](const std::string &name) const
Returns value of token after name (i.e. by convention the value assigned to name)
TYPE getValueOrFallback(const std::string &name, TYPE fallback) const
Return value of name as TYPE or fallback if not provided.
bool contains(const std::string &name) const
Returns true iff name is specified.
Top level namespace for all of OpenLB.