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() );
265 virtual void pre_callback();
269 virtual void do_config_stage_1();
271 virtual void do_config_stage_2();
273 virtual void do_config_stage_3();
275 virtual void do_config_stage_4();
301 mv_referrable( std::vector< std::shared_ptr< app_option_holder > >, app_option_holders );
312 void set_global_verbosity(
verbosity_t a_verbosity );
316 void increase_global_verbosity(
unsigned an_offset );
317 void decrease_global_verbosity(
unsigned an_offset );
331 std::string a_primary_config_addr,
332 std::string a_description )
334 auto t_opt_holder_ptr = std::make_shared< app_option_holder_typed<T> >();
335 t_opt_holder_ptr->f_option = f_this->add_option( a_name, t_opt_holder_ptr->f_value, a_description );
336 t_opt_holder_ptr->f_primary_config_addr = a_primary_config_addr;
337 f_main->app_option_holders().push_back( t_opt_holder_ptr );
338 return t_opt_holder_ptr->f_option;
343 std::string a_primary_config_addr,
344 std::string a_description )
346 auto t_opt_holder_ptr = std::make_shared< app_option_holder_vector_typed<T> >();
347 t_opt_holder_ptr->f_option = f_this->add_option( a_name, t_opt_holder_ptr->f_values, a_description );
348 t_opt_holder_ptr->f_primary_config_addr = a_primary_config_addr;
349 f_main->app_option_holders().push_back( t_opt_holder_ptr );
350 return t_opt_holder_ptr->f_option;
355 std::string a_primary_config_addr,
356 std::string a_description )
358 auto t_opt_holder_ptr = std::make_shared< app_option_holder_typed<T> >();
359 t_opt_holder_ptr->f_option = f_this->add_flag( a_name, t_opt_holder_ptr->f_value, a_description );
360 t_opt_holder_ptr->f_primary_config_addr = a_primary_config_addr;
361 f_main->app_option_holders().push_back( t_opt_holder_ptr );
362 return t_opt_holder_ptr->f_option;
367 std::string a_primary_config_addr,
368 std::string a_description )
370 auto t_opt_holder_ptr = std::make_shared< app_option_holder_bool_flag >();
371 t_opt_holder_ptr->f_option = f_this->add_flag( a_name, a_description );
372 t_opt_holder_ptr->f_primary_config_addr = a_primary_config_addr;
373 f_main->app_option_holders().push_back( t_opt_holder_ptr );
374 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
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)