AJA NTV2 SDK  17.6.0.2675
NTV2 SDK 17.6.0.2675
commandline.h
Go to the documentation of this file.
1 /* SPDX-License-Identifier: MIT */
8 #ifndef AJA_COMMANDLINE_H
9 #define AJA_COMMANDLINE_H
10 
11 #include "ajabase/common/export.h"
12 #include "ajabase/common/variant.h"
13 
14 #include <string>
15 #include <map>
16 #include <vector>
17 
18 typedef std::vector<std::string> AJAStringList;
19 typedef AJAStringList::const_iterator AJAStringListConstIter;
20 
21 typedef enum {
25 
30 {
31 public:
33  AJACommandLineOption(const std::string &name,
34  const std::string &desc = "",
35  const std::string &defaultValue = "");
37  const std::string &desc = "",
38  const std::string &defaultValue = "");
39  virtual ~AJACommandLineOption();
40 
46  bool AddName(const std::string &name);
47 
53  AJAStringList Names() const;
54 
62  bool HaveName(const std::string &name) const;
63 
69  std::string Desc() const;
70 
76  void SetDesc(const std::string &desc);
77 
83  std::string ExtraDesc() const;
84 
90  void SetExtraDesc(const std::string &desc);
91 
97  void SetDefaultValue(const std::string &value);
98 
104  std::string DefaultValue() const;
105 
111  void AddValue(const std::string &value);
112 
120  std::string Value(size_t index = 0) const;
121 
127  AJAStringList Values() const;
128 
132  void Reset();
133 
139  bool IsSet() const;
140 
148  void MarkSet(bool isSet = true);
149 
150 private:
151  AJAStringList _names;
152  std::string _desc;
153  std::string _descExtra;
154  AJAStringList _values;
155  std::string _defaultValue;
156  bool _isSet;
157 };
158 
160 
161 typedef std::vector<AJACommandLineOption> AJACommandLineOptionList;
162 typedef AJACommandLineOptionList::const_iterator AJACommandLineOptionListIter;
163 
165 typedef std::map<std::string, AJACommandLineParser *> SubParserMap;
166 typedef SubParserMap::const_iterator SubParserMapConstIter;
167 typedef std::pair<std::string, AJACommandLineParser*> AJASubParserPair;
168 
169 typedef enum {
175 
180 {
181 public:
182  explicit AJACommandLineParser(int flags=0);
183  explicit AJACommandLineParser(const std::string &name, int flags=0);
186  void operator=(const AJACommandLineParser &other);
187 
191  void Clear();
192 
198  void Reset(bool clearAll=false);
199 
203  void Dump();
204 
212  bool HaveOption(const std::string &name) const;
213 
221  bool HavePositionalArg(const std::string &name) const;
222 
228  AJAStringList PositionalArgs() const;
229 
238  bool OptionByName(const std::string &name, AJACommandLineOption &opt) const;
239 
247  bool AddSubParser(AJACommandLineParser *sp);
248 
256  bool Parse(const AJAStringList &args);
257 
266  bool Parse(int argc, const char *argv[]);
267 
276  bool Parse(int argc, char *argv[]);
277 
285  bool IsSet(const std::string &name) const;
286 
295  AJAVariant Value(const std::string &name, size_t index = 0) const;
296 
304  AJAVariantList Values(const std::string &name) const;
305 
314  std::string ValueString(const std::string &name, size_t index = 0) const;
315 
323  AJAStringList ValueStrings(const std::string &name) const;
324 
334  bool AddOption(const AJACommandLineOption &option);
335 
345  bool AddOptions(const std::vector<AJACommandLineOption> &options);
346 
354  bool AddHelpOption(bool useShortName=false);
355 
363  bool AddUsageOption(bool useShortName=false);
364 
370  std::string Name() const;
371 
377  void SetUsageText(const std::string &usageText);
378 
384  std::string UsageText();
385 
391  void SetHelpText(const std::string &helpText);
392 
398  std::string HelpText();
399 
403  std::string CommandName();
404 
405 private:
406  static bool hasOptionPrefix(const std::string &name);
407  static bool hasAssignmentOperator(const std::string &arg);
408 
409  void init();
410 
411  std::string generateHelpText() const;
412  std::string generateUsageText() const;
413 
414  bool setOptionValue(const std::string &name, const std::string &value);
415  bool setOption(const std::string &name, bool isSet = true);
416 
417  int _flags;
418  std::string _name;
419  std::string _commandName;
420  std::string _desc;
421  std::string _descExtra;
422  std::string _usageText;
423  std::string _helpText;
424  AJACommandLineOptionList _options;
425  AJAStringList _positionalArgs;
426  SubParserMap _subParsers;
427 };
428 
430 
431 #endif // AJA_COMMANDLINE_H
SubParserMap
std::map< std::string, AJACommandLineParser * > SubParserMap
Definition: commandline.h:164
AJA_EXPORT
#define AJA_EXPORT
Definition: export.h:34
AJACmdLineParser
AJACommandLineParser AJACmdLineParser
Definition: commandline.h:429
AJAStringList
std::vector< std::string > AJAStringList
Definition: commandline.h:18
AJAVariantList
std::vector< AJAVariant > AJAVariantList
Definition: variant.h:330
AJACommandLineOptionListIter
AJACommandLineOptionList::const_iterator AJACommandLineOptionListIter
Definition: commandline.h:162
AJAStringListConstIter
AJAStringList::const_iterator AJAStringListConstIter
Definition: commandline.h:19
AJACommandLineOption
Definition: commandline.h:29
kNoDefaultUsageOption
@ kNoDefaultUsageOption
Definition: commandline.h:172
AJASubParserPair
std::pair< std::string, AJACommandLineParser * > AJASubParserPair
Definition: commandline.h:167
kOptionSingleDash
@ kOptionSingleDash
Definition: commandline.h:22
kOptionDoubleDash
@ kOptionDoubleDash
Definition: commandline.h:23
AJACommandLineOptionFlags
AJACommandLineOptionFlags
Definition: commandline.h:21
AJACmdLineOption
AJACommandLineOption AJACmdLineOption
Definition: commandline.h:159
AJAVariant
A simple Variant class.
Definition: variant.h:39
AJACommandLineParserFlags
AJACommandLineParserFlags
Definition: commandline.h:169
kShortOptionsAsLong
@ kShortOptionsAsLong
Definition: commandline.h:170
AJACommandLineParser
Definition: commandline.h:179
kNoDefaultHelpOption
@ kNoDefaultHelpOption
Definition: commandline.h:171
variant.h
Declares the AJAVariant class.
kErrorOnUnknownArgs
@ kErrorOnUnknownArgs
Definition: commandline.h:173
SubParserMapConstIter
SubParserMap::const_iterator SubParserMapConstIter
Definition: commandline.h:166
export.h
Declares system-dependent import/export macros and libraries.
AJACommandLineOptionList
std::vector< AJACommandLineOption > AJACommandLineOptionList
Definition: commandline.h:161