58 template <
class InTup,
class OutTup>
80 template <
template <
class,
class>
class P,
class InTup,
class OutTup,
class Func>
82 requires { { P<InTup, OutTup>::instance() } -> std::same_as<std::shared_ptr<P<InTup, OutTup>>>; } &&
83 requires(
const std::string &name, Func &&user_fn,
const InTup &inputs, OutTup &outputs) { std::declval<P<InTup, OutTup> &>().register_impl(name, user_fn, inputs, outputs); } &&
132 const std::string eq_prefix =
header_ +
"=";
133 std::vector<std::string> tokens;
135 for (
int i = 1; i <
argc; ++i)
139 const std::string cur(
argv[i]);
143 const std::string value = cur.substr(eq_prefix.size());
148 if (i + 1 <
argc &&
argv[i + 1] !=
nullptr)
150 const std::string value(
argv[++i]);
155 throw std::invalid_argument(
header_ +
" requires a value");
160 for (
const auto &t : tokens)
164 for (
const auto &s :
args_)
165 cargv_.push_back(
const_cast<char *
>(s.c_str()));
166 cargv_.push_back(
nullptr);
168 return {
static_cast<int>(
args_.size()),
cargv_.data()};
171 [[nodiscard]]
int argc()
const {
return static_cast<int>(
args_.size()); }
173 [[nodiscard]]
const std::vector<std::string> &
args()
const {
return args_; }
181 static bool starts_with(
const std::string &s,
const std::string &prefix)
183 return s.size() >= prefix.size() && s.compare(0, prefix.size(), prefix) == 0;
189 std::vector<std::string> out;
190 std::istringstream iss(s);
192 while (iss >> std::quoted(tok))
197 static void append_tokens(std::vector<std::string> &dst,
const std::string &value)
200 dst.insert(dst.end(), toks.begin(), toks.end());
Argument parser for plugin command-line arguments.
Definition plugin.hpp:107
PluginArgParser(std::string header, bool strict_missing_value=false)
Definition plugin.hpp:109
const std::vector< std::string > & args() const
Definition plugin.hpp:173
std::vector< char * > cargv_
Definition plugin.hpp:179
std::string header_
Definition plugin.hpp:176
static std::vector< std::string > split_shell_like(const std::string &s)
Definition plugin.hpp:187
PluginArgParser & operator=(const PluginArgParser &)=delete
PluginArgParser(PluginArgParser &&)=default
~PluginArgParser()=default
bool strict_
Definition plugin.hpp:177
PluginArgParser & operator=(PluginArgParser &&)=default
int argc() const
Definition plugin.hpp:171
std::pair< int, char ** > parse(int argc, char **argv)
Definition plugin.hpp:118
static void append_tokens(std::vector< std::string > &dst, const std::string &value)
Definition plugin.hpp:197
std::vector< std::string > args_
Definition plugin.hpp:178
static bool starts_with(const std::string &s, const std::string &prefix)
Definition plugin.hpp:181
PluginArgParser(const PluginArgParser &)=delete
char ** argv()
Definition plugin.hpp:172
Base class for plugins in the ComPPare framework.
Definition plugin.hpp:60
virtual void run()
Definition plugin.hpp:64
virtual ~Plugin()=default
virtual void initialize(int &, char **)
Definition plugin.hpp:63
Concept for a valid plugin class.
Definition plugin.hpp:81
Definition google_benchmark.hpp:51