8 #ifndef SCARAB_APPLICATION_HH_ 9 #define SCARAB_APPLICATION_HH_ 58 app* this_app()
const;
61 config_decorator* add_config_subcommand( std::string a_subcommand_name, std::string a_description=
"" );
65 CLI::Option* add_config_option( std::string a_name,
66 std::string a_master_config_addr,
67 std::string a_description =
"" );
70 template< typename T, CLI::enable_if_t< ! CLI::is_vector<T>::value, CLI::detail::enabler > =
CLI::detail::dummy >
71 CLI::Option* add_config_multi_option( std::string a_name,
72 std::string a_master_config_addr,
73 std::string a_description =
"" );
78 CLI::Option* add_config_flag( std::string a_name,
79 std::string a_master_config_addr,
80 std::string a_description =
"" );
84 template< typename T, CLI::enable_if_t< CLI::is_bool<T>::value, CLI::detail::enabler > =
CLI::detail::dummy >
85 CLI::Option* add_config_flag( std::string a_name,
86 std::string a_master_config_addr,
87 std::string a_description =
"" );
95 virtual void add_to_app_options(
param_node& a_app_options ) = 0;
101 template<
typename T >
106 if( ! (*f_option) )
return;
108 f_master_config_addr,
110 a_app_options.
merge( t_new_config_ptr->as_node() );
117 template<
typename T >
122 if( ! (*f_option) )
return;
124 std::for_each( f_values.begin(), f_values.end(), [&t_array]( T a_value ){ t_array.
push_back( a_value ); } );
126 f_master_config_addr,
128 a_app_options.
merge( t_new_config_ptr->as_node() );
139 if( ! (*f_option) )
return;
141 f_master_config_addr,
143 a_app_options.
merge( t_new_config_ptr->as_node() );
256 virtual void pre_callback();
260 virtual void do_config_stage_1();
262 virtual void do_config_stage_2();
264 virtual void do_config_stage_3();
266 virtual void do_config_stage_4();
294 mv_referrable( std::vector< std::shared_ptr< app_option_holder > >, app_option_holders );
300 std::string a_master_config_addr,
301 std::string a_description )
303 auto t_opt_holder_ptr = std::make_shared< app_option_holder_typed<T> >();
304 t_opt_holder_ptr->f_option = f_this->add_option( a_name, t_opt_holder_ptr->f_value, a_description );
305 t_opt_holder_ptr->f_master_config_addr = a_master_config_addr;
306 f_main->app_option_holders().push_back( t_opt_holder_ptr );
307 return t_opt_holder_ptr->f_option;
312 std::string a_master_config_addr,
313 std::string a_description )
315 auto t_opt_holder_ptr = std::make_shared< app_option_holder_vector_typed<T> >();
316 t_opt_holder_ptr->f_option = f_this->add_option( a_name, t_opt_holder_ptr->f_values, a_description );
317 t_opt_holder_ptr->f_master_config_addr = a_master_config_addr;
318 f_main->app_option_holders().push_back( t_opt_holder_ptr );
319 return t_opt_holder_ptr->f_option;
324 std::string a_master_config_addr,
325 std::string a_description )
327 auto t_opt_holder_ptr = std::make_shared< app_option_holder_typed<T> >();
328 t_opt_holder_ptr->f_option = f_this->add_flag( a_name, t_opt_holder_ptr->f_value, a_description );
329 t_opt_holder_ptr->f_master_config_addr = a_master_config_addr;
330 f_main->app_option_holders().push_back( t_opt_holder_ptr );
331 return t_opt_holder_ptr->f_option;
336 std::string a_master_config_addr,
337 std::string a_description )
339 auto t_opt_holder_ptr = std::make_shared< app_option_holder_bool_flag >();
340 t_opt_holder_ptr->f_option = f_this->add_flag( a_name, a_description );
341 t_opt_holder_ptr->f_master_config_addr = a_master_config_addr;
342 f_main->app_option_holders().push_back( t_opt_holder_ptr );
343 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.
int main(int argc, char **argv)
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="")
std::vector< conf_dec_ptr_t > f_subcommand_decorators
virtual ~app_option_holder_bool_flag()
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
#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)