retdec
arg_handler.h
Go to the documentation of this file.
1 
7 #ifndef UNPACKERTOOL_ARG_HANDLER_H
8 #define UNPACKERTOOL_ARG_HANDLER_H
9 
10 #include <map>
11 #include <string>
12 #include <vector>
13 
14 namespace retdec {
15 namespace unpackertool {
16 
24 struct ArgData
25 {
26  ArgData() : used(false), input() {}
27  ArgData(const ArgData& data) : used(data.used), input(data.input) {}
28 
34  operator bool() const
35  {
36  return used;
37  }
38 
39  bool used;
40  std::string input;
41 };
42 
52 struct ArgInfo
53 {
54  ArgInfo(char opt, const std::string& longOpt, bool hasInput)
55  : _opt(opt), _longOpt(longOpt), _hasInput(hasInput), _data(new ArgData)
56  {}
57 
59  {
60  delete _data;
61  }
62 
63  char _opt;
64  std::string _longOpt;
65  bool _hasInput;
67 };
68 
77 {
78  using ArgMap = std::map<std::string, ArgInfo*>;
79 
80 public:
81  ArgHandler(const std::string& runString);
82  ~ArgHandler();
83 
84  void setRunString(const std::string& scriptName);
85  const std::string& getRunString() const;
86 
87  void setHelp(const std::string& helpString);
88  const std::string& getHelp() const;
89 
90  bool parse(int argc, char** argv);
91  std::uint32_t count() const;
92 
93  bool registerArg(char opt, const std::string& longOpt, bool hasInput = false);
94  const ArgData* operator [](char opt) const;
95  const ArgData* operator [](const std::string& opt) const;
96  const std::vector<std::string>& getRawInputs() const;
97 
98  friend std::ostream& operator <<(std::ostream& out, const ArgHandler& handler);
99 
100 private:
104 
105  void resetArgData();
106 
108  std::string _runString;
109  std::string _helpString;
110  std::uint32_t _count;
111  std::vector<std::string> _rawInputs;
112 };
113 
114 } // namespace unpackertool
115 } // namespace retdec
116 
117 #endif
Command-line argument handler.
Definition: arg_handler.h:77
const std::string & getRunString() const
Definition: arg_handler.cpp:53
const ArgData * operator[](char opt) const
Definition: arg_handler.cpp:103
const std::vector< std::string > & getRawInputs() const
Definition: arg_handler.cpp:131
bool parse(int argc, char **argv)
Definition: arg_handler.cpp:164
void setHelp(const std::string &helpString)
Definition: arg_handler.cpp:141
std::map< std::string, ArgInfo * > ArgMap
Mapping of option to ArgInfo.
Definition: arg_handler.h:78
friend std::ostream & operator<<(std::ostream &out, const ArgHandler &handler)
Definition: arg_handler.cpp:266
ArgMap _argMap
Registered arguments.
Definition: arg_handler.h:107
std::string _runString
Script name printed in help.
Definition: arg_handler.h:108
ArgHandler & operator=(const ArgHandler &)
const std::string & getHelp() const
Definition: arg_handler.cpp:151
std::uint32_t _count
Number of used arguments.
Definition: arg_handler.h:110
std::string _helpString
Help text printed in help.
Definition: arg_handler.h:109
void resetArgData()
Definition: arg_handler.cpp:246
~ArgHandler()
Definition: arg_handler.cpp:27
std::vector< std::string > _rawInputs
Holds the non-argument raw input.
Definition: arg_handler.h:111
bool registerArg(char opt, const std::string &longOpt, bool hasInput=false)
Definition: arg_handler.cpp:68
ArgHandler(const ArgHandler &)
std::uint32_t count() const
Definition: arg_handler.cpp:238
void setRunString(const std::string &scriptName)
Definition: arg_handler.cpp:43
Definition: archive_wrapper.h:19
Argument data for command-line arguments.
Definition: arg_handler.h:25
std::string input
Input text of argument.
Definition: arg_handler.h:40
bool used
Argument usage.
Definition: arg_handler.h:39
ArgData()
Constructor.
Definition: arg_handler.h:26
ArgData(const ArgData &data)
Copy constructor.
Definition: arg_handler.h:27
Metadata for commend-line arguments.
Definition: arg_handler.h:53
ArgData * _data
Data.
Definition: arg_handler.h:66
std::string _longOpt
Long option.
Definition: arg_handler.h:64
char _opt
Short option.
Definition: arg_handler.h:63
ArgInfo(char opt, const std::string &longOpt, bool hasInput)
Definition: arg_handler.h:54
bool _hasInput
Has an input.
Definition: arg_handler.h:65
~ArgInfo()
Definition: arg_handler.h:58