AJA NTV2 SDK  17.0.1.1246
NTV2 SDK 17.0.1.1246
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/types.h"
12 #include "ajabase/common/export.h"
13 #include "ajabase/common/variant.h"
14 
15 #include <string>
16 #include <map>
17 #include <vector>
18 
19 typedef std::vector<std::string> AJAStringList;
20 typedef AJAStringList::const_iterator AJAStringListConstIter;
21 
22 typedef enum {
26 
31 {
32 public:
34  AJACommandLineOption(const std::string &name);
35  AJACommandLineOption(const std::string &name,
36  const std::string &desc);
37  AJACommandLineOption(const std::string &name,
38  const std::string &desc,
39  const std::string &defaultValue);
40  AJACommandLineOption(const AJAStringList &names);
42  const std::string &desc);
44  const std::string &desc,
45  const std::string &defaultValue);
46  virtual ~AJACommandLineOption();
47 
53  bool AddName(const std::string &name);
54 
60  AJAStringList GetNames() const;
61 
67  std::string GetDesc() const;
68 
74  void SetDesc(const std::string &desc);
75 
81  std::string GetExtraDesc() const;
82 
88  void SetExtraDesc(const std::string &desc);
89 
95  void SetDefaultValue(const std::string &value);
96 
102  std::string GetDefaultValue() const;
103 
104  void AddValue(const std::string &value);
105  std::string GetValue(size_t index = 0) const;
106  AJAStringList GetValues() const;
107 
108 private:
109  AJAStringList mNames;
110  std::string mDesc;
111  std::string mDescExtra;
112  AJAStringList mValues;
113  std::string mDefaultValue;
114 };
115 
116 typedef std::vector<AJACommandLineOption> AJACommandLineOptionList;
117 typedef AJACommandLineOptionList::const_iterator AJACommandLineOptionListIter;
118 
120 typedef std::map<std::string, AJACommandLineParser *> SubParserMap;
121 typedef SubParserMap::const_iterator SubParserMapConstIter;
122 typedef std::pair<std::string, AJACommandLineParser*> AJASubParserPair;
123 
124 struct OptionEntry {
125  int pos;
126  std::string value;
127 };
128 typedef std::map<std::string, OptionEntry> OptionEntryMap;
129 
130 typedef enum {
133 
138 {
139 public:
140  explicit AJACommandLineParser(int flags=0);
141  explicit AJACommandLineParser(const std::string &name, int flags=0);
144  void operator=(const AJACommandLineParser &other);
145 
146  void Reset(bool clearAll=false);
147  void Dump();
148 
149  bool OptionByName(const std::string &name, AJACommandLineOption &opt) const;
157  bool AddSubParser(AJACommandLineParser *sp);
165  void ParseArgs(const AJAStringList &args);
172  void ParseArgs(int argc, char *argv[]);
180  bool IsSet(const std::string &name) const;
189  AJAVariant Value(const std::string &name, size_t index = 0) const;
197  AJAVariantList Values(const std::string &name) const;
206  std::string ValueString(const std::string &name, size_t index = 0) const;
214  AJAStringList ValueStrings(const std::string &name) const;
224  bool AddOption(const AJACommandLineOption &option);
234  bool AddOptions(const std::vector<AJACommandLineOption> &options);
239  bool AddHelpOption();
245  std::string GetName() const;
251  void SetUsageText(const std::string &usageText);
257  std::string GetUsageText() const;
263  void SetHelpText(const std::string &helpText);
269  std::string GetHelpText() const;
275  std::string GetCommandName();
281  AJAStringList GetKnownOptions();
287  AJAStringList GetUnknownOptions();
288 
289 private:
290  static bool hasOptionPrefix(const std::string &name);
291  bool reverseOptionSearch(AJAStringListConstIter *iter, const AJAStringList &args, const std::string &arg, int prefixSize, AJACommandLineOption &opt);
292  bool parseValue(const std::string &arg, std::string &value);
293  bool parseOptionValue(const std::string &name, const std::string &arg, AJAStringList::const_iterator *iter, AJAStringList::const_iterator end);
294  bool setOptionValue(const std::string &name, const std::string &value);
295  std::string removePrefix(const std::string &name, int &count);
296 
297  int mFlags;
298  std::string mName;
299  std::string mCommandName;
300  std::string mDesc;
301  std::string mDescExtra;
302  std::string mUsageText;
303  std::string mHelpText;
304  AJACommandLineOptionList mOptions;
305  AJAStringList mKnownOptions;
306  AJAStringList mUnknownOptions;
307  SubParserMap mSubParsers;
308 };
309 
310 #endif // AJA_COMMANDLINE_H
SubParserMap
std::map< std::string, AJACommandLineParser * > SubParserMap
Definition: commandline.h:119
types.h
Declares common types used in the ajabase library.
AJA_EXPORT
#define AJA_EXPORT
Definition: export.h:34
OptionEntry::value
std::string value
Definition: commandline.h:126
AJAStringList
std::vector< std::string > AJAStringList
Definition: commandline.h:19
AJAVariantList
std::vector< AJAVariant > AJAVariantList
Definition: variant.h:293
AJACommandLineOptionListIter
AJACommandLineOptionList::const_iterator AJACommandLineOptionListIter
Definition: commandline.h:117
AJAStringListConstIter
AJAStringList::const_iterator AJAStringListConstIter
Definition: commandline.h:20
AJACommandLineOption
Definition: commandline.h:30
AJASubParserPair
std::pair< std::string, AJACommandLineParser * > AJASubParserPair
Definition: commandline.h:122
kOptionSingleDash
@ kOptionSingleDash
Definition: commandline.h:23
kOptionDoubleDash
@ kOptionDoubleDash
Definition: commandline.h:24
AJACommandLineOptionFlags
AJACommandLineOptionFlags
Definition: commandline.h:22
OptionEntry
Definition: commandline.h:124
AJAVariant
A simple Variant class.
Definition: variant.h:34
AJACommandLineParserFlags
AJACommandLineParserFlags
Definition: commandline.h:130
kShortOptionsAsLong
@ kShortOptionsAsLong
Definition: commandline.h:131
AJACommandLineParser
Definition: commandline.h:137
variant.h
Declares the AJAVariant class.
OptionEntryMap
std::map< std::string, OptionEntry > OptionEntryMap
Definition: commandline.h:128
SubParserMapConstIter
SubParserMap::const_iterator SubParserMapConstIter
Definition: commandline.h:121
OptionEntry::pos
int pos
Definition: commandline.h:125
export.h
Declares system-dependent import/export macros and libraries.
AJACommandLineOptionList
std::vector< AJACommandLineOption > AJACommandLineOptionList
Definition: commandline.h:116