8 #ifndef SCARAB_APPLICATION_HH_ 9 #define SCARAB_APPLICATION_HH_ 64 app* this_app()
const;
67 config_decorator* add_config_subcommand( std::string a_subcommand_name, std::string a_description=
"" );
72 std::string a_master_config_addr,
73 std::string a_description =
"" );
77 CLI::Option* add_config_multi_option( std::string a_name,
78 std::string a_master_config_addr,
79 std::string a_description =
"" );
85 std::string a_master_config_addr,
86 std::string a_description =
"" );
92 std::string a_master_config_addr,
93 std::string a_description =
"" );
101 virtual void add_to_app_options(
param_node& a_app_options ) = 0;
107 template<
typename T >
112 if( ! (*f_option) )
return;
114 f_master_config_addr,
116 a_app_options.
merge( t_new_config_ptr->as_node() );
123 template<
typename T >
128 if( ! (*f_option) )
return;
130 std::for_each( f_values.begin(), f_values.end(), [&t_array]( T a_value ){ t_array.
push_back( a_value ); } );
132 f_master_config_addr,
134 a_app_options.
merge( t_new_config_ptr->as_node() );
145 if( ! (*f_option) )
return;
147 f_master_config_addr,
149 a_app_options.
merge( t_new_config_ptr->as_node() );
262 virtual void pre_callback();
266 virtual void do_config_stage_1();
268 virtual void do_config_stage_2();
270 virtual void do_config_stage_3();
272 virtual void do_config_stage_4();
300 mv_referrable( std::vector< std::shared_ptr< app_option_holder > >, app_option_holders );
306 std::string a_master_config_addr,
307 std::string a_description )
309 auto t_opt_holder_ptr = std::make_shared< app_option_holder_typed<T> >();
310 t_opt_holder_ptr->f_option = f_this->add_option( a_name, t_opt_holder_ptr->f_value, a_description );
311 t_opt_holder_ptr->f_master_config_addr = a_master_config_addr;
312 f_main->app_option_holders().push_back( t_opt_holder_ptr );
313 return t_opt_holder_ptr->f_option;
318 std::string a_master_config_addr,
319 std::string a_description )
321 auto t_opt_holder_ptr = std::make_shared< app_option_holder_vector_typed<T> >();
322 t_opt_holder_ptr->f_option = f_this->add_option( a_name, t_opt_holder_ptr->f_values, a_description );
323 t_opt_holder_ptr->f_master_config_addr = a_master_config_addr;
324 f_main->app_option_holders().push_back( t_opt_holder_ptr );
325 return t_opt_holder_ptr->f_option;
330 std::string a_master_config_addr,
331 std::string a_description )
333 auto t_opt_holder_ptr = std::make_shared< app_option_holder_typed<T> >();
334 t_opt_holder_ptr->f_option = f_this->add_flag( a_name, t_opt_holder_ptr->f_value, a_description );
335 t_opt_holder_ptr->f_master_config_addr = a_master_config_addr;
336 f_main->app_option_holders().push_back( t_opt_holder_ptr );
337 return t_opt_holder_ptr->f_option;
342 std::string a_master_config_addr,
343 std::string a_description )
345 auto t_opt_holder_ptr = std::make_shared< app_option_holder_bool_flag >();
346 t_opt_holder_ptr->f_option = f_this->add_flag( a_name, a_description );
347 t_opt_holder_ptr->f_master_config_addr = a_master_config_addr;
348 f_main->app_option_holders().push_back( t_opt_holder_ptr );
349 return t_opt_holder_ptr->f_option;
void merge(const param_node &a_object)
virtual ~app_option_holder()
constexpr enabler dummy
An instance to use in EnableIf.
virtual ~app_option_holder_typed()
static param_ptr_t parse_address(const std::string &an_addr, param_ptr_t a_value=param_ptr_t())
Converts an address into a nested param structure, and optionally attaches a value.
std::shared_ptr< version_semantic > version_semantic_ptr_t
std::unique_ptr< config_decorator > conf_dec_ptr_t
enabler
Simple empty scoped class.
void add_to_app_options(param_node &a_app_options)
std::vector< T > f_values
Adds the ability to create options and subcommands that are tied to a main_app's master config...
CLI::Option * add_config_flag(std::string a_name, std::string a_master_config_addr, std::string a_description="")
Creates a command line program, with very few defaults.
std::vector< conf_dec_ptr_t > f_subcommand_decorators
virtual ~app_option_holder_bool_flag()
Check to see if something is bool (fail check by default)
CLI::Option * add_config_option(std::string a_name, std::string a_master_config_addr, std::string a_description="")
Add an option that gets automatically added to the master config of a main_app.
CLI::Option * add_config_multi_option(std::string a_name, std::string a_master_config_addr, std::string a_description="")
Add an option that gets automatically added to the master config of a main_app.
std::unique_ptr< param > param_ptr_t
detail::enable_if_t<!detail::move_never< T >::value, T > move(object &&obj)
#define mv_referrable_const
Primary application class.
std::string f_master_config_addr
void add_to_app_options(param_node &a_app_options)
void push_back(const param &a_value)
virtual ~app_option_holder_vector_typed()
void add_to_app_options(param_node &a_app_options)