AJA NTV2 SDK  17.1.1.1245
NTV2 SDK 17.1.1.1245
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, const 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 void AJACommandLineParser::ParseArgs(int argc, char *argv[])
363 {
364  if (argc == 0 || argc == 1 || argv == NULL)
365  return;
366 
367  AJAStringList argList;
368  for (int i = 0; i < argc; i++)
369  argList.push_back(std::string(argv[i]));
370 
371  ParseArgs(argList);
372 }
373 
374 bool AJACommandLineParser::IsSet(const std::string &name) const
375 {
376  if (!mCommandName.empty()) {
377  AJACommandLineParser *sp = mSubParsers.at(mCommandName);
378  if (sp != NULL) {
379  return sp->IsSet(name);
380  }
381  } else {
383  if (OptionByName(name, opt)) {
384  const AJAStringList &names = opt.GetNames();
385  for (AJAStringListConstIter nameIt = names.begin(); nameIt != names.end(); nameIt++) {
386  for (AJAStringListConstIter it = mKnownOptions.begin(); it != mKnownOptions.end(); it++) {
387  if (*nameIt == *it)
388  return true;
389  }
390  }
391  }
392  }
393  return false;
394 }
395 
396 AJAVariant AJACommandLineParser::Value(const std::string &name, size_t index) const
397 {
398  return AJAVariant(ValueString(name, index));
399 }
400 
401 AJAVariantList AJACommandLineParser::Values(const std::string &name) const
402 {
403  AJAStringList values = ValueStrings(name);
404  if (!values.empty()) {
405  AJAVariantList variants;
406  for (AJAStringListConstIter it = values.begin(); it != values.end(); it++) {
407  variants.push_back(AJAVariant(*it));
408  }
409  return variants;
410  }
411  return AJAVariantList();
412 }
413 
414 std::string AJACommandLineParser::ValueString(const std::string &name, size_t index) const
415 {
416  std::string val;
417  if (!mCommandName.empty()) {
418  AJACommandLineParser *sp = mSubParsers.at(mCommandName);
419  if (sp != NULL) {
420  return sp->ValueString(name, index);
421  }
422  } else {
424  if (OptionByName(name, opt)) {
425  val = opt.GetValue(index);
426  if (val.empty()) {
427  val = opt.GetDefaultValue();
428  }
429  }
430  }
431 
432  return val;
433 }
434 
435 AJAStringList AJACommandLineParser::ValueStrings(const std::string &name) const
436 {
437  if (!mCommandName.empty()) {
438  AJACommandLineParser *sp = mSubParsers.at(mCommandName);
439  if (sp != NULL) {
440  return sp->ValueStrings(name);
441  }
442  } else {
444  if (OptionByName(name, opt)) {
445  return opt.GetValues();
446  }
447  }
448  return AJAStringList();
449 }
450 
452 {
453  bool exists = false;
454  const AJAStringList &wantNames = option.GetNames();
455  for (AJACommandLineOptionListIter optIter = mOptions.begin(); optIter != mOptions.end(); optIter++) {
456  const AJAStringList &names = optIter->GetNames();
457  for (AJAStringListConstIter nameIter = names.begin(); nameIter != names.end(); nameIter++) {
458  for (AJAStringListConstIter wantIter = wantNames.begin(); wantIter != wantNames.end(); wantIter++) {
459  if (*wantIter == *nameIter) {
460  exists = true;
461  goto next;
462  }
463  }
464  }
465  }
466 
467 next:
468  if (exists) {
469  return false;
470  } else {
471  mOptions.push_back(option);
472  return true;
473  }
474 }
475 
477 {
478  uint32_t okCount = 0;
479  for (size_t i = 0; i < options.size(); i++) {
480  if (AddOption(options.at(i)))
481  ++okCount;
482  }
483  return options.size() > 0 ? (okCount == (uint32_t)options.size() ? true : false) : false;
484 }
485 
487 {
488  AJACommandLineOption helpOpt;
489  helpOpt.AddName("?");
490  helpOpt.AddName("h");
491  helpOpt.AddName("help");
492  helpOpt.SetDesc("Print the help text");
493  if (AddOption(helpOpt)) {
494  std::ostringstream oss;
495  std::string exePath;
497  oss << "usage: " << exePath;
498  if (!mName.empty())
499  oss << " " << mName;
500  oss << " [OPTION...]" << std::endl;
501 
502  // Get the longest line size first...
503  size_t longestSize = 0;
504  for (AJACommandLineOptionListIter it = mOptions.begin();
505  it != mOptions.end(); it++) {
506  const AJAStringList &names = it->GetNames();
507  size_t namesLength = 0;
508  for (AJAStringListConstIter sIter = names.begin(); sIter != names.end(); sIter++) {
509  const std::string &name = *sIter;
510  namesLength += name.length();
511  // add size of dashes
512  if (name.length() == 1) {
513  namesLength++;
514  } else {
515  namesLength += 2;
516  }
517  }
518  // add size of commas/spaces (i.e. ", ")
519  namesLength += ((names.size()*2)-2);
520  if (namesLength > longestSize)
521  longestSize = namesLength;
522  }
523 
524  mHelpText.clear();
525 
526  // ...now calculate all of the line padding.
527  for (AJACommandLineOptionListIter it = mOptions.begin();
528  it != mOptions.end(); it++) {
529  oss << std::setw(2) << std::right;
530  const AJAStringList &names = it->GetNames();
531  size_t nameCount = 0;
532  size_t namesLength = 0;
533  for (AJAStringListConstIter sIter = names.begin(); sIter != names.end(); sIter++) {
534  const std::string &name = *sIter;
535  namesLength += name.length();
536  if (name.length() == 1) {
537  oss << "-" << name;
538  namesLength++;
539  } else {
540  oss << "--" << name;
541  namesLength += 2;
542  }
543  if (++nameCount < names.size()) {
544  oss << ", ";
545  }
546  }
547  namesLength += ((names.size()*2)-2);
548  oss << std::setw((longestSize-namesLength) + it->GetDesc().length() + 8);
549  oss << it->GetDesc() << std::endl;
550  }
551 
552  mHelpText = oss.str();
553 
554  return true;
555  }
556 
557  return false;
558 }
559 
560 std::string AJACommandLineParser::GetName() const
561 {
562  if (!mCommandName.empty()) {
563  AJACommandLineParser *sp = mSubParsers.at(mCommandName);
564  if (sp != NULL) {
565  return sp->GetName();
566  }
567  }
568 
569  return mName;
570 }
571 
572 void AJACommandLineParser::SetUsageText(const std::string &usageText)
573 {
574  if (!mCommandName.empty()) {
575  AJACommandLineParser *sp = mSubParsers.at(mCommandName);
576  if (sp != NULL) {
577  sp->SetUsageText(usageText);
578  }
579  } else {
580  mUsageText = usageText;
581  }
582 }
583 
585 {
586  if (!mCommandName.empty()) {
587  AJACommandLineParser *sp = mSubParsers.at(mCommandName);
588  if (sp != NULL) {
589  return sp->GetUsageText();
590  }
591  }
592 
593  return mUsageText;
594 }
595 
596 void AJACommandLineParser::SetHelpText(const std::string &helpText)
597 {
598  if (!mCommandName.empty()) {
599  AJACommandLineParser *sp = mSubParsers.at(mCommandName);
600  if (sp != NULL) {
601  sp->SetHelpText(helpText);
602  }
603  } else {
604  mHelpText = helpText;
605  }
606 }
607 
609 {
610  if (!mCommandName.empty()) {
611  AJACommandLineParser *sp = mSubParsers.at(mCommandName);
612  if (sp != NULL) {
613  return sp->GetHelpText();
614  }
615  }
616 
617  return mHelpText;
618 }
619 
621 {
622  if (!mCommandName.empty()) {
623  AJACommandLineParser *sp = mSubParsers.at(mCommandName);
624  if (sp != NULL) {
625  return sp->GetKnownOptions();
626  }
627  }
628 
629  return mKnownOptions;
630 }
631 
633 {
634  return mCommandName;
635 }
636 
638 {
639  if (!mCommandName.empty()) {
640  AJACommandLineParser *sp = mSubParsers.at(mCommandName);
641  if (sp != NULL) {
642  return sp->GetUnknownOptions();
643  }
644  }
645 
646  return mUnknownOptions;
647 }
648 
649 bool AJACommandLineParser::hasOptionPrefix(const std::string &name)
650 {
651  return aja::starts_with(name, kSingleDash);
652 }
653 
654 bool AJACommandLineParser::parseOptionValue(const std::string &name,
655  const std::string &arg,
656  AJAStringList::const_iterator *iter,
657  AJAStringList::const_iterator end)
658 {
659  std::string optName;
660  std::string optValue;
661  size_t assignPos = arg.find(kAssignChar, 0);
662  int prefixSize = aja::starts_with(arg, kDoubleDash) ?
663  2 : (aja::starts_with(arg, "-") ? 1 : 0);
664  if (assignPos != std::string::npos) {
665  // Get value after assignment operator.
666  optValue = arg.substr(assignPos+1, arg.length()-assignPos);
667  } else {
668  // Get value from next arg after this one if no assignment operator found.
669  optValue = arg.substr(prefixSize+name.length(), arg.length());
670  if (optValue.empty()) {
671  if (iter != NULL && *iter != end) {
672  AJAStringList::const_iterator tmp = *iter;
673  if (++tmp != end) {
674  /* TODO(paulh): fix special case
675  * parser options: [foo], [b, bar]
676  * > program.exe --foo -b
677  * Will be parsed as:
678  * --foo=-b
679  * bar IsSet() == true
680  *
681  * The current workaround is to always use the assignment operator:
682  * > program.exe --foo=-b
683  * > program.exe --foo="-b"
684  *
685  * The fix is to iterate through all known options and check if the
686  * arg specified here as "tmp" is one of the option names.
687  * If the option is an option name, do not treat it as a value.
688  * We might want to have an AJACommandLineParser flag to allow
689  * handling either case.
690  * CASE A:
691  * > program.exe --foo -b
692  * [foo] is treated as "set", with no value.
693  * [b, bar] is treated as "set", with no value.
694  * CASE B:
695  * > program.exe --foo -b
696  * [foo] is treated as "set", with a value of "-b"
697  * [b, bar] is treated as "not set".
698  */
699  optValue = *(tmp);
700  }
701  }
702  }
703 
704  if (optValue.empty())
705  return false;
706  }
707 
708  return setOptionValue(name, optValue);
709 }
710 
711 bool AJACommandLineParser::setOptionValue(const std::string &name, const std::string &value)
712 {
713  if (!value.empty()) {
714  for (size_t i = 0; i < mOptions.size(); i++) {
715  AJACommandLineOption opt = mOptions.at(i);
716  const AJAStringList &names = opt.GetNames();
717  for (AJAStringListConstIter iter = names.begin(); iter != names.end(); iter++) {
718  if (name == *iter) {
719  mOptions[i].AddValue(value);
720  return true;
721  }
722  }
723  }
724  }
725 
726  return false;
727 }
728 
729 std::string AJACommandLineParser::removePrefix(const std::string &name, int &count)
730 {
731  AJAStringList prefixes;
732  prefixes.push_back("--");
733  prefixes.push_back("-");
734  for (AJAStringListConstIter iter = prefixes.begin(); iter != prefixes.end(); iter++) {
735  const std::string &prefix = *iter;
736  if (aja::starts_with(name, prefix)) {
737  size_t prefixSize = prefix.length();
738  count = (int)prefixSize;
739  return name.substr(prefixSize, name.length()-prefixSize);
740  }
741  }
742 
743  return name;
744 }
nlohmann::json_abiNLOHMANN_JSON_ABI_TAG_LEGACY_DISCARDED_VALUE_COMPARISON_v3_11_NLOHMANN_JSON_VERSION_PATCH::detail2::end
end_tag end(T &&...)
kAssignChar
static const char kAssignChar
Definition: commandline.cpp:14
nlohmann::json_abiNLOHMANN_JSON_ABI_TAG_LEGACY_DISCARDED_VALUE_COMPARISON_v3_11_NLOHMANN_JSON_VERSION_PATCH::detail::parse_event_t::value
@ value
the parser finished reading a JSON value
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:451
AJACommandLineParser::Value
AJAVariant Value(const std::string &name, size_t index=0) const
Definition: commandline.cpp:396
AJACommandLineParser::GetCommandName
std::string GetCommandName()
Definition: commandline.cpp:632
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:435
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:560
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:596
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:328
commandline.h
Declaration of Command Line classes.
AJACommandLineOptionListIter
AJACommandLineOptionList::const_iterator AJACommandLineOptionListIter
Definition: commandline.h:119
AJACommandLineParser::Values
AJAVariantList Values(const std::string &name) const
Definition: commandline.cpp:401
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:1361
AJACommandLineOption::~AJACommandLineOption
virtual ~AJACommandLineOption()
Definition: commandline.cpp:71
AJACommandLineOption
Definition: commandline.h:30
AJASubParserPair
std::pair< std::string, AJACommandLineParser * > AJASubParserPair
Definition: commandline.h:124
kSingleDash
static const char kSingleDash
Definition: commandline.cpp:15
AJACommandLineParser::GetUsageText
std::string GetUsageText() const
Definition: commandline.cpp:584
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:486
AJACommandLineParser::ParseArgs
void ParseArgs(const AJAStringList &args)
Definition: commandline.cpp:271
AJAVariant
A simple Variant class.
Definition: variant.h:37
kShortOptionsAsLong
@ kShortOptionsAsLong
Definition: commandline.h:133
AJACommandLineParser
Definition: commandline.h:139
AJACommandLineParser::ValueString
std::string ValueString(const std::string &name, size_t index=0) const
Definition: commandline.cpp:414
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:608
AJACommandLineOption::GetDesc
std::string GetDesc() const
Definition: commandline.cpp:96
AJACommandLineParser::GetKnownOptions
AJAStringList GetKnownOptions()
Definition: commandline.cpp:620
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:637
AJACommandLineParser::AddOptions
bool AddOptions(const std::vector< AJACommandLineOption > &options)
Definition: commandline.cpp:476
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:572
SubParserMapConstIter
SubParserMap::const_iterator SubParserMapConstIter
Definition: commandline.h:123
AJACommandLineParser::IsSet
bool IsSet(const std::string &name) const
Definition: commandline.cpp:374
AJACommandLineOptionList
std::vector< AJACommandLineOption > AJACommandLineOptionList
Definition: commandline.h:118