68    ,PARSE_HELP_PRINTED            =  1 
 
   69    ,PARSE_UNRECOGNIZED_OPTION     =  2 
 
 
   94    bool    throwExceptions       = 
true 
   95    ,
bool   recogniseAllOptions   = 
true 
   96    ,
bool   addOutputSetupOptions = 
false 
  109  void throwExceptions( 
const bool & throwExceptions );
 
  112  bool throwExceptions() 
const;
 
  115  void recogniseAllOptions( 
const bool & recogniseAllOptions );
 
  118  bool recogniseAllOptions() 
const;
 
  121  void addOutputSetupOptions( 
const bool &addOutputSetupOptions );
 
  124  bool addOutputSetupOptions() 
const;
 
  151    ,
const char    documentation[] = 
NULL 
  167    ,
const char    documentation[] = 
NULL 
  168    ,
const bool    required        = 
false 
  184    ,
const char    documentation[] = 
NULL 
  185    ,
const bool    required        = 
false 
  201    ,
const char    documentation[] = 
NULL 
  202    ,
const bool    required        = 
false 
  218    ,
const char    documentation[] = 
NULL 
  219    ,
const bool    required        = 
false 
  235    ,
const char    documentation[] = 
NULL 
  236    ,
const bool    required        = 
false 
  252    ,
const char    documentation[] = 
NULL 
  253    ,
const bool    required        = 
false 
  269    ,
const char    documentation[] = 
NULL 
  270    ,
const bool    required        = 
false 
  301  template <
class EType>
 
  304    EType* enum_option_val,
 
  305    const int num_enum_opt_values,
 
  306    const EType  enum_opt_values[],
 
  307    const char * 
const enum_opt_names[],
 
  308    const char documentation[] = 
nullptr,
 
  309    const bool required = 
false );
 
  375  EParseCommandLineReturn  parse(
 
  378    ,std::ostream   *
errout = &std::cerr
 
  394   void printHelpMessage( 
const char program_name[], std::ostream &out ) 
const;
 
  407  enum EOptType { OPT_NONE, OPT_BOOL_TRUE, OPT_BOOL_FALSE, OPT_INT, OPT_LONG_INT, OPT_SIZE_T,
 
  409  OPT_DOUBLE, OPT_FLOAT, OPT_STRING, OPT_ENUM_INT };
 
  426  struct opt_val_val_t {
 
  432    opt_val_val_t( EOptType opt_type_in, 
const any& opt_val_in, 
bool required_in )
 
  433      :opt_type(opt_type_in),opt_val(opt_val_in),required(required_in),was_read(false)
 
  449    opt_doc_t(EOptType opt_type_in, 
const std::string& opt_name_in, 
const std::string& opt_name_false_in
 
  450            ,
const std::string &documentation_in, 
const any &default_val_in )
 
  451      :opt_type(opt_type_in),opt_name(opt_name_in),opt_name_false(opt_name_false_in)
 
  452      ,documentation(documentation_in),default_val(default_val_in)
 
  455    std::string  opt_name;
 
  456    std::string  opt_name_false; 
 
  457    std::string  documentation;
 
  462  typedef std::vector<opt_doc_t>   options_documentation_list_t;
 
  465  struct enum_opt_data_t {
 
  467      :enum_option_val(NULL), num_enum_opt_values(0)
 
  470      int* _enum_option_val
 
  471      ,
const int _num_enum_opt_values
 
  472      ,
const int _enum_opt_values[]
 
  473      ,
const char * 
const _enum_opt_names[]
 
  475      :enum_option_val(_enum_option_val),
 
  476       num_enum_opt_values(_num_enum_opt_values),
 
  477       enum_opt_values(_enum_opt_values,_enum_opt_values+_num_enum_opt_values)
 
  479        for( 
int k = 0; k < num_enum_opt_values; ++k )
 
  480          enum_opt_names.push_back(std::string(_enum_opt_names[k]));
 
  482    int                  *enum_option_val;
 
  483    int                  num_enum_opt_values;
 
  484    std::vector<int>     enum_opt_values;
 
  485    std::vector<std::string>  enum_opt_names;
 
  489  typedef std::vector<enum_opt_data_t> enum_opt_data_list_t;
 
  494  bool                             throwExceptions_;
 
  495  bool                             recogniseAllOptions_;
 
  496  bool                             addOutputSetupOptions_;
 
  497  std::string                      doc_string_;
 
  502#pragma warning(disable:4251) 
  504  mutable options_list_t           options_list_;
 
  505  options_documentation_list_t     options_documentation_list_;
 
  506  enum_opt_data_list_t             enum_opt_data_list_;
 
  511  bool  output_all_front_matter_;
 
  512  bool  output_show_line_prefix_;
 
  513  bool  output_show_tab_count_;
 
  514  bool  output_show_proc_rank_;
 
  515  int   output_to_root_rank_only_;
 
  516  bool  print_rcpnode_statistics_on_exit_;
 
  517  bool  show_timer_summary_on_exit_;
 
  518  bool  print_system_info_;
 
  520  bool printed_timer_summary_;
 
  522  bool  added_extra_output_setup_options_;
 
  523  bool  in_add_extra_output_setup_options_;
 
  525  static const bool  output_all_front_matter_default_;
 
  526  static const bool  output_show_line_prefix_default_;
 
  527  static const bool  output_show_tab_count_default_;
 
  528  static const bool  output_show_proc_rank_default_;
 
  529  static const int   output_to_root_rank_only_default_;
 
  530  static const bool  print_rcpnode_statistics_on_exit_default_;
 
  531  static const bool  show_timer_summary_on_exit_default_;
 
  532  static const bool  print_system_info_default_;
 
  538  void add_extra_output_setup_options() 
const;
 
  542    const char enum_option_name[],
 
  543    int* enum_option_val,
 
  544    const int num_enum_opt_values,
 
  545    const int enum_opt_values[],
 
  546    const char * 
const enum_opt_names[],
 
  547    const char documentation[],
 
  555    ,
const std::string   &enum_opt_name
 
  557    ,
const std::string   &enum_str_val
 
  558    ,std::ostream        *errout
 
  562  void print_enum_opt_names(
 
  568  std::string enum_opt_default_val_name(
 
  569    const std::string    &enum_name
 
  571    ,std::ostream        *errout
 
  575  int find_enum_opt_index(
 
  576    const std::string           &enum_opt_name
 
  578    ,
const enum_opt_data_t      &enum_data
 
  579    ,std::ostream               *errout
 
  586    ,std::string   *opt_name
 
  587    ,std::string   *opt_val_str 
 
  591  std::string opt_type_str( EOptType ) 
const;
 
  597    ,std::ostream   *errout
 
  641    virtual void summarize(std::ostream &out=std::cout) = 0;