8 #ifndef SCARAB_APPLICATION_HH_ 9 #define SCARAB_APPLICATION_HH_ 18 #include <type_traits> 67 app* this_app()
const;
70 config_decorator* add_config_subcommand( std::string a_subcommand_name, std::string a_description=
"" );
75 std::string a_primary_config_addr,
76 std::string a_description =
"" );
79 template< typename T, CLI::enable_if_t< ! CLI::is_vector<T>::value, CLI::detail::enabler > =
CLI::detail::dummy >
80 CLI::Option* add_config_multi_option( std::string a_name,
81 std::string a_primary_config_addr,
82 std::string a_description =
"" );
88 std::string a_primary_config_addr,
89 std::string a_description =
"" );
93 template< typename T, CLI::enable_if_t< CLI::is_bool<T>::value, CLI::detail::enabler > =
CLI::detail::dummy >
95 std::string a_primary_config_addr,
96 std::string a_description =
"" );
104 virtual void add_to_app_options(
param_node& a_app_options ) = 0;
110 template<
typename T >
115 if( ! (*f_option) )
return;
117 f_primary_config_addr,
119 a_app_options.
merge( t_new_config_ptr->as_node() );
126 template<
typename T >
131 if( ! (*f_option) )
return;
133 std::for_each( f_values.begin(), f_values.end(), [&t_array]( T a_value ){ t_array.
push_back( a_value ); } );
135 f_primary_config_addr,
137 a_app_options.
merge( t_new_config_ptr->as_node() );
148 if( ! (*f_option) )
return;
150 f_primary_config_addr,
152 a_app_options.
merge( t_new_config_ptr->as_node() );
264 main_app(
bool a_use_config =
true );
270 virtual void pre_callback();
274 virtual void do_config_stage_1();
276 virtual void do_config_stage_2();
278 virtual void do_config_stage_3();
280 virtual void do_config_stage_4();
306 mv_referrable( std::vector< std::shared_ptr< app_option_holder > >, app_option_holders );
319 void set_global_verbosity(
verbosity_t a_verbosity );
323 void increase_global_verbosity(
unsigned an_offset );
324 void decrease_global_verbosity(
unsigned an_offset );
338 std::string a_primary_config_addr,
339 std::string a_description )
341 auto t_opt_holder_ptr = std::make_shared< app_option_holder_typed<T> >();
342 t_opt_holder_ptr->f_option = f_this->add_option( a_name, t_opt_holder_ptr->f_value, a_description );
343 t_opt_holder_ptr->f_primary_config_addr = a_primary_config_addr;
344 f_main->app_option_holders().push_back( t_opt_holder_ptr );
345 return t_opt_holder_ptr->f_option;
350 std::string a_primary_config_addr,
351 std::string a_description )
353 auto t_opt_holder_ptr = std::make_shared< app_option_holder_vector_typed<T> >();
354 t_opt_holder_ptr->f_option = f_this->add_option( a_name, t_opt_holder_ptr->f_values, a_description );
355 t_opt_holder_ptr->f_primary_config_addr = a_primary_config_addr;
356 f_main->app_option_holders().push_back( t_opt_holder_ptr );
357 return t_opt_holder_ptr->f_option;
362 std::string a_primary_config_addr,
363 std::string a_description )
365 auto t_opt_holder_ptr = std::make_shared< app_option_holder_typed<T> >();
366 t_opt_holder_ptr->f_option = f_this->add_flag( a_name, t_opt_holder_ptr->f_value, a_description );
367 t_opt_holder_ptr->f_primary_config_addr = a_primary_config_addr;
368 f_main->app_option_holders().push_back( t_opt_holder_ptr );
369 return t_opt_holder_ptr->f_option;
374 std::string a_primary_config_addr,
375 std::string a_description )
377 auto t_opt_holder_ptr = std::make_shared< app_option_holder_bool_flag >();
378 t_opt_holder_ptr->f_option = f_this->add_flag( a_name, a_description );
379 t_opt_holder_ptr->f_primary_config_addr = a_primary_config_addr;
380 f_main->app_option_holders().push_back( t_opt_holder_ptr );
381 return t_opt_holder_ptr->f_option;
void merge(const param_node &a_object)
CLI::Option * add_config_multi_option(std::string a_name, std::string a_primary_config_addr, std::string a_description="")
Add an option that gets automatically added to the primary config of a main_app.
virtual ~app_option_holder()
constexpr enabler dummy
An instance to use in EnableIf.
std::map< verbosity_t, logger::ELevel > verbosity_map_t
verbosity_iterator_t f_global_verbosity
virtual ~app_option_holder_typed()
std::underlying_type< logger::ELevel >::type verbosity_t
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::string type(const x_type &a_param)
std::unique_ptr< config_decorator > conf_dec_ptr_t
#define mv_accessible_noset
enabler
Simple empty scoped class.
Contains the logger class and macros, based on Kasper's KLogger class.
CLI::Option * add_config_flag(std::string a_name, std::string a_primary_config_addr, std::string a_description="")
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 primary config...
Creates a command line program, with very few defaults.
std::string f_primary_config_addr
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)
static verbosity_map_t s_verbosities
std::unique_ptr< param > param_ptr_t
CLI::Option * add_config_option(std::string a_name, std::string a_primary_config_addr, std::string a_description="")
Add an option that gets automatically added to the primary config of a main_app.
#define mv_referrable_const
Primary application class.
verbosity_map_t::iterator verbosity_iterator_t
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)