60 inline int my_max( 
int a, 
int b ) { 
return a > b ? a : b; }
 
   63 std::string remove_quotes( 
const std::string& str )
 
   67   return str.substr(1,str.size()-2);
 
   71 std::string add_quotes( 
const std::string& str )
 
   75   return "\"" + str + 
"\"";
 
   95   bool   throwExceptions_in
 
   96   ,
bool  recogniseAllOptions_in
 
   97   ,
bool  addOutputSetupOptions_in
 
   99   :throwExceptions_(throwExceptions_in)
 
  100   ,recogniseAllOptions_(recogniseAllOptions_in)
 
  101   ,addOutputSetupOptions_(addOutputSetupOptions_in)
 
  102   ,output_all_front_matter_(output_all_front_matter_default_)
 
  103   ,output_show_line_prefix_(output_show_line_prefix_default_)
 
  104   ,output_show_tab_count_(output_show_tab_count_default_)
 
  105   ,output_show_proc_rank_(output_show_proc_rank_default_)
 
  106   ,output_to_root_rank_only_(output_to_root_rank_only_default_)
 
  107   ,print_rcpnode_statistics_on_exit_(print_rcpnode_statistics_on_exit_default_)
 
  108   ,show_timer_summary_on_exit_(show_timer_summary_on_exit_default_)
 
  109   ,printed_timer_summary_(false)
 
  110   ,added_extra_output_setup_options_(false)
 
  111   ,in_add_extra_output_setup_options_(false)
 
  131   const char     option_true[]
 
  132   ,
const char    option_false[]
 
  134   ,
const char    documentation[]
 
  145       std::string(documentation?documentation:
""), 
any(option_val))
 
  151   const char     option_name[]
 
  153   ,
const char    documentation[]
 
  162     opt_doc_t(
OPT_INT, option_name, 
"", std::string(documentation?documentation:
""),
 
  169   const char     option_name[]
 
  170   ,
long int      *option_val
 
  171   ,
const char    documentation[]
 
  187   const char     option_name[]
 
  189   ,
const char    documentation[]
 
  204   const char     option_name[]
 
  205   ,
long long int *option_val
 
  206   ,
const char    documentation[]
 
  221   const char     option_name[]
 
  223   ,
const char    documentation[]
 
  238   const char     option_name[]
 
  240   ,
const char    documentation[]
 
  255   const char     option_name[]
 
  256   ,std::string   *option_val
 
  257   ,
const char    documentation[]
 
  279   ,std::ostream   *errout
 
  283   std::string        opt_name;
 
  284   std::string        opt_val_str;
 
  285   const std::string  echo_cl_opt = 
"echo-command-line";
 
  286   const std::string  help_opt = 
"help";
 
  287   const std::string  pause_opt = 
"pause-for-debugging";
 
  292   for( 
int i = 1; i < argc; ++i ) {
 
  293     bool gov_return = 
get_opt_val( argv[i], &opt_name, &opt_val_str );
 
  294     if( gov_return && opt_name == help_opt ) {
 
  300   for( 
int i = 1; i < argc; ++i ) {
 
  301     bool gov_return = 
get_opt_val( argv[i], &opt_name, &opt_val_str );
 
  311     if( opt_name == echo_cl_opt ) {
 
  312       if(errout && procRank == 0) {
 
  313         *errout << 
"\nEchoing the command-line:\n\n";
 
  314         for( 
int j = 0; j < argc; ++j )
 
  315           *errout << argv[j] << 
" ";
 
  320     if( opt_name == pause_opt ) {
 
  324       int rank_pid = getpid();
 
  328           std::cerr << 
"Rank " << k << 
" has PID " << pids[k] << std::endl;
 
  331         std::cerr << 
"\nType 0 and press enter to continue : ";
 
  333         std::cin >> dummy_int;
 
  354         *(any_cast<
bool*>(opt_val_val.
opt_val)) = 
true;
 
  357         *(any_cast<
bool*>(opt_val_val.
opt_val)) = 
false;
 
  360         *(any_cast<
int*>(opt_val_val.
opt_val)) = asSafe<int> (opt_val_str);
 
  363         *(any_cast<
long int*>(opt_val_val.
opt_val)) = asSafe<long int> (opt_val_str);
 
  366         *(any_cast<
size_t *>(opt_val_val.
opt_val)) = asSafe<size_t> (opt_val_str);
 
  369         *(any_cast<
long long int*>(opt_val_val.
opt_val)) = asSafe<long long int> (opt_val_str);
 
  372         *(any_cast<
double*>(opt_val_val.
opt_val)) = asSafe<double> (opt_val_str);
 
  375         *(any_cast<
float*>(opt_val_val.
opt_val)) = asSafe<float> (opt_val_str);
 
  378         *(any_cast<std::string*>(opt_val_val.
opt_val)) = remove_quotes(opt_val_str);
 
  382             remove_quotes(opt_val_str), errout ) )
 
  400       const std::string     &opt_val_name = (*itr).first;
 
  401 #define CLP_ERR_MSG \ 
  402       "Error, the option --"<<opt_val_name<<" was required but was not set!" 
  404         *errout << std::endl << argv[0] << 
" : " << 
CLP_ERR_MSG << std::endl;
 
  433   std::ostream &out )
 const 
  441     const int opt_type_w = 14;
 
  442     const char spc_chars[] = 
"  ";
 
  446     options_documentation_list_t::const_iterator itr;
 
  453       opt_name_w = my_max(opt_name_w,static_cast<int>(itr->opt_name.length()));
 
  455         opt_name_w = my_max(opt_name_w,static_cast<int>(itr->opt_name_false.length()));
 
  461       << 
"Usage: " << program_name << 
" [options]\n" 
  462       << spc_chars << 
"options:\n" 
  465 #ifdef HAVE_STD_IOS_BASE_FMTFLAGS 
  466       << std::left << setw(opt_name_w) << 
"help" 
  467       << std::left << setw(opt_type_w) << 
" " 
  469       << std::setiosflags(std::ios::left) << setw(opt_name_w) << 
"help" 
  470       << std::setiosflags(std::ios::left) << setw(opt_type_w) << 
" " 
  472       << 
"Prints this help message" 
  476 #ifdef HAVE_STD_IOS_BASE_FMTFLAGS 
  477       << std::left << setw(opt_name_w) << 
"pause-for-debugging" 
  478       << std::left << setw(opt_type_w) << 
" " 
  480       << std::setiosflags(std::ios::left) << setw(opt_name_w) << 
"pause-for-debugging" 
  481       << std::setiosflags(std::ios::left) << setw(opt_type_w) << 
" " 
  483       << 
"Pauses for user input to allow attaching a debugger" 
  487 #ifdef HAVE_STD_IOS_BASE_FMTFLAGS 
  488       << std::left << setw(opt_name_w) << 
"echo-command-line" 
  489       << std::left << setw(opt_type_w) << 
" " 
  491       << std::setiosflags(std::ios::left) << setw(opt_name_w) << 
"echo-command-line" 
  492       << std::setiosflags(std::ios::left) << setw(opt_type_w) << 
" " 
  494       << 
"Echo the command-line but continue as normal" 
  505 #ifdef HAVE_STD_IOS_BASE_FMTFLAGS 
  506         << std::left << setw(opt_name_w) << itr->opt_name
 
  507         << std::left << setw(opt_type_w) << 
opt_type_str(itr->opt_type)
 
  509         << std::setiosflags(std::ios::left) << setw(opt_name_w) << itr->opt_name
 
  510         << std::setiosflags(std::ios::left) << setw(opt_type_w) << 
opt_type_str(itr->opt_type)
 
  512         << ( itr->documentation.length() ? itr->documentation.c_str() : 
"No documentation" )
 
  519           << setw(opt_name_w) << 
"" 
  520           << setw(opt_type_w) << 
"";
 
  530           << setw(opt_name_w) << itr->opt_name_false;
 
  536           << setw(opt_name_w) << 
" ";
 
  539         << setw(opt_type_w) << 
" " 
  541       switch( itr->opt_type ) {
 
  543           out << 
"--" << ( (*(any_cast<
bool*>(itr->default_val))) ?
 
  544             itr->opt_name : itr->opt_name_false );
 
  554           out << 
"--" << itr->opt_name;
 
  559       switch( itr->opt_type ) {
 
  563           out << 
"=" << (*(any_cast<
int*>(itr->default_val)));
 
  566           out << 
"=" << (*(any_cast<
long int*>(itr->default_val)));
 
  569           out << 
"=" << (*(any_cast<
size_t*>(itr->default_val)));
 
  572           out << 
"=" << (*(any_cast<
long long int*>(itr->default_val)));
 
  575           out <<  
"=" << (*(any_cast<
double*>(itr->default_val)));
 
  578           out <<  
"=" << (*(any_cast<
float*>(itr->default_val)));
 
  581           out <<  
"=" << add_quotes(*(any_cast<std::string*>(itr->default_val)));
 
  584           out <<  
"=" << add_quotes(
 
  593       out << 
"\nDETAILED DOCUMENTATION:\n\n" << 
doc_string_ << std::endl << std::endl;
 
  608       out = rcpFromPtr(out_inout);
 
  643     ,
"Set if all front matter is printed to the default FancyOStream or not" 
  647     ,
"Set if the line prefix matter is printed to the default FancyOStream or not" 
  651     ,
"Set if the tab count is printed to the default FancyOStream or not" 
  655     ,
"Set if the processor rank is printed to the default FancyOStream or not" 
  659     ,
"Set which processor (the root) gets the output.  If < 0, then all processors get output." 
  662     "print-rcpnode-statistics-on-exit", 
"no-print-rcpnode-statistics-on-exit",
 
  664     "Set if the RCPNode usage statistics will be printed on exit or not.  Warning," 
  665     " this prints to std::cerr or every process so do not turn this on for very large" 
  671       "If true, then Teuchos::TimeMonitor::summarize() is called in" 
  672       " CommandLineProcessor's destructor (usually at the end of main)." 
  682   const char    enum_option_name[]
 
  683   ,
int          *enum_option_val
 
  684   ,
const int    num_enum_opt_values
 
  685   ,
const int    enum_opt_values[]
 
  686   ,
const char*  enum_opt_names[]
 
  687   ,
const char   documentation[]
 
  699     enum_opt_data_t(enum_option_val,num_enum_opt_values,enum_opt_values,enum_opt_names)
 
  706       std::string(documentation?documentation:
""), 
any(opt_id))
 
  714   ,
const std::string   &enum_opt_name
 
  716   ,
const std::string   &enum_str_val
 
  717   ,std::ostream        *errout
 
  722   std::vector<std::string>::const_iterator
 
  725     itr       =  std::find( itr_begin, itr_end, enum_str_val );
 
  726   if( itr == itr_end ) {
 
  727     const int j = argv_i;
 
  728 #define CLP_ERR_MSG \ 
  729       "Error, the value \"" << enum_str_val << "\" for the " \ 
  730       << j<<(j==1?"st":(j==2?"nd":(j==3?"rd":"th"))) << " option --" \ 
  731       << enum_opt_name << " was not recognized (use --help)!" 
  733       *errout << std::endl << argv[0] << 
" : " << 
CLP_ERR_MSG << std::endl;
 
  742   const int enum_opt_val_index = 
static_cast<int>(itr - itr_begin);
 
  755   typedef std::vector<std::string>::const_iterator itr_t;
 
  756   out << 
"Valid options:";
 
  764     out << 
" " << add_quotes(*itr);
 
  771   const std::string    &enum_name
 
  773   ,std::ostream        *errout
 
  787   const std::string           &enum_opt_name
 
  790   ,std::ostream               *errout
 
  793   std::vector<int>::const_iterator
 
  796     itr       =  std::find( itr_begin, itr_end, opt_value );
 
  797   if( itr == itr_end ) {
 
  798 #define CLP_ERR_MSG \ 
  799       ( recogniseAllOptions() ? "Error" : "Warning" ) \ 
  800       << ", option --" << enum_opt_name << " was given an invalid " \ 
  801       "initial option value of " << opt_value << "!" 
  808   return static_cast<int>(itr - itr_begin);
 
  814   ,std::string   *opt_name
 
  815   ,std::string   *opt_val_str
 
  818   const int len = 
static_cast<int>(std::strlen(str));
 
  821   if( str[0] != 
'-' || str[1] != 
'-' )
 
  825   for( equ_i = 2; equ_i < len && str[equ_i] != 
'='; ++equ_i );
 
  827   opt_name->assign( str + 2, equ_i-2 );
 
  833     opt_val_str->assign( str + equ_i + 1, len - equ_i - 1 );
 
  841   ,std::ostream   *errout
 
  844   const int j = argv_i;
 
  845 #define CLP_ERR_MSG \ 
  846     ( recogniseAllOptions() ? "Error" : "Warning" ) \ 
  847     << ", the " << j<<(j==1?"st":(j==2?"nd":(j==3?"rd":"th"))) \ 
  848     << " option \'" << argv[argv_i] << "\' was not recognized (use --help)!" 
  850     *errout << std::endl << argv[0] << 
" : " << 
CLP_ERR_MSG << std::endl;
 
  878   return timeMonitorSurrogate;
 
bool output_show_proc_rank_
static const bool output_all_front_matter_default_
static int getRank()
The rank of the calling process in MPI_COMM_WORLD. 
Thrown if –help was specified and throwExceptions==true. 
int output_to_root_rank_only_
void setEnumOption(const char enum_option_name[], int *enum_option_val, const int num_enum_opt_values, const int enum_opt_values[], const char *enum_opt_names[], const char documentation[], const bool required)
static int getNProc()
The number of processes in MPI_COMM_WORLD. 
static const bool show_timer_summary_on_exit_default_
void print_enum_opt_names(const int enum_id, std::ostream &out) const 
void printHelpMessage(const char program_name[], std::ostream &out) const 
Print the help message. 
bool get_opt_val(const char str[], std::string *opt_name, std::string *opt_val_str) const 
bool nonnull(const std::shared_ptr< T > &p)
Returns true if p.get()!=NULL. 
bool throwExceptions() const 
Returns true if an std::exception is thrown, there is a parse error, or help is printed. 
bool in_add_extra_output_setup_options_
#define TEUCHOS_TEST_FOR_EXCEPTION(throw_exception_test, Exception, msg)
Macro for throwing an exception with breakpointing to ease debugging. 
static void setPrintRCPNodeStatisticsOnExit(bool printRCPNodeStatisticsOnExit)
Set if RCPNode usage statistics will be printed when the program ends or not. 
T * get() const 
Get the raw C++ pointer to the underlying object. 
CommandLineProcessor(bool throwExceptions=true, bool recogniseAllOptions=true, bool addOutputSetupOptions=false)
Default Constructor. 
Modified boost::any class, which is a container for a templated value. 
void print_bad_opt(int argv_i, char *argv[], std::ostream *errout) const 
enum_opt_data_list_t enum_opt_data_list_
~CommandLineProcessor()
Destructor. 
static void setTimeMonitorSurrogate(const RCP< TimeMonitorSurrogate > &timeMonitorSurrogate)
Thrown if an unrecognized option was found and throwExceptions==true. 
options_documentation_list_t options_documentation_list_
static const bool output_show_tab_count_default_
static const bool output_show_proc_rank_default_
static const bool output_show_line_prefix_default_
void setOption(const char option_true[], const char option_false[], bool *option_val, const char documentation[]=NULL)
Set a boolean option. 
static const int output_to_root_rank_only_default_
std::string opt_type_str(EOptType) const 
static RCP< FancyOStream > getDefaultOStream()
Get the default output stream object. 
bool output_show_tab_count_
bool output_all_front_matter_
EParseCommandLineReturn parse(int argc, char *argv[], std::ostream *errout=&std::cerr) const 
Parse a command line. 
static RCP< TimeMonitorSurrogate > getTimeMonitorSurrogate()
void resize(size_type new_size, const value_type &x=value_type())
static const bool print_rcpnode_statistics_on_exit_default_
std::vector< std::string > enum_opt_names
EParseCommandLineReturn
Return value for CommandLineProcessor::parse(). Note: These enums are all given non-negative values s...
Templated array class derived from the STL std::vector. 
bool printed_timer_summary_
options_list_t options_list_
bool addOutputSetupOptions_
A MPI utilities class, providing methods for initializing, finalizing, and querying the global MPI se...
bool show_timer_summary_on_exit_
Basic command line parser for input from (argc,argv[]) 
void setDocString(const char doc_string[])
Set a documentation sting for the entire program printed when –help is specified. ...
bool print_rcpnode_statistics_on_exit_
void add_extra_output_setup_options() const 
std::string enum_opt_default_val_name(const std::string &enum_name, const int enum_id, std::ostream *errout) const 
static void barrier()
Call MPI_Barrier() on MPI_COMM_WORLD. 
bool recogniseAllOptions() const 
Returns true if all options must be recognized by the parser. 
int find_enum_opt_index(const std::string &enum_opt_name, const int opt_value, const enum_opt_data_t &enum_data, std::ostream *errout) const 
bool output_show_line_prefix_
static void allGather(int localVal, const ArrayView< int > &allVals)
Global all-to-all of a set of integers across processes. 
Smart reference counting pointer class for automatic garbage collection. 
void printFinalTimerSummary(const Ptr< std::ostream > &out=null)
Call to print timers so that they don't get printed in the destructor. 
bool set_enum_value(int argv_i, char *argv[], const std::string &enum_opt_name, const int enum_id, const std::string &enum_str_val, std::ostream *errout) const 
static RCP< TimeMonitorSurrogate > & getRawTimeMonitorSurrogate()
bool added_extra_output_setup_options_
Definition of Teuchos::as, for conversions between types. 
Thrown if a parse std::exception occurs and throwExceptions==true. 
Class that helps parse command line input arguments from (argc,argv[]) and set options. 
std::vector< int > enum_opt_values
#define TEUCHOS_TEST_FOR_EXCEPT(throw_exception_test)
This macro is designed to be a short version of TEUCHOS_TEST_FOR_EXCEPTION() that is easier to call...
Simple wrapper class for raw pointers to single objects where no persisting relationship exists...