32#ifndef RCSC_PARAM_PARAM_MAP_H
33#define RCSC_PARAM_PARAM_MAP_H
35#include <boost/lexical_cast.hpp>
136 typedef std::shared_ptr< ParamEntity >
Ptr;
140 std::string M_long_name;
142 std::string M_short_name;
144 std::string M_description;
158 const std::string & short_name,
160 : M_long_name( long_name ),
161 M_short_name( short_name ),
197 return M_description;
221 bool analyze(
const std::string & value_str ) = 0;
246template <
typename ValueType >
266 const std::string & short_name,
270 M_value_ptr( value_ptr )
284 *M_value_ptr = boost::lexical_cast< Type >( value_str );
287 catch ( boost::bad_lexical_cast & e )
289 std::cerr << e.what() <<
" [" << value_str <<
"]"
297 template <
typename T >
298 std::ostream & printValueImpl( std::ostream & os,
299 const T & value )
const
305 std::ostream & printValueImpl( std::ostream & os,
306 const std::string & value )
const
308 os <<
'"' << value <<
'"';
320 return printValueImpl( os, *M_value_ptr );
349 const std::string & short_name,
354 M_value_ptr( value_ptr )
367 const std::string & short_name,
372 M_value_ptr( value.ptr_ )
374 assert( M_value_ptr );
382 bool analyze(
const std::string & value_str );
416 const std::string & short_name,
421 M_value_ptr( value_ptr )
435 const std::string & short_name,
440 M_value_ptr( value.ptr_ )
442 assert( M_value_ptr );
460 bool analyze(
const std::string & value_str );
496 Registrar() =
delete;
504 : M_param_map( pmap )
515 template <
typename ValueType >
516 Registrar & operator()(
const std::string & long_name,
517 const std::string & short_name,
518 ValueType * value_ptr,
519 const char * description =
"" )
521 if ( ! checkName( long_name, short_name ) )
523 M_param_map.M_valid =
false;
529 std::cerr <<
"***ERROR*** detected null pointer for the option "
530 << long_name << std::endl;
531 M_param_map.M_valid =
false;
539 M_param_map.
add( ptr );
551 Registrar & operator()(
const std::string & long_name,
552 const std::string & short_name,
554 const char * description =
"" );
564 Registrar & operator()(
const std::string & long_name,
565 const std::string & short_name,
567 const char * description =
"" );
577 Registrar & operator()(
const std::string & long_name,
578 const std::string & short_name,
580 const char * description =
"" );
588 bool checkName(
const std::string & long_nam,
589 const std::string & short_name )
const;
596 Registrar M_registrar;
599 std::string M_group_name;
602 std::vector< ParamEntity::Ptr > M_parameters;
605 std::map< std::string, ParamEntity::Ptr > M_long_name_map;
608 std::map< std::string, ParamEntity::Ptr > M_short_name_map;
632 M_registrar( *this ),
633 M_group_name( group_name )
673 const std::map< std::string, ParamEntity::Ptr > &
longNameMap()
const
675 return M_long_name_map;
684 return M_short_name_map;
706 void remove(
const std::string & long_name );
729 const bool with_default =
true )
const;
abstract parameter
Definition: param_map.h:132
const std::string & shortName() const
get long name of parameter
Definition: param_map.h:187
const std::string & description() const
get description message
Definition: param_map.h:195
virtual std::ostream & printFormat(std::ostream &os) const
print help name strings
virtual ~ParamEntity()
destructor as virtual method
Definition: param_map.h:171
virtual bool analyze(const std::string &value_str)=0
pure virtual method. analyze value string.
virtual std::ostream & printValue(std::ostream &os) const =0
pure virtual method. print value to stream
std::shared_ptr< ParamEntity > Ptr
ParamEntity smart pointer type.
Definition: param_map.h:136
virtual bool isSwitch() const
(virtual) check if this parameter is switch type or not.
Definition: param_map.h:211
ParamEntity(const std::string &long_name, const std::string &short_name, const char *description="")
construct with all arguments
Definition: param_map.h:157
std::string helpName() const
get the formatted name string for help messages
const std::string & longName() const
get long name of parameter
Definition: param_map.h:178
ParamGeneric(const std::string &long_name, const std::string &short_name, bool *value_ptr, const char *description="")
constructor
Definition: param_map.h:348
bool analyze(const std::string &value_str)
analyze value string and substitute it to variable.
ParamGeneric(const std::string &long_name, const std::string &short_name, const NegateBool &value, const char *description="")
constructor
Definition: param_map.h:366
std::ostream & printValue(std::ostream &os) const
print value to stream
generic parameter
Definition: param_map.h:248
ParamGeneric(const std::string &long_name, const std::string &short_name, Type *value_ptr, const char *description="")
constructor
Definition: param_map.h:265
bool analyze(const std::string &value_str)
analyze value string and substitute it to variable.
Definition: param_map.h:280
ValueType Type
value type alias
Definition: param_map.h:250
std::ostream & printValue(std::ostream &os) const
print value to stream
Definition: param_map.h:318
parameter container
Definition: param_map.h:484
Registrar & add()
get a parameter registrar
Definition: param_map.h:691
const std::vector< ParamEntity::Ptr > & parameters() const
get the container of all parameters
Definition: param_map.h:664
ParamMap()
default constructor. create registrer
Definition: param_map.h:620
std::ostream & printValues(std::ostream &os) const
output parameter name and value
const std::string & groupName() const
get the name of parameter group
Definition: param_map.h:655
~ParamMap()
destructor. nothing to do
Definition: param_map.h:639
ParamEntity::Ptr findLongName(const std::string &long_name)
get parameter entry that has the argument name
ParamMap(const std::string &group_name)
construct with option name string
Definition: param_map.h:630
const std::map< std::string, ParamEntity::Ptr > & longNameMap() const
get the long name parameter map
Definition: param_map.h:673
std::ostream & printHelp(std::ostream &os, const bool with_default=true) const
output parameter usage by command line option style
Registrar & add(ParamEntity::Ptr param)
add new parameter entry
const std::map< std::string, ParamEntity::Ptr > & shortNameMap() const
get the short name parameter map
Definition: param_map.h:682
bool isValid() const
check if all registered options are valid or not.
Definition: param_map.h:646
void remove(const std::string &long_name)
remove registered parameter pointer
ParamEntity::Ptr findShortName(const std::string &short_name)
get parameter entry that has the argument name
switch type parameter
Definition: param_map.h:399
std::ostream & printValue(std::ostream &os) const
print value to stream
std::ostream & printFormat(std::ostream &os) const
print usage format.
bool analyze(const std::string &value_str)
analyze value string and substitute it to variable.
ParamSwitch(const std::string &long_name, const std::string &short_name, bool *value_ptr, const char *description="")
constructor
Definition: param_map.h:415
ParamSwitch(const std::string &long_name, const std::string &short_name, const NegateSwitch &value, const char *description="")
constructor
Definition: param_map.h:434
virtual bool isSwitch() const
(virtual) check if this parameter is switch type or not.
Definition: param_map.h:450
wrapper for bool switch.
Definition: param_map.h:73
bool * ptr_
raw pointer to the parameter variable
Definition: param_map.h:74
BoolSwitch(bool *ptr)
constructor
Definition: param_map.h:81
negate wrapper.
Definition: param_map.h:50
bool * ptr_
raw pointer to the parameter variable
Definition: param_map.h:51
NegateBool(bool *ptr)
constructor
Definition: param_map.h:58
negate wrapper for bool switch.
Definition: param_map.h:97
NegateSwitch(const BoolSwitch &value)
constructor
Definition: param_map.h:116
bool * ptr_
pointer to the parameter variable.
Definition: param_map.h:98
NegateSwitch(bool *ptr)
constructor
Definition: param_map.h:105