AJA NTV2 SDK  18.0.0.2717
NTV2 SDK 18.0.0.2717
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 SetFlags(int flags);
192 
196  void Clear();
197 
203  void Reset(bool clearAll=false);
204 
208  void Dump();
209 
217  bool HaveOption(const std::string &name) const;
218 
226  bool HavePositionalArg(const std::string &name) const;
227 
233  AJAStringList PositionalArgs() const;
234 
243  bool OptionByName(const std::string &name, AJACommandLineOption &opt) const;
244 
252  bool AddSubParser(AJACommandLineParser *sp);
253 
261  bool Parse(const AJAStringList &args);
262 
271  bool Parse(int argc, const char *argv[]);
272 
281  bool Parse(int argc, char *argv[]);
282 
290  bool IsSet(const std::string &name) const;
291 
300  AJAVariant Value(const std::string &name, size_t index = 0) const;
301 
309  AJAVariantList Values(const std::string &name) const;
310 
319  std::string ValueString(const std::string &name, size_t index = 0) const;
320 
328  AJAStringList ValueStrings(const std::string &name) const;
329 
339  bool AddOption(const AJACommandLineOption &option);
340 
350  bool AddOptions(const std::vector<AJACommandLineOption> &options);
351 
359  bool AddHelpOption(bool useShortName=false);
360 
368  bool AddUsageOption(bool useShortName=false);
369 
375  std::string Name() const;
376 
382  void SetUsageText(const std::string &usageText);
383 
389  std::string UsageText();
390 
396  void SetHelpText(const std::string &helpText);
397 
403  std::string HelpText();
404 
408  std::string CommandName();
409 
410 private:
411  static bool hasOptionPrefix(const std::string &name);
412  static bool hasAssignmentOperator(const std::string &arg);
413 
414  void init();
415 
416  std::string generateHelpText() const;
417  std::string generateUsageText() const;
418 
419  bool setOptionValue(const std::string &name, const std::string &value);
420  bool setOption(const std::string &name, bool isSet = true);
421 
422  int _flags;
423  std::string _name;
424  std::string _commandName;
425  std::string _desc;
426  std::string _descExtra;
427  std::string _usageText;
428  std::string _helpText;
429  AJACommandLineOptionList _options;
430  AJAStringList _positionalArgs;
431  SubParserMap _subParsers;
432 };
433 
435 
436 #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:434
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