35 #include <type_traits> 37 #include <boost/program_options/parsers.hpp> 38 #include <boost/program_options/options_description.hpp> 39 #include <boost/program_options/variables_map.hpp> 40 #include "include_base_utils.h" 45 std::string
input_line(
const std::string& prompt);
48 bool is_yes(
const std::string& str);
50 template<
typename T,
bool required = false>
76 static_assert(!std::is_same<T, bool>::value,
"Boolean switch can't be required");
87 return boost::program_options::value<T>()->required();
93 auto semantic = boost::program_options::value<T>();
94 if (!
arg.not_use_default)
95 semantic->default_value(
arg.default_value);
102 auto semantic = boost::program_options::value<T>();
103 if (!
arg.not_use_default)
104 semantic->default_value(def);
111 auto semantic = boost::program_options::value< std::vector<T> >();
112 semantic->default_value(std::vector<T>(),
"");
116 template<
typename T,
bool required>
119 if (0 != description.find_nothrow(
arg.name,
false))
121 CHECK_AND_ASSERT_MES(!unique,
void(),
"Argument already exists: " <<
arg.name);
131 if (0 != description.find_nothrow(
arg.name,
false))
133 CHECK_AND_ASSERT_MES(!unique,
void(),
"Argument already exists: " <<
arg.name);
143 if (0 != description.find_nothrow(
arg.name,
false))
145 CHECK_AND_ASSERT_MES(!unique,
void(),
"Argument already exists: " <<
arg.name);
149 description.add_options()(
arg.name, boost::program_options::bool_switch(),
arg.description);
152 template<
typename charT>
153 boost::program_options::basic_parsed_options<charT>
parse_command_line(
int argc,
const charT*
const argv[],
154 const boost::program_options::options_description& desc,
bool allow_unregistered =
false)
156 auto parser = boost::program_options::command_line_parser(argc, argv);
157 parser.options(desc);
158 if (allow_unregistered)
160 parser.allow_unregistered();
172 catch (
const std::exception& e)
174 std::cerr <<
"Failed to parse arguments: " << e.what() << std::endl;
175 std::cerr << desc << std::endl;
180 std::cerr <<
"Failed to parse arguments: unknown exception" << std::endl;
181 std::cerr << desc << std::endl;
186 template<
typename T,
bool required>
189 auto value = vm[
arg.name];
190 return !value.empty();
194 template<
typename T,
bool required>
197 return vm[
arg.name].template as<T>();
203 return get_arg<bool, false>(vm,
arg);
207 extern const arg_descriptor<bool>
arg_help;
const arg_descriptor< bool, false > arg_testnet_on
Definition: command_line.cpp:89
T value_type
Definition: command_line.h:56
const uint32_t T[512]
Definition: groestl_tables.h:34
const arg_descriptor< std::string > arg_validator_key
Definition: command_line.cpp:129
#define F(w, k)
Definition: sha512-blocks.c:61
const char * description
Definition: command_line.h:59
bool not_use_default
Definition: command_line.h:61
bool is_yes(const std::string &str)
Definition: command_line.cpp:68
bool has_arg(const boost::program_options::variables_map &vm, const arg_descriptor< T, required > &arg)
Definition: command_line.h:187
const char * description
Definition: command_line.h:81
const arg_descriptor< bool > arg_disable_fluffy_blocks
Definition: command_line.cpp:124
const char * description
Definition: command_line.h:70
Definition: block_queue.cpp:41
const command_line::arg_descriptor< std::string > arg_check_updates
Definition: command_line.cpp:119
const arg_descriptor< bool > arg_help
Definition: command_line.cpp:82
const char * name
Definition: command_line.h:58
const char * name
Definition: command_line.h:69
const command_line::arg_descriptor< uint64_t > arg_prep_blocks_threads
Definition: command_line.cpp:104
const char * name
Definition: command_line.h:80
bool handle_error_helper(const boost::program_options::options_description &desc, F parser)
Definition: command_line.h:166
boost::program_options::typed_value< T, char > * make_semantic(const arg_descriptor< T, true > &)
Definition: command_line.h:85
void add_arg(boost::program_options::options_description &description, const arg_descriptor< T, required > &arg, bool unique=true)
Definition: command_line.h:117
bool has_arg< bool, false >(const boost::program_options::variables_map &vm, const arg_descriptor< bool, false > &arg)
Definition: command_line.h:201
const arg_descriptor< int > arg_test_dbg_lock_sleep
Definition: command_line.cpp:88
#define false
Definition: stdbool.h:38
const arg_descriptor< std::string > arg_data_dir
Definition: command_line.cpp:84
const arg_descriptor< bool > arg_test_drop_download
Definition: command_line.cpp:86
Definition: command_line.cpp:44
const arg_descriptor< uint64_t > arg_test_drop_download_height
Definition: command_line.cpp:87
std::string input_line(const std::string &prompt)
Definition: command_line.cpp:54
internal::NamedArgWithType< char, T > arg(StringRef name, const T &arg)
Definition: format.h:3450
const command_line::arg_descriptor< uint64_t > arg_fast_block_sync
Definition: command_line.cpp:99
const command_line::arg_descriptor< uint64_t > arg_show_time_stats
Definition: command_line.cpp:109
const arg_descriptor< bool > arg_dns_checkpoints
Definition: command_line.cpp:94
boost::program_options::basic_parsed_options< charT > parse_command_line(int argc, const charT *const argv[], const boost::program_options::options_description &desc, bool allow_unregistered=false)
Definition: command_line.h:153
T get_arg(const boost::program_options::variables_map &vm, const arg_descriptor< T, required > &arg)
Definition: command_line.h:195
const arg_descriptor< std::string > arg_testnet_data_dir
Definition: command_line.cpp:85
T value_type
Definition: command_line.h:76
Definition: command_line.h:74
Definition: command_line.h:51
const arg_descriptor< bool > arg_version
Definition: command_line.cpp:83
std::vector< T > value_type
Definition: command_line.h:67
#define true
Definition: stdbool.h:37
T default_value
Definition: command_line.h:60
Definition: command_line.h:54
const command_line::arg_descriptor< size_t > arg_block_sync_size
Definition: command_line.cpp:114