8 #ifndef EMP_CL_ARG_MANAGER_H 9 #define EMP_CL_ARG_MANAGER_H 34 auto end() -> decltype(args.
end()) {
return args.
end(); }
36 const std::string &
operator[](
size_t i)
const {
return args[i]; }
42 int UseArg(
const std::string & name, T & var,
const std::string & desc=
"") {
50 int UseArg(
const std::string & name,
Config & config,
const std::string & cfg_name,
51 const std::string & desc=
"") {
56 if (rv==1) config.
Set(cfg_name, var);
62 bool UseFlag(
const std::string & name,
const std::string & desc=
"") {
69 size_t max_name_size = 0;
70 for (
const auto & name : arg_names) {
71 if (max_name_size < name.size()) max_name_size = name.size();
73 for (
size_t i = 0; i < arg_names.size(); i++) {
75 << std::string(max_name_size + 1 - arg_names[i].
size(),
' ')
84 if (args.
size() > 1) {
85 os <<
"Unknown args:";
86 for (
size_t i = 1; i < args.
size(); i++) os <<
" " << args[i];
97 const std::string & cfg_file=
"",
98 const std::string & macro_file=
"") {
99 for (
auto e : config) {
100 auto entry = e.second;
102 " (type=", entry->GetType(),
"; default=", entry->GetDefault(),
')' );
103 UseArg(
to_string(
'-', entry->GetName()), config, entry->GetName(), desc);
106 bool print_help =
UseFlag(
"--help",
"Print help information.");
107 bool create_config = cfg_file.size() &&
UseFlag(
"--gen",
"Generate configuration file.");
108 bool const_macros = macro_file.size() &&
UseFlag(
"--const",
"Generate const version of macros file.");
110 if (print_help) {
PrintHelp(os);
return false; }
111 if (create_config) { config.Write(cfg_file);
return false; }
112 if (const_macros) { config.WriteMacros(macro_file,
true);
return false; }
bool UseFlag(const std::string &name, const std::string &desc="")
Definition: ArgManager.h:62
std::string to_string(ALL_TYPES &&...all_values)
Definition: string_utils.h:511
bool ProcessConfigOptions(Config &config, std::ostream &os, const std::string &cfg_file="", const std::string ¯o_file="")
Definition: ArgManager.h:96
iterator end() noexcept
Definition: vector.h:155
Master configuration class that manages all of the settings.
Definition: config.h:113
int UseArg(const std::string &name, Config &config, const std::string &cfg_name, const std::string &desc="")
Definition: ArgManager.h:50
Definition: ArgManager.h:20
Config & Set(std::string setting_name, const std::string &new_value, const std::string &in_desc="")
Definition: config.h:403
int use_arg_value(emp::vector< std::string > &args, const std::string &pattern, Ts &...vars)
Definition: command_line.h:114
Maintains a set of configuration options.
void push_back(PB_Ts &&...args)
Definition: vector.h:189
ArgManager(int argc, char *argv[])
Definition: ArgManager.h:28
bool use_flag(emp::vector< std::string > &args, const std::string &pattern)
Definition: command_line.h:66
size_t size() const
Definition: vector.h:151
size_t size() const
Definition: ArgManager.h:32
~ArgManager()
Definition: ArgManager.h:30
int UseArg(const std::string &name, T &var, const std::string &desc="")
Definition: ArgManager.h:42
static const PrintStr endl("<br>")
Pre-define emp::endl to insert a "<br>" and thus acting like a newline.
emp::vector< std::string > args_to_strings(int argc, char *argv[])
Definition: command_line.h:44
bool TestUnknown(std::ostream &os=std::cerr) const
Definition: ArgManager.h:83
iterator begin() noexcept
Definition: vector.h:153
void PrintHelp(std::ostream &os) const
Definition: ArgManager.h:68
If we are in emscripten, make sure to include the header.
Definition: array.h:37
ArgManager()
Definition: ArgManager.h:27
std::string & operator[](size_t i)
Definition: ArgManager.h:35
const std::string & operator[](size_t i) const
Definition: ArgManager.h:36
auto end() -> decltype(args.end())
Definition: ArgManager.h:34
auto begin() -> decltype(args.begin())
Definition: ArgManager.h:33