AJA NTV2 SDK  17.5.0.1242
NTV2 SDK 17.5.0.1242
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 
117 
118 typedef std::vector<AJACommandLineOption> AJACommandLineOptionList;
119 typedef AJACommandLineOptionList::const_iterator AJACommandLineOptionListIter;
120 
122 typedef std::map<std::string, AJACommandLineParser *> SubParserMap;
123 typedef SubParserMap::const_iterator SubParserMapConstIter;
124 typedef std::pair<std::string, AJACommandLineParser*> AJASubParserPair;
125 
126 struct OptionEntry {
127  int pos;
128  std::string value;
129 };
130 typedef std::map<std::string, OptionEntry> OptionEntryMap;
131 
132 typedef enum {
135 
140 {
141 public:
142  explicit AJACommandLineParser(int flags=0);
143  explicit AJACommandLineParser(const std::string &name, int flags=0);
146  void operator=(const AJACommandLineParser &other);
147 
148  void Reset(bool clearAll=false);
149  void Dump();
150 
151  bool OptionByName(const std::string &name, AJACommandLineOption &opt) const;
159  bool AddSubParser(AJACommandLineParser *sp);
167  void ParseArgs(const AJAStringList &args);
174  void ParseArgs(int argc, const char *argv[]);
181  void ParseArgs(int argc, char *argv[]);
189  bool IsSet(const std::string &name) const;
198  AJAVariant Value(const std::string &name, size_t index = 0) const;
206  AJAVariantList Values(const std::string &name) const;
215  std::string ValueString(const std::string &name, size_t index = 0) const;
223  AJAStringList ValueStrings(const std::string &name) const;
233  bool AddOption(const AJACommandLineOption &option);
243  bool AddOptions(const std::vector<AJACommandLineOption> &options);
248  bool AddHelpOption();
254  std::string GetName() const;
260  void SetUsageText(const std::string &usageText);
266  std::string GetUsageText() const;
272  void SetHelpText(const std::string &helpText);
278  std::string GetHelpText() const;
284  std::string GetCommandName();
290  AJAStringList GetKnownOptions();
296  AJAStringList GetUnknownOptions();
297 
298 private:
299  static bool hasOptionPrefix(const std::string &name);
300  bool reverseOptionSearch(AJAStringListConstIter *iter, const AJAStringList &args, const std::string &arg, int prefixSize, AJACommandLineOption &opt);
301  bool parseValue(const std::string &arg, std::string &value);
302  bool parseOptionValue(const std::string &name, const std::string &arg, AJAStringList::const_iterator *iter, AJAStringList::const_iterator end);
303  bool setOptionValue(const std::string &name, const std::string &value);
304  std::string removePrefix(const std::string &name, int &count);
305 
306  int mFlags;
307  std::string mName;
308  std::string mCommandName;
309  std::string mDesc;
310  std::string mDescExtra;
311  std::string mUsageText;
312  std::string mHelpText;
313  AJACommandLineOptionList mOptions;
314  AJAStringList mKnownOptions;
315  AJAStringList mUnknownOptions;
316  SubParserMap mSubParsers;
317 };
318 
320 
321 #endif // AJA_COMMANDLINE_H
nlohmann::json_abiNLOHMANN_JSON_ABI_TAG_LEGACY_DISCARDED_VALUE_COMPARISON_v3_11_NLOHMANN_JSON_VERSION_PATCH::detail2::end
end_tag end(T &&...)
SubParserMap
std::map< std::string, AJACommandLineParser * > SubParserMap
Definition: commandline.h:121
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:128
AJACmdLineParser
AJACommandLineParser AJACmdLineParser
Definition: commandline.h:319
AJAStringList
std::vector< std::string > AJAStringList
Definition: commandline.h:19
AJAVariantList
std::vector< AJAVariant > AJAVariantList
Definition: variant.h:328
AJACommandLineOptionListIter
AJACommandLineOptionList::const_iterator AJACommandLineOptionListIter
Definition: commandline.h:119
AJAStringListConstIter
AJAStringList::const_iterator AJAStringListConstIter
Definition: commandline.h:20
AJACommandLineOption
Definition: commandline.h:30
AJASubParserPair
std::pair< std::string, AJACommandLineParser * > AJASubParserPair
Definition: commandline.h:124
kOptionSingleDash
@ kOptionSingleDash
Definition: commandline.h:23
kOptionDoubleDash
@ kOptionDoubleDash
Definition: commandline.h:24
AJACommandLineOptionFlags
AJACommandLineOptionFlags
Definition: commandline.h:22
OptionEntry
Definition: commandline.h:126
AJACmdLineOption
AJACommandLineOption AJACmdLineOption
Definition: commandline.h:116
AJAVariant
A simple Variant class.
Definition: variant.h:37
AJACommandLineParserFlags
AJACommandLineParserFlags
Definition: commandline.h:132
kShortOptionsAsLong
@ kShortOptionsAsLong
Definition: commandline.h:133
AJACommandLineParser
Definition: commandline.h:139
variant.h
Declares the AJAVariant class.
OptionEntryMap
std::map< std::string, OptionEntry > OptionEntryMap
Definition: commandline.h:130
SubParserMapConstIter
SubParserMap::const_iterator SubParserMapConstIter
Definition: commandline.h:123
OptionEntry::pos
int pos
Definition: commandline.h:127
export.h
Declares system-dependent import/export macros and libraries.
AJACommandLineOptionList
std::vector< AJACommandLineOption > AJACommandLineOptionList
Definition: commandline.h:118