42 #ifndef TEUCHOS_COMMAND_LINE_PROCESSOR_HPP
43 #define TEUCHOS_COMMAND_LINE_PROCESSOR_HPP
56 #include "Teuchos_Ptr.hpp"
84 {
public:
ParseError(
const std::string& what_arg) : std::logic_error(what_arg) {}};
100 ,PARSE_HELP_PRINTED = 1
101 ,PARSE_UNRECOGNIZED_OPTION = 2
126 bool throwExceptions =
true
127 ,
bool recogniseAllOptions =
true
128 ,
bool addOutputSetupOptions =
false
141 void throwExceptions(
const bool & throwExceptions );
144 bool throwExceptions()
const;
147 void recogniseAllOptions(
const bool & recogniseAllOptions );
150 bool recogniseAllOptions()
const;
153 void addOutputSetupOptions(
const bool &addOutputSetupOptions );
156 bool addOutputSetupOptions()
const;
165 void setDocString(
const char doc_string[] );
180 const char option_true[]
181 ,
const char option_false[]
183 ,
const char documentation[] = NULL
197 const char option_name[]
199 ,
const char documentation[] = NULL
200 ,
const bool required =
false
214 const char option_name[]
215 ,
long int *option_val
216 ,
const char documentation[] = NULL
217 ,
const bool required =
false
231 const char option_name[]
233 ,
const char documentation[] = NULL
234 ,
const bool required =
false
248 const char option_name[]
249 ,
long long int *option_val
250 ,
const char documentation[] = NULL
251 ,
const bool required =
false
265 const char option_name[]
267 ,
const char documentation[] = NULL
268 ,
const bool required =
false
282 const char option_name[]
283 ,std::string *option_val
284 ,
const char documentation[] = NULL
285 ,
const bool required =
false
316 template <
class EType>
318 const char enum_option_name[]
319 ,
EType *enum_option_val
320 ,
const int num_enum_opt_values
321 ,
const EType enum_opt_values[]
322 ,
const char* enum_opt_names[]
323 ,
const char documentation[] = NULL
324 ,
const bool required =
false
391 EParseCommandLineReturn parse(
394 ,std::ostream *errout = &std::cerr
410 void printHelpMessage(
const char program_name[], std::ostream &out )
const;
423 enum EOptType { OPT_NONE, OPT_BOOL_TRUE, OPT_BOOL_FALSE, OPT_INT, OPT_LONG_INT, OPT_SIZE_T,
425 OPT_DOUBLE, OPT_STRING, OPT_ENUM_INT };
442 struct opt_val_val_t {
448 opt_val_val_t( EOptType opt_type_in,
const any& opt_val_in,
bool required_in )
449 :opt_type(opt_type_in),opt_val(opt_val_in),required(required_in),was_read(false)
458 typedef Teuchos::map<std::string,opt_val_val_t> options_list_t;
465 opt_doc_t(EOptType opt_type_in,
const std::string& opt_name_in,
const std::string& opt_name_false_in
466 ,
const std::string &documentation_in,
const any &default_val_in )
467 :opt_type(opt_type_in),opt_name(opt_name_in),opt_name_false(opt_name_false_in)
468 ,documentation(documentation_in),default_val(default_val_in)
471 std::string opt_name;
472 std::string opt_name_false;
473 std::string documentation;
478 typedef std::vector<opt_doc_t> options_documentation_list_t;
481 struct enum_opt_data_t {
483 :enum_option_val(NULL), num_enum_opt_values(0)
486 int *_enum_option_val
487 ,
const int _num_enum_opt_values
488 ,
const int _enum_opt_values[]
489 ,
const char* _enum_opt_names[]
491 :enum_option_val(_enum_option_val)
492 ,num_enum_opt_values(_num_enum_opt_values)
493 ,enum_opt_values(_enum_opt_values,_enum_opt_values+_num_enum_opt_values)
495 for(
int k = 0; k < num_enum_opt_values; ++k )
496 enum_opt_names.push_back(std::string(_enum_opt_names[k]));
498 int *enum_option_val;
499 int num_enum_opt_values;
500 std::vector<int> enum_opt_values;
501 std::vector<std::string> enum_opt_names;
505 typedef std::vector<enum_opt_data_t> enum_opt_data_list_t;
510 bool throwExceptions_;
511 bool recogniseAllOptions_;
512 bool addOutputSetupOptions_;
513 std::string doc_string_;
517 #pragma warning(push)
518 #pragma warning(disable:4251)
520 mutable options_list_t options_list_;
521 options_documentation_list_t options_documentation_list_;
522 enum_opt_data_list_t enum_opt_data_list_;
527 bool output_all_front_matter_;
528 bool output_show_line_prefix_;
529 bool output_show_tab_count_;
530 bool output_show_proc_rank_;
531 int output_to_root_rank_only_;
532 bool print_rcpnode_statistics_on_exit_;
533 bool show_timer_summary_on_exit_;
535 bool printed_timer_summary_;
537 bool added_extra_output_setup_options_;
538 bool in_add_extra_output_setup_options_;
540 static const bool output_all_front_matter_default_;
541 static const bool output_show_line_prefix_default_;
542 static const bool output_show_tab_count_default_;
543 static const bool output_show_proc_rank_default_;
544 static const int output_to_root_rank_only_default_;
545 static const bool print_rcpnode_statistics_on_exit_default_;
546 static const bool show_timer_summary_on_exit_default_;
552 void add_extra_output_setup_options()
const;
556 const char enum_option_name[]
557 ,
int *enum_option_val
558 ,
const int num_enum_opt_values
559 ,
const int enum_opt_values[]
560 ,
const char* enum_opt_names[]
561 ,
const char documentation[]
569 ,
const std::string &enum_opt_name
571 ,
const std::string &enum_str_val
572 ,std::ostream *errout
576 void print_enum_opt_names(
582 std::string enum_opt_default_val_name(
583 const std::string &enum_name
585 ,std::ostream *errout
589 int find_enum_opt_index(
590 const std::string &enum_opt_name
592 ,
const enum_opt_data_t &enum_data
593 ,std::ostream *errout
600 ,std::string *opt_name
601 ,std::string *opt_val_str
605 std::string opt_type_str( EOptType )
const;
611 ,std::ostream *errout
655 virtual void summarize(std::ostream &out=std::cout) = 0;
678 { throwExceptions_ = throwExceptions_in; }
683 {
return throwExceptions_; }
688 { recogniseAllOptions_ = recogniseAllOptions_in; }
693 {
return recogniseAllOptions_; }
698 { addOutputSetupOptions_ = addOutputSetupOptions_in; }
703 {
return addOutputSetupOptions_; }
706 template <
class EType>
709 const char enum_option_name[]
710 ,
EType *enum_option_val
711 ,
const int num_enum_opt_values
712 ,
const EType enum_opt_values[]
713 ,
const char* enum_opt_names[]
714 ,
const char documentation[]
729 ,reinterpret_cast<int*>(enum_option_val)
731 ,reinterpret_cast<const int*>(enum_opt_values)
740 std::string CommandLineProcessor::opt_type_str( EOptType opt_type )
const
756 case OPT_LONG_LONG_INT:
757 str =
"long long int";
778 #endif // TEUCHOS_COMMAND_LINE_PROCESSOR_HPP