PlasCom2  1.0
XPACC Multi-physics simluation application
ComLine.H
Go to the documentation of this file.
1 #ifndef _COMLINE_H_
10 #define _COMLINE_H_
11 #include <string>
12 #include <vector>
13 #include <map>
14 #include <istream>
15 #include <ostream>
16 #include <utility>
17 #include <sstream>
18 
19 
20 namespace ix {
21 
22  namespace util {
23 
62  class ComLineObject : public std::vector< std::pair<char,std::string> >
63  {
64  friend std::ostream &operator<<(std::ostream &Out,const ComLineObject &cl);
65  friend std::istream &operator>>(std::istream &In,ComLineObject &cl);
66  protected:
73  std::string _description;
75  std::string _notes;
77  std::string _program_name;
79  std::string _line;
81  std::vector<std::string> _error_messages;
83  std::vector<std::string> _nonops;
85  std::map<char,std::string> _options;
87  std::map<char,std::string> _help;
89  std::map<char,std::string> _argname;
91  std::map<char,int> _type;
93  std::vector<std::pair<std::string,int> > _args;
95  std::map<std::string,std::string> _arghelp;
97  std::vector<std::string> _toks;
98  public:
111  ComLineObject(const char *args[])
112  {
113  Record(args);
114  };
122  void Copy(ComLineObject &incom);
126  int ProcessCommandLine(const char *args[])
127  {
128  Record(args);
129  return(ProcessOptions());
130  };
134  std::string GetRawComLine() const { return (_program_name+std::string(" ")+_line);};
138  void SetRawComLine(const std::string &incl);
146  int ProcessOptions();
153  void Record(const char *args[]);
163  void AddOption(char s,const std::string &l,int = 0);
173  void AddOption(char s,const std::string &l,int,const std::string argname);
183  void AddArgument(const std::string &a,int reqd = 0)
184  {
185  //_args.push_back(std::make_pair<std::string,int>(a,reqd));
186  _args.push_back(std::make_pair(a,reqd));
187  };
197  void AddArgHelp(const std::string &a,const std::string &help)
198  {
199  _arghelp[a] = help;
200  };
207  void SetArgName(const std::string opstr,const std::string argname)
208  {
209  _argname[GetShort(opstr)] = argname;
210  };
217  void SetArgName(char s,const std::string &argname)
218  {
219  _argname[s] = argname;
220  };
227  void AddHelp(char s,const std::string &help){ _help[s] = help;};
234  void AddHelp(const std::string &l,const std::string &help)
235  {
236  _help[GetShort(l)] = help;
237  };
244  std::string GetOpStringByType(int mintype,int maxtype);
248  std::string GetHelp(char s){return(_help[s]);};
252  std::string GetHelp(const std::string &l){return(_help[GetShort(l)]);};
256  char GetShort(const std::string &l);
260  std::string GetLong(const char &s);
270  std::string ShortUsage();
283  std::string LongUsage();
291  std::string GetOption(const char &s){return(_options[s]);};
299  std::string GetOption(const std::string &l){return(_options[GetShort(l)]);};
306  std::string ErrorReport();
310  std::string ProgramName() const { return _program_name;};
314  std::vector<std::string> GetArgs() const { return _nonops;};
318  void SetDescription(const std::string &desc){ _description.assign(desc); };
322  void SetNotes(const std::string &notes){ _notes.assign(notes); };
326  void WriteRC(std::ostream &Ostr) const;
330  void ReadRC(const std::string &RCString);
334  template<typename NumType>
335  void ProcessRange(NumType &t1,NumType &t2,const std::string stinter)
336  {
337  if(!stinter.empty()){
338  std::string::size_type x = stinter.find(":");
339  std::string t1s = stinter;
340  std::string t2s = stinter;
341  if(x != std::string::npos){
342  t1s = stinter.substr(0,x);
343  t2s = stinter.substr(x+1);
344  if(!t2s.empty()){
345  std::istringstream Istr(t2s);
346  Istr >> t2;
347  }
348  }
349  else {
350  t1s.erase();
351  }
352  if(!t1s.empty()){
353  std::istringstream Istr(t1s);
354  Istr >> t1;
355  }
356  if(!t2s.empty()){
357  std::istringstream Istr(t2s);
358  Istr >> t2;
359  }
360 
361  }
362  };
366  template<typename NumType>
367  void ResolveOption(NumType &t2,const std::string stinter)
368  {
369  if(stinter == ".true." || stinter == ".TRUE."){
370  t2 = 1;
371  return;
372  }
373  if(stinter == ".false." || stinter == ".FALSE."){
374  t2 = 0;
375  return;
376  }
377  if(!stinter.empty()){
378  std::istringstream Istr(stinter);
379  Istr >> t2;
380  }
381  };
385  virtual void Initialize(void){};
389  virtual void UserInitialize(void){};
390 
391  virtual ~ComLineObject(){};
392  };
393  };
394 };
395 #endif
396 
397 
void ReadRC(const std::string &RCString)
Read a config from RC string.
Definition: ComLine.C:482
int ProcessOptions()
Processes all command line tokens.
Definition: ComLine.C:330
std::string ErrorReport()
Error reporting.
Definition: ComLine.C:473
std::string GetOption(const char &s)
Get the value of an option.
Definition: ComLine.H:291
std::string GetLong(const char &s)
Obtain the long word option from the short char version.
Definition: ComLine.C:221
void ProcessRange(NumType &t1, NumType &t2, const std::string stinter)
Process a range in the format "t1:t2".
Definition: ComLine.H:335
std::string ProgramName() const
Program name access.
Definition: ComLine.H:310
std::vector< std::pair< std::string, int > > _args
application arguments;
Definition: ComLine.H:93
std::map< char, int > _type
stores the type of option
Definition: ComLine.H:91
std::string GetHelp(const std::string &l)
Obtain the usage string for an option.
Definition: ComLine.H:252
void SetArgName(const std::string opstr, const std::string argname)
Specify name of an option argument.
Definition: ComLine.H:207
std::vector< std::string > _error_messages
stores error messages
Definition: ComLine.H:81
void Copy(ComLineObject &incom)
Copy method.
Definition: ComLine.C:128
virtual void UserInitialize(void)
virtual function for program specific Initialization.
Definition: ComLine.H:389
std::map< std::string, std::string > _arghelp
help string for args
Definition: ComLine.H:95
std::string GetOpStringByType(int mintype, int maxtype)
Obtains option strings by type.
Definition: ComLine.C:232
ComLineObject(const char *args[])
Constructor.
Definition: ComLine.H:111
void SetArgName(char s, const std::string &argname)
Specify name of an option argument.
Definition: ComLine.H:217
std::string _line
unformatted command line
Definition: ComLine.H:79
Defines MPI-specific parallel global and program classes.
std::map< char, std::string > _argname
stores a name for arguments
Definition: ComLine.H:89
std::map< char, std::string > _help
stores the help string for each op
Definition: ComLine.H:87
std::string GetOption(const std::string &l)
Get the value of an option.
Definition: ComLine.H:299
int ProcessCommandLine(const char *args[])
One fell swoop processing of command line.
Definition: ComLine.H:126
void const size_t const size_t const size_t const double const double * x
void AddHelp(const std::string &l, const std::string &help)
Specify usage for an option.
Definition: ComLine.H:234
std::vector< std::string > GetArgs() const
Argument access.
Definition: ComLine.H:314
std::string _description
application description.
Definition: ComLine.H:73
void ResolveOption(NumType &t2, const std::string stinter)
Resolve an option (i.e.
Definition: ComLine.H:367
void Record(const char *args[])
Minimal recording of command line.
Definition: ComLine.C:316
friend std::ostream & operator<<(std::ostream &Out, const ComLineObject &cl)
Definition: ComLine.C:86
void SetRawComLine(const std::string &incl)
Raw Command Line Access.
Definition: ComLine.C:462
std::string _program_name
the name of the program
Definition: ComLine.H:77
std::string GetHelp(char s)
Obtain the usage string for an option.
Definition: ComLine.H:248
void SetDescription(const std::string &desc)
Set description string.
Definition: ComLine.H:318
std::vector< std::string > _nonops
stores non-option arguments
Definition: ComLine.H:83
std::string GetRawComLine() const
Raw Command Line Access.
Definition: ComLine.H:134
void AddOption(char s, const std::string &l, int=0)
User interface to describe simple option.
Definition: ComLine.C:295
void size_t int size_t int size_t int int int int double int int double double *void size_t int size_t int int int int int double int size_t size_t size_t double double *void size_t int size_t int size_t size_t int double int double double *void size_t size_t size_t double * a
std::vector< std::string > _toks
commandline tokens
Definition: ComLine.H:97
friend std::istream & operator>>(std::istream &In, ComLineObject &cl)
Definition: ComLine.C:14
std::map< char, std::string > _options
stores the value of each option
Definition: ComLine.H:85
std::string LongUsage()
Generate long usage string.
Definition: ComLine.C:188
virtual void Initialize(void)
virtual function for program specific Initialization.
Definition: ComLine.H:385
void WriteRC(std::ostream &Ostr) const
Write an RC string that can be used for config.
Definition: ComLine.C:481
void SetNotes(const std::string &notes)
Set notes string.
Definition: ComLine.H:322
Command line processing.
Definition: ComLine.H:62
void AddArgument(const std::string &a, int reqd=0)
User interface to describe an application argument.
Definition: ComLine.H:183
std::string _notes
Notes to be displayed at the end of LongUsage().
Definition: ComLine.H:75
char GetShort(const std::string &l)
Obtain the short one char option from the long word version.
Definition: ComLine.C:284
ComLineObject()
Default constructor.
Definition: ComLine.H:102
void AddHelp(char s, const std::string &help)
Specify usage for an option.
Definition: ComLine.H:227
void AddArgHelp(const std::string &a, const std::string &help)
Specify the usage info for application argument.
Definition: ComLine.H:197
virtual ~ComLineObject()
Definition: ComLine.H:391
std::string ShortUsage()
Generate short usage string.
Definition: ComLine.C:244