QMCPACK
ParseCommand.h
Go to the documentation of this file.
1 //////////////////////////////////////////////////////////////////////////////////////
2 // This file is distributed under the University of Illinois/NCSA Open Source License.
3 // See LICENSE file in top directory for details.
4 //
5 // Copyright (c) 2016 Jeongnim Kim and QMCPACK developers.
6 //
7 // File developed by: Paul R. C. Kent, kentpr@ornl.gov, Oak Ridge National Laboratory
8 // Mark A. Berrill, berrillma@ornl.gov, Oak Ridge National Laboratory
9 //
10 // File created by: Paul R. C. Kent, kentpr@ornl.gov, Oak Ridge National Laboratory
11 //////////////////////////////////////////////////////////////////////////////////////
12 
13 
14 #ifndef PARSE_COMMAND_H
15 #define PARSE_COMMAND_H
16 
17 #include <map>
18 #include <string>
19 #include <iostream>
20 #include <assert.h>
21 #include <list>
22 #include <vector>
23 
24 
26 
28 {
29 private:
30  std::string Name;
31  std::vector<std::string> Args;
32  bool Found;
34  friend class CommandLineParserClass;
35 
36 public:
37  ///////////////
38  // Accessors //
39  ///////////////
40  std::string GetName() { return Name; }
41 
42  std::string GetArg()
43  {
44  assert(NumArgsNeeded == 1);
45  return Args[0];
46  }
47 
48  std::string GetArg(int arg) { return Args[arg]; }
49 
50  void SetArg(std::string arg)
51  {
52  assert(Args.size() < NumArgsNeeded);
53  Args.push_back(arg);
54  }
55 
56  //////////////////
57  // Constructors //
58  //////////////////
59  ParamClass(std::string name, int numArgs)
60  {
61  Name = name;
62  NumArgsNeeded = numArgs;
63  Found = false;
64  }
65 
66  ParamClass(std::string name, bool needsArg)
67  {
68  Name = name;
69  NumArgsNeeded = needsArg ? 1 : 0;
70  Found = false;
71  }
72 
74  {
75  NumArgsNeeded = 0;
76  Found = false;
77  }
78 };
79 
81 {
82 private:
83  std::map<std::string, ParamClass> ArgMap;
84  std::vector<std::string> Files;
85 
86 public:
87  bool Parse(int argc, char** argv);
88  inline bool Found(std::string name) { return ArgMap[name].Found; }
89  inline std::string GetArg(std::string name) { return ArgMap[name].GetArg(); }
90  inline std::string GetArg(std::string name, int num) { return ArgMap[name].GetArg(num); }
91  inline int NumFiles() { return Files.size(); }
92  std::string GetFile(int i) { return Files[i]; }
93 
94  CommandLineParserClass(std::list<ParamClass>& argList);
95 };
96 
97 
98 #endif
std::vector< std::string > Args
Definition: ParseCommand.h:31
ParamClass(std::string name, bool needsArg)
Definition: ParseCommand.h:66
bool Found(std::string name)
Definition: ParseCommand.h:88
std::string Name
Definition: ParseCommand.h:30
std::string GetFile(int i)
Definition: ParseCommand.h:92
std::string GetArg(std::string name, int num)
Definition: ParseCommand.h:90
std::string GetArg(std::string name)
Definition: ParseCommand.h:89
std::string GetArg(int arg)
Definition: ParseCommand.h:48
ParamClass(std::string name, int numArgs)
Definition: ParseCommand.h:59
CommandLineParserClass(std::list< ParamClass > &argList)
bool Parse(int argc, char **argv)
std::map< std::string, ParamClass > ArgMap
Definition: ParseCommand.h:83
std::string GetArg()
Definition: ParseCommand.h:42
void SetArg(std::string arg)
Definition: ParseCommand.h:50
int NumArgsNeeded
Definition: ParseCommand.h:33
std::vector< std::string > Files
Definition: ParseCommand.h:84
std::string GetName()
Definition: ParseCommand.h:40