AJA NTV2 SDK  17.0.1.1246
NTV2 SDK 17.0.1.1246
commandline.cpp
Go to the documentation of this file.
1 /* SPDX-License-Identifier: MIT */
10 #include <iomanip>
11 #include <iostream>
12 #include <sstream>
13 
14 static const char kAssignChar = '=';
15 static const char kSingleDash = '-';
16 static const char *kDoubleDash = "--";
17 
19 : mNames(), mDesc(), mDescExtra(), mValues(), mDefaultValue()
20 {}
21 
23 : mNames(), mDesc(), mDescExtra(), mValues(), mDefaultValue()
24 {
25  AddName(name);
26 }
27 
29  const std::string &desc)
30 : mNames(), mDesc(desc), mDescExtra(), mValues(), mDefaultValue()
31 {
32  AddName(name);
33 }
34 
36  const std::string &desc,
37  const std::string &defaultValue)
38 : mNames(), mDesc(desc), mDescExtra(), mValues(), mDefaultValue(defaultValue)
39 {
40  AddName(name);
41 }
42 
44 : mNames(), mDesc(), mDescExtra(), mValues(), mDefaultValue()
45 {
46  for (size_t i = 0; i < names.size(); i++) {
47  AddName(names.at(i));
48  }
49 }
50 
52  const std::string &desc)
53 : mNames(), mDesc(desc), mDescExtra(), mValues(), mDefaultValue()
54 {
55  for (size_t i = 0; i < names.size(); i++) {
56  AddName(names.at(i));
57  }
58 }
59 
61  const std::string &desc,
62  const std::string &defaultValue)
63 : mNames(), mDesc(desc), mDescExtra(), mValues(), mDefaultValue()
64 {
65  for (size_t i = 0; i < names.size(); i++) {
66  AddName(names.at(i));
67  }
68  mDefaultValue = defaultValue;
69 }
70 
72 {
73 }
74 
75 bool AJACommandLineOption::AddName(const std::string &name)
76 {
77  bool haveName = false;
78  for (size_t i = 0; i < mNames.size(); i++) {
79  if (mNames.at(i) == name) {
80  haveName = true;
81  break;
82  }
83  }
84  if (!haveName) {
85  mNames.push_back(name);
86  }
87 
88  return haveName;
89 }
90 
92 {
93  return mNames;
94 }
95 
96 std::string AJACommandLineOption::GetDesc() const
97 {
98  return mDesc;
99 }
100 
101 void AJACommandLineOption::SetDesc(const std::string &desc)
102 {
103  mDesc = desc;
104 }
105 
107 {
108  return mDescExtra;
109 }
110 
111 void AJACommandLineOption::SetExtraDesc(const std::string &desc)
112 {
113  mDescExtra = desc;
114 }
115 
116 
117 void AJACommandLineOption::SetDefaultValue(const std::string &value)
118 {
119  mDefaultValue = value;
120 }
121 
123 {
124  return mDefaultValue;
125 }
126 
127 void AJACommandLineOption::AddValue(const std::string &value)
128 {
129  mValues.push_back(value);
130 }
131 
132 std::string AJACommandLineOption::GetValue(size_t index) const
133 {
134  if (index > mValues.size() || mValues.empty())
135  return "";
136  return mValues.at(index);
137 }
138 
140 {
141  return mValues;
142 }
143 
145 : mFlags(flags), mName(), mCommandName(), mDesc(), mDescExtra(), mUsageText(), mHelpText(),
146  mOptions(), mKnownOptions(), mUnknownOptions(), mSubParsers()
147 {
148 }
149 
150 AJACommandLineParser::AJACommandLineParser(const std::string &name, int flags)
151 : mFlags(flags), mName(name), mCommandName(), mDesc(), mDescExtra(), mUsageText(), mHelpText(),
152  mOptions(), mKnownOptions(), mUnknownOptions(), mSubParsers()
153 {
154 }
155 
157 {
158  operator=(other);
159 }
160 
162 {
163 }
164 
166 {
167  mFlags = other.mFlags;
168  mName = other.mName;
169  mCommandName = other.mCommandName;
170  mDesc = other.mDesc;
171  mDescExtra = other.mDescExtra;
172  mUsageText = other.mUsageText;
173  mHelpText = other.mHelpText;
174  mOptions = other.mOptions;
175  mKnownOptions.clear();
176  mKnownOptions = other.mKnownOptions;
177  mUnknownOptions.clear();
178  mUnknownOptions = other.mUnknownOptions;
179  mSubParsers.clear();
180  for (SubParserMapConstIter iter = other.mSubParsers.begin(); iter != other.mSubParsers.end(); iter++) {
181  mSubParsers.insert(AJASubParserPair(iter->first, iter->second));
182  }
183 }
184 
185 void AJACommandLineParser::Reset(bool clearAll)
186 {
187  mKnownOptions.clear();
188  mUnknownOptions.clear();
189  if (clearAll) {
190  mSubParsers.clear();
191  mOptions.clear();
192  }
193 }
194 
196 {
197  if (!mCommandName.empty()) {
198  AJACommandLineParser *sp = mSubParsers.at(mCommandName);
199  if (sp != NULL) {
200  return sp->Dump();
201  }
202  } else {
203  for (AJACommandLineOptionListIter iter = mOptions.begin();
204  iter != mOptions.end(); iter++) {
205  const AJACommandLineOption &o = *iter;
206  const AJAStringList & names = o.GetNames();
207  std::ostringstream oss;
208  oss << "[";
209  std::string name;
210  size_t count = 0;
211  for (AJAStringListConstIter sIter = names.begin(); sIter != names.end(); sIter++) {
212  name = *sIter;
213  oss << name;
214  if (++count < names.size())
215  oss << ", ";
216  }
217  oss << "] " << "set? " << (IsSet(name) ? "true" : "false") << " value = " << o.GetValue();
218  std::cout << oss.str() << std::endl;
219  }
220  }
221 }
222 
223 bool AJACommandLineParser::OptionByName(const std::string &name, AJACommandLineOption &opt) const
224 {
225  for (AJACommandLineOptionListIter iter = mOptions.begin();
226  iter != mOptions.end(); iter++) {
227  const AJACommandLineOption &o = *iter;
228  const AJAStringList &names = o.GetNames();
229  for (AJAStringListConstIter nameIter = names.begin(); nameIter != names.end(); nameIter++) {
230  if (name == *nameIter) {
231  opt = o;
232  return true;
233  }
234  }
235  }
236 
237  return false;
238 }
239 
241 {
242  const std::string &name = p->GetName();
243  if (mSubParsers.find(name) == mSubParsers.end()) {
244  mSubParsers.insert(AJASubParserPair(name, p));
245  return true;
246  }
247 
248  return false;
249 }
250 
251 bool AJACommandLineParser::reverseOptionSearch(AJAStringListConstIter *iter,
252  const AJAStringList &args, const std::string &arg,
253  int prefixSize, AJACommandLineOption &opt)
254 {
255  if (static_cast<int>(arg.length()) > prefixSize) {
256  std::string subStr;
257  for (size_t c = arg.length(); static_cast<int>(c) > prefixSize; c--) {
258  subStr = arg.substr(prefixSize, c-prefixSize);
259  if (OptionByName(subStr, opt)) {
260  parseOptionValue(subStr, arg, iter, args.end());
261  mKnownOptions.push_back(subStr);
262  return true;
263  } else {
264  mUnknownOptions.push_back(subStr);
265  }
266  }
267  }
268  return false;
269 }
270 
272 {
273  // Must have at least 2 args (args[0] is the binary name, and args[1..N] are the user-specified args).
274  if (args.size() <= 1)
275  return;
276 
277  AJAStringList::const_iterator iter = args.begin();
278  ++iter;
279 
280  for (SubParserMap::iterator spIter = mSubParsers.begin(); spIter != mSubParsers.end(); spIter++) {
281  // Is second arg a command name which belongs to a sub-parser?
282  if (*iter == spIter->first)
283  mCommandName = *iter;
284  // Iterate all args with all sub-parsers...
285  if (spIter->second != NULL) {
286  spIter->second->ParseArgs(args);
287  }
288  }
289 
290  // If the parser name is specified, expect 2nd arg to match.
291  // The parser name is treated as a "sub-command name", eg.
292  // > MyApp.exe theCommand -d1 -n3 --verbose
293  if ((*iter != mName) && !mName.empty())
294  return;
295 
296  // ...otherwise just parse the args.
297  for (; iter != args.end(); iter++) {
298  const std::string &arg = *iter;
300  std::string optValue;
301  if (aja::starts_with(arg, kDoubleDash)) {
302  reverseOptionSearch(&iter, args, arg, 2, opt);
303  // if (arg.length() > 2) {
304  // std::string subStr;
305  // // for (size_t c = 2; c < arg.length(); c++) {
306  // for (size_t c = arg.length(); c > 2; c--) {
307  // // subStr += arg.substr(c, 1);
308  // subStr = arg.substr(2, c-2);
309  // if (OptionByName(subStr, opt)) {
310  // parseOptionValue(subStr, arg, &iter, args.end());
311  // mKnownOptions.push_back(subStr);
312  // break;
313  // } else {
314  // mUnknownOptions.push_back(subStr);
315  // }
316  // }
317  // }
318  } else if (aja::starts_with(arg, kSingleDash)) {
319  if (arg.length() > 1) {
320  std::string subStr;
321  if (mFlags & kShortOptionsAsLong) {
322  for (size_t c = 1; c < arg.length(); c++) {
323  subStr = arg.substr(c, 1);
324  if (OptionByName(subStr, opt)) {
325  mKnownOptions.push_back(subStr);
326  } else {
327  mUnknownOptions.push_back(subStr);
328  }
329  }
330  } else {
331  reverseOptionSearch(&iter, args, arg, 1, opt);
332  // for (size_t c = 1; c < arg.length(); c++) {
333  // subStr += arg.substr(c, 1);
334  // if (OptionByName(subStr, opt)) {
335  // parseOptionValue(subStr, arg, &iter, args.end());
336  // mKnownOptions.push_back(subStr);
337  // break;
338  // } else {
339  // mUnknownOptions.push_back(subStr);
340  // }
341  // }
342  }
343  }
344  } else {
345  // positional args?
346  }
347  }
348 }
349 
350 void AJACommandLineParser::ParseArgs(int argc, char *argv[])
351 {
352  if (argc == 0 || argc == 1 || argv == NULL)
353  return;
354 
355  AJAStringList argList;
356  for (int i = 0; i < argc; i++)
357  argList.push_back(std::string(argv[i]));
358 
359  ParseArgs(argList);
360 }
361 
362 bool AJACommandLineParser::IsSet(const std::string &name) const
363 {
364  if (!mCommandName.empty()) {
365  AJACommandLineParser *sp = mSubParsers.at(mCommandName);
366  if (sp != NULL) {
367  return sp->IsSet(name);
368  }
369  } else {
371  if (OptionByName(name, opt)) {
372  const AJAStringList &names = opt.GetNames();
373  for (AJAStringListConstIter nameIt = names.begin(); nameIt != names.end(); nameIt++) {
374  for (AJAStringListConstIter it = mKnownOptions.begin(); it != mKnownOptions.end(); it++) {
375  if (*nameIt == *it)
376  return true;
377  }
378  }
379  }
380  }
381  return false;
382 }
383 
384 AJAVariant AJACommandLineParser::Value(const std::string &name, size_t index) const
385 {
386  return AJAVariant(ValueString(name, index));
387 }
388 
389 AJAVariantList AJACommandLineParser::Values(const std::string &name) const
390 {
391  AJAStringList values = ValueStrings(name);
392  if (!values.empty()) {
393  AJAVariantList variants;
394  for (AJAStringListConstIter it = values.begin(); it != values.end(); it++) {
395  variants.push_back(AJAVariant(*it));
396  }
397  return variants;
398  }
399  return AJAVariantList();
400 }
401 
402 std::string AJACommandLineParser::ValueString(const std::string &name, size_t index) const
403 {
404  std::string val;
405  if (!mCommandName.empty()) {
406  AJACommandLineParser *sp = mSubParsers.at(mCommandName);
407  if (sp != NULL) {
408  return sp->ValueString(name, index);
409  }
410  } else {
412  if (OptionByName(name, opt)) {
413  val = opt.GetValue(index);
414  if (val.empty()) {
415  val = opt.GetDefaultValue();
416  }
417  }
418  }
419 
420  return val;
421 }
422 
423 AJAStringList AJACommandLineParser::ValueStrings(const std::string &name) const
424 {
425  if (!mCommandName.empty()) {
426  AJACommandLineParser *sp = mSubParsers.at(mCommandName);
427  if (sp != NULL) {
428  return sp->ValueStrings(name);
429  }
430  } else {
432  if (OptionByName(name, opt)) {
433  return opt.GetValues();
434  }
435  }
436  return AJAStringList();
437 }
438 
440 {
441  bool exists = false;
442  const AJAStringList &wantNames = option.GetNames();
443  for (AJACommandLineOptionListIter optIter = mOptions.begin(); optIter != mOptions.end(); optIter++) {
444  const AJAStringList &names = optIter->GetNames();
445  for (AJAStringListConstIter nameIter = names.begin(); nameIter != names.end(); nameIter++) {
446  for (AJAStringListConstIter wantIter = wantNames.begin(); wantIter != wantNames.end(); wantIter++) {
447  if (*wantIter == *nameIter) {
448  exists = true;
449  goto next;
450  }
451  }
452  }
453  }
454 
455 next:
456  if (exists) {
457  return false;
458  } else {
459  mOptions.push_back(option);
460  return true;
461  }
462 }
463 
465 {
466  uint32_t okCount = 0;
467  for (size_t i = 0; i < options.size(); i++) {
468  if (AddOption(options.at(i)))
469  ++okCount;
470  }
471  return options.size() > 0 ? (okCount == (uint32_t)options.size() ? true : false) : false;
472 }
473 
475 {
476  AJACommandLineOption helpOpt;
477  helpOpt.AddName("?");
478  helpOpt.AddName("h");
479  helpOpt.AddName("help");
480  helpOpt.SetDesc("Print the help text");
481  if (AddOption(helpOpt)) {
482  std::ostringstream oss;
483  std::string exePath;
485  oss << "usage: " << exePath;
486  if (!mName.empty())
487  oss << " " << mName;
488  oss << " [OPTION...]" << std::endl;
489 
490  // Get the longest line size first...
491  size_t longestSize = 0;
492  for (AJACommandLineOptionListIter it = mOptions.begin();
493  it != mOptions.end(); it++) {
494  const AJAStringList &names = it->GetNames();
495  size_t namesLength = 0;
496  for (AJAStringListConstIter sIter = names.begin(); sIter != names.end(); sIter++) {
497  const std::string &name = *sIter;
498  namesLength += name.length();
499  // add size of dashes
500  if (name.length() == 1) {
501  namesLength++;
502  } else {
503  namesLength += 2;
504  }
505  }
506  // add size of commas/spaces (i.e. ", ")
507  namesLength += ((names.size()*2)-2);
508  if (namesLength > longestSize)
509  longestSize = namesLength;
510  }
511 
512  mHelpText.clear();
513 
514  // ...now calculate all of the line padding.
515  for (AJACommandLineOptionListIter it = mOptions.begin();
516  it != mOptions.end(); it++) {
517  oss << std::setw(2) << std::right;
518  const AJAStringList &names = it->GetNames();
519  size_t nameCount = 0;
520  size_t namesLength = 0;
521  for (AJAStringListConstIter sIter = names.begin(); sIter != names.end(); sIter++) {
522  const std::string &name = *sIter;
523  namesLength += name.length();
524  if (name.length() == 1) {
525  oss << "-" << name;
526  namesLength++;
527  } else {
528  oss << "--" << name;
529  namesLength += 2;
530  }
531  if (++nameCount < names.size()) {
532  oss << ", ";
533  }
534  }
535  namesLength += ((names.size()*2)-2);
536  oss << std::setw((longestSize-namesLength) + it->GetDesc().length() + 8);
537  oss << it->GetDesc() << std::endl;
538  }
539 
540  mHelpText = oss.str();
541 
542  return true;
543  }
544 
545  return false;
546 }
547 
548 std::string AJACommandLineParser::GetName() const
549 {
550  if (!mCommandName.empty()) {
551  AJACommandLineParser *sp = mSubParsers.at(mCommandName);
552  if (sp != NULL) {
553  return sp->GetName();
554  }
555  }
556 
557  return mName;
558 }
559 
560 void AJACommandLineParser::SetUsageText(const std::string &usageText)
561 {
562  if (!mCommandName.empty()) {
563  AJACommandLineParser *sp = mSubParsers.at(mCommandName);
564  if (sp != NULL) {
565  sp->SetUsageText(usageText);
566  }
567  } else {
568  mUsageText = usageText;
569  }
570 }
571 
573 {
574  if (!mCommandName.empty()) {
575  AJACommandLineParser *sp = mSubParsers.at(mCommandName);
576  if (sp != NULL) {
577  return sp->GetUsageText();
578  }
579  }
580 
581  return mUsageText;
582 }
583 
584 void AJACommandLineParser::SetHelpText(const std::string &helpText)
585 {
586  if (!mCommandName.empty()) {
587  AJACommandLineParser *sp = mSubParsers.at(mCommandName);
588  if (sp != NULL) {
589  sp->SetHelpText(helpText);
590  }
591  } else {
592  mHelpText = helpText;
593  }
594 }
595 
597 {
598  if (!mCommandName.empty()) {
599  AJACommandLineParser *sp = mSubParsers.at(mCommandName);
600  if (sp != NULL) {
601  return sp->GetHelpText();
602  }
603  }
604 
605  return mHelpText;
606 }
607 
609 {
610  if (!mCommandName.empty()) {
611  AJACommandLineParser *sp = mSubParsers.at(mCommandName);
612  if (sp != NULL) {
613  return sp->GetKnownOptions();
614  }
615  }
616 
617  return mKnownOptions;
618 }
619 
621 {
622  return mCommandName;
623 }
624 
626 {
627  if (!mCommandName.empty()) {
628  AJACommandLineParser *sp = mSubParsers.at(mCommandName);
629  if (sp != NULL) {
630  return sp->GetUnknownOptions();
631  }
632  }
633 
634  return mUnknownOptions;
635 }
636 
637 bool AJACommandLineParser::hasOptionPrefix(const std::string &name)
638 {
639  return aja::starts_with(name, kSingleDash);
640 }
641 
642 bool AJACommandLineParser::parseOptionValue(const std::string &name,
643  const std::string &arg,
644  AJAStringList::const_iterator *iter,
645  AJAStringList::const_iterator end)
646 {
647  std::string optName;
648  std::string optValue;
649  size_t assignPos = arg.find(kAssignChar, 0);
650  int prefixSize = aja::starts_with(arg, kDoubleDash) ?
651  2 : (aja::starts_with(arg, "-") ? 1 : 0);
652  if (assignPos != std::string::npos) {
653  // Get value after assignment operator.
654  optValue = arg.substr(assignPos+1, arg.length()-assignPos);
655  } else {
656  // Get value from next arg after this one if no assignment operator found.
657  optValue = arg.substr(prefixSize+name.length(), arg.length());
658  if (optValue.empty()) {
659  if (iter != NULL && *iter != end) {
660  AJAStringList::const_iterator tmp = *iter;
661  if (++tmp != end) {
662  /* TODO(paulh): fix special case
663  * parser options: [foo], [b, bar]
664  * > program.exe --foo -b
665  * Will be parsed as:
666  * --foo=-b
667  * bar IsSet() == true
668  *
669  * The current workaround is to always use the assignment operator:
670  * > program.exe --foo=-b
671  * > program.exe --foo="-b"
672  *
673  * The fix is to iterate through all known options and check if the
674  * arg specified here as "tmp" is one of the option names.
675  * If the option is an option name, do not treat it as a value.
676  * We might want to have an AJACommandLineParser flag to allow
677  * handling either case.
678  * CASE A:
679  * > program.exe --foo -b
680  * [foo] is treated as "set", with no value.
681  * [b, bar] is treated as "set", with no value.
682  * CASE B:
683  * > program.exe --foo -b
684  * [foo] is treated as "set", with a value of "-b"
685  * [b, bar] is treated as "not set".
686  */
687  optValue = *(tmp);
688  }
689  }
690  }
691 
692  if (optValue.empty())
693  return false;
694  }
695 
696  return setOptionValue(name, optValue);
697 }
698 
699 bool AJACommandLineParser::setOptionValue(const std::string &name, const std::string &value)
700 {
701  if (!value.empty()) {
702  for (size_t i = 0; i < mOptions.size(); i++) {
703  AJACommandLineOption opt = mOptions.at(i);
704  const AJAStringList &names = opt.GetNames();
705  for (AJAStringListConstIter iter = names.begin(); iter != names.end(); iter++) {
706  if (name == *iter) {
707  mOptions[i].AddValue(value);
708  return true;
709  }
710  }
711  }
712  }
713 
714  return false;
715 }
716 
717 std::string AJACommandLineParser::removePrefix(const std::string &name, int &count)
718 {
719  AJAStringList prefixes;
720  prefixes.push_back("--");
721  prefixes.push_back("-");
722  for (AJAStringListConstIter iter = prefixes.begin(); iter != prefixes.end(); iter++) {
723  const std::string &prefix = *iter;
724  if (aja::starts_with(name, prefix)) {
725  size_t prefixSize = prefix.length();
726  count = (int)prefixSize;
727  return name.substr(prefixSize, name.length()-prefixSize);
728  }
729  }
730 
731  return name;
732 }
kAssignChar
static const char kAssignChar
Definition: commandline.cpp:14
AJACommandLineParser::Reset
void Reset(bool clearAll=false)
Definition: commandline.cpp:185
AJACommandLineOption::SetDesc
void SetDesc(const std::string &desc)
Definition: commandline.cpp:101
AJACommandLineParser::AddOption
bool AddOption(const AJACommandLineOption &option)
Definition: commandline.cpp:439
AJACommandLineParser::Value
AJAVariant Value(const std::string &name, size_t index=0) const
Definition: commandline.cpp:384
AJACommandLineParser::GetCommandName
std::string GetCommandName()
Definition: commandline.cpp:620
AJACommandLineOption::AddValue
void AddValue(const std::string &value)
Definition: commandline.cpp:127
NULL
#define NULL
Definition: ntv2caption608types.h:19
AJACommandLineOption::AJACommandLineOption
AJACommandLineOption()
Definition: commandline.cpp:18
AJACommandLineParser::ValueStrings
AJAStringList ValueStrings(const std::string &name) const
Definition: commandline.cpp:423
AJACommandLineParser::operator=
void operator=(const AJACommandLineParser &other)
Definition: commandline.cpp:165
AJACommandLineOption::SetDefaultValue
void SetDefaultValue(const std::string &value)
Definition: commandline.cpp:117
AJACommandLineParser::GetName
std::string GetName() const
Definition: commandline.cpp:548
kDoubleDash
static const char * kDoubleDash
Definition: commandline.cpp:16
AJACommandLineOption::GetValues
AJAStringList GetValues() const
Definition: commandline.cpp:139
AJACommandLineParser::~AJACommandLineParser
~AJACommandLineParser()
Definition: commandline.cpp:161
AJACommandLineParser::SetHelpText
void SetHelpText(const std::string &helpText)
Definition: commandline.cpp:584
AJACommandLineParser::OptionByName
bool OptionByName(const std::string &name, AJACommandLineOption &opt) const
Definition: commandline.cpp:223
AJAStringList
std::vector< std::string > AJAStringList
Definition: commandline.h:19
AJACommandLineOption::SetExtraDesc
void SetExtraDesc(const std::string &desc)
Definition: commandline.cpp:111
AJAVariantList
std::vector< AJAVariant > AJAVariantList
Definition: variant.h:293
commandline.h
Declaration of Command Line classes.
AJACommandLineOptionListIter
AJACommandLineOptionList::const_iterator AJACommandLineOptionListIter
Definition: commandline.h:117
AJACommandLineParser::Values
AJAVariantList Values(const std::string &name) const
Definition: commandline.cpp:389
AJAStringListConstIter
AJAStringList::const_iterator AJAStringListConstIter
Definition: commandline.h:20
AJACommandLineParser::AddSubParser
bool AddSubParser(AJACommandLineParser *sp)
Definition: commandline.cpp:240
AJAFileIO::GetExecutablePath
static AJAStatus GetExecutablePath(std::string &path)
Definition: file_io.cpp:1360
AJACommandLineOption::~AJACommandLineOption
virtual ~AJACommandLineOption()
Definition: commandline.cpp:71
AJACommandLineOption
Definition: commandline.h:30
AJASubParserPair
std::pair< std::string, AJACommandLineParser * > AJASubParserPair
Definition: commandline.h:122
kSingleDash
static const char kSingleDash
Definition: commandline.cpp:15
AJACommandLineParser::GetUsageText
std::string GetUsageText() const
Definition: commandline.cpp:572
AJACommandLineOption::GetExtraDesc
std::string GetExtraDesc() const
Definition: commandline.cpp:106
AJACommandLineOption::GetDefaultValue
std::string GetDefaultValue() const
Definition: commandline.cpp:122
AJACommandLineParser::AddHelpOption
bool AddHelpOption()
Definition: commandline.cpp:474
AJACommandLineParser::ParseArgs
void ParseArgs(const AJAStringList &args)
Definition: commandline.cpp:271
AJAVariant
A simple Variant class.
Definition: variant.h:34
kShortOptionsAsLong
@ kShortOptionsAsLong
Definition: commandline.h:131
AJACommandLineParser
Definition: commandline.h:137
AJACommandLineParser::ValueString
std::string ValueString(const std::string &name, size_t index=0) const
Definition: commandline.cpp:402
AJACommandLineParser::AJACommandLineParser
AJACommandLineParser(int flags=0)
Definition: commandline.cpp:144
AJACommandLineOption::GetNames
AJAStringList GetNames() const
Definition: commandline.cpp:91
AJACommandLineParser::GetHelpText
std::string GetHelpText() const
Definition: commandline.cpp:596
AJACommandLineOption::GetDesc
std::string GetDesc() const
Definition: commandline.cpp:96
AJACommandLineParser::GetKnownOptions
AJAStringList GetKnownOptions()
Definition: commandline.cpp:608
file_io.h
Declares the AJAFileIO class.
common.h
Private include file for all ajabase sources.
true
#define true
Definition: ntv2devicefeatures.h:26
AJACommandLineParser::GetUnknownOptions
AJAStringList GetUnknownOptions()
Definition: commandline.cpp:625
AJACommandLineParser::AddOptions
bool AddOptions(const std::vector< AJACommandLineOption > &options)
Definition: commandline.cpp:464
aja::starts_with
bool starts_with(const std::string &str, const std::string &needle)
Definition: common.cpp:61
AJACommandLineOption::AddName
bool AddName(const std::string &name)
Definition: commandline.cpp:75
AJACommandLineOption::GetValue
std::string GetValue(size_t index=0) const
Definition: commandline.cpp:132
AJACommandLineParser::Dump
void Dump()
Definition: commandline.cpp:195
AJACommandLineParser::SetUsageText
void SetUsageText(const std::string &usageText)
Definition: commandline.cpp:560
SubParserMapConstIter
SubParserMap::const_iterator SubParserMapConstIter
Definition: commandline.h:121
AJACommandLineParser::IsSet
bool IsSet(const std::string &name) const
Definition: commandline.cpp:362
AJACommandLineOptionList
std::vector< AJACommandLineOption > AJACommandLineOptionList
Definition: commandline.h:116