ewmscp  ..
OptionsWithForeignParser.cpp
Go to the documentation of this file.
2 #include <limits>
3 namespace options {
5 
9  lName(aName) {
10  lArgc = 0;
11  }
12 
15  lOptions.push_back(aOption);
16  }
17 
19 
23  lArgv.clear();
24  lArgv.push_back(const_cast<char*>(lName.data()));
25  for (auto opt : lOptions) {
26  opt->fAddArgs();
27  }
28  }
30  void ForeignApplicationOptions::fAddToArgc(const char *aString) {
31  lArgv.push_back(const_cast<char*>(aString));
32  lArgc = lArgv.size();
33  }
35  void ForeignApplicationOptions::fAddToArgc(const std::string& aString) {
36  lArgv.push_back(const_cast<char*>(aString.data()));
37  lArgc = lArgv.size();
38  }
41  return lArgv.data();
42  }
45  return &lArgc;
46  }
47 
52  char aShortName, std::string aLongName, std::string aExplanation, short aNargs,
53  const char *aCanonicalForm) :
54  base(aShortName, aLongName, aExplanation, aNargs),
55  lCanonical(aCanonicalForm), lOptions(aForeignApplication) {
56  }
59  void ForeignOption::fSetMe(std::istream& aStream, const internal::sourceItem& aSource) {
60  using escapedIO::operator>>;
61  aStream >> lArg;
62  fSetSource(aSource);
63  lOptions->fRegister(this);
64  }
66  fSetSource(aSource);
67  lOptions->fRegister(this);
68  }
70  void ForeignOption::fAddArgs() const {
72  if (lNargs == 1) {
74  }
75  }
78  return;
79  }
81  void ForeignOption::fAddToRangeFromStream(std::istream& aStream) {
82  aStream.ignore(std::numeric_limits<std::streamsize>::max(), '\n');
83  }
85  void ForeignOption::fAddDefaultFromStream(std::istream& aStream) {
86  aStream.ignore(std::numeric_limits<std::streamsize>::max(), '\n');
87  }
88  void ForeignOption::fWriteValue(std::ostream& aStream) const {
89  aStream << lArg;
90  }
91 } // end of namespace options
options::ForeignApplicationOptions::ForeignApplicationOptions
ForeignApplicationOptions(const char *aName)
construct an object of typs ForeignApplicationOptions
Definition: OptionsWithForeignParser.cpp:8
options::ForeignOption::fAddArgs
virtual void fAddArgs() const
add args of this option tho the argument vector of the option list
Definition: OptionsWithForeignParser.cpp:70
options::ForeignOption::lArg
std::string lArg
Definition: OptionsWithForeignParser.h:37
options::ForeignOption::lCanonical
std::string lCanonical
Definition: OptionsWithForeignParser.h:36
options::ForeignOption::fSetMe
void fSetMe(std::istream &aArg, const internal::sourceItem &aSource) override
remember argument ad register in list of options that were set.
Definition: OptionsWithForeignParser.cpp:59
options::ForeignApplicationOptions
class to hold a list of options that are to be handled by a foreign option parser
Definition: OptionsWithForeignParser.h:10
options::base
base class for options
Definition: Options.h:193
options::ForeignOption::lOptions
ForeignApplicationOptions * lOptions
Definition: OptionsWithForeignParser.h:38
options::ForeignApplicationOptions::fFinalize
void fFinalize()
build the internal argument vector for the call to the external parser
Definition: OptionsWithForeignParser.cpp:22
options::ForeignOption::fAddDefaultFromStream
void fAddDefaultFromStream(std::istream &aStream) override
just read away the line, we cannot do anything sensible here
Definition: OptionsWithForeignParser.cpp:85
options
Definition: Options.h:33
options::ForeignApplicationOptions::lArgc
int lArgc
Definition: OptionsWithForeignParser.h:15
options::ForeignOption::~ForeignOption
virtual ~ForeignOption()
Definition: OptionsWithForeignParser.cpp:57
options::ForeignApplicationOptions::Argc
int * Argc()
return a pointer to the argument count for use with the external parser
Definition: OptionsWithForeignParser.cpp:44
OptionsWithForeignParser.h
options::ForeignOption::fCheckRange
void fCheckRange() const override
range checking does not work, we know no ranges
Definition: OptionsWithForeignParser.cpp:77
options::ForeignApplicationOptions::Argv
char ** Argv()
return an argument vector for use with the external parser
Definition: OptionsWithForeignParser.cpp:40
options::ForeignApplicationOptions::fAddToArgc
void fAddToArgc(const char *aString)
add string to the argument vector for the external parser
Definition: OptionsWithForeignParser.cpp:30
options::internal::sourceItem
class to remember from which line (or item) of a file/line an option was set from
Definition: Options.h:53
options::ForeignOption::fAddToRangeFromStream
void fAddToRangeFromStream(std::istream &aStream) override
just read away the line, we cannot do anything sensible here
Definition: OptionsWithForeignParser.cpp:81
options::ForeignApplicationOptions::fRegister
void fRegister(const ForeignOption *aOption)
add aOption to the list of options that were set.
Definition: OptionsWithForeignParser.cpp:14
options::ForeignOption::fWriteValue
void fWriteValue(std::ostream &aStream) const override
write textual representation of value to a std::ostream
Definition: OptionsWithForeignParser.cpp:88
options::ForeignOption::fSetMeNoarg
void fSetMeNoarg(const internal::sourceItem &aSource) override
Definition: OptionsWithForeignParser.cpp:65
options::ForeignOption::ForeignOption
ForeignOption(ForeignApplicationOptions *aForeignApplication, char aShortName, std::string aLongName, std::string aExplanation, short aNargs, const char *aCanonicalForm)
Definition: OptionsWithForeignParser.cpp:51
options::ForeignOption
special type of option that is not really parsed but used to feed an additional option parser
Definition: OptionsWithForeignParser.h:34
options::base::lNargs
short lNargs
Definition: Options.h:209
options::ForeignApplicationOptions::lOptions
std::vector< const ForeignOption * > lOptions
Definition: OptionsWithForeignParser.h:12
options::base::fSetSource
virtual void fSetSource(const internal::sourceItem &aSource)
remember the source that provided the value, e.g. commandline or a config file
Definition: Options.cpp:561
options::ForeignApplicationOptions::lArgv
std::vector< char * > lArgv
Definition: OptionsWithForeignParser.h:14
options::ForeignApplicationOptions::lName
std::string lName
Definition: OptionsWithForeignParser.h:13