summaryrefslogtreecommitdiffstats
path: root/staging_vespalib/src/vespa/vespalib/util/programoptions.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'staging_vespalib/src/vespa/vespalib/util/programoptions.cpp')
-rw-r--r--staging_vespalib/src/vespa/vespalib/util/programoptions.cpp104
1 files changed, 103 insertions, 1 deletions
diff --git a/staging_vespalib/src/vespa/vespalib/util/programoptions.cpp b/staging_vespalib/src/vespa/vespalib/util/programoptions.cpp
index 356d86a1dee..41ff561011b 100644
--- a/staging_vespalib/src/vespa/vespalib/util/programoptions.cpp
+++ b/staging_vespalib/src/vespa/vespalib/util/programoptions.cpp
@@ -567,7 +567,7 @@ ProgramOptions::writeSyntaxPage(std::ostream& out, bool showDefaults)
}
ProgramOptions::OptionParser&
-ProgramOptions::addOption(OptionParser::SP opt)
+ProgramOptions::addOption(OptionParser::SP && opt)
{
for (uint32_t i=0; i<opt->_names.size(); ++i) {
std::map<std::string, OptionParser::SP>::const_iterator it(
@@ -683,6 +683,108 @@ ProgramOptions::MapOptionParser::MapOptionParser(
{
}
+#define VESPALIB_PROGRAMOPTIONS_IMPL_NODEF_ADDOPTION(type, parsertype) \
+template<> \
+ProgramOptions::OptionParser& \
+ProgramOptions::addOption(const std::string& optionNameList, \
+ type& value, const std::string& desc) \
+{ \
+ return addOption(OptionParser::SP( \
+ new parsertype(optionNameList, value, desc))); \
+}
+
+VESPALIB_PROGRAMOPTIONS_IMPL_NODEF_ADDOPTION(bool, FlagOptionParser);
+VESPALIB_PROGRAMOPTIONS_IMPL_NODEF_ADDOPTION(std::string, StringOptionParser);
+VESPALIB_PROGRAMOPTIONS_IMPL_NODEF_ADDOPTION(int32_t, NumberOptionParser<int32_t>);
+VESPALIB_PROGRAMOPTIONS_IMPL_NODEF_ADDOPTION(uint32_t, NumberOptionParser<uint32_t>);
+VESPALIB_PROGRAMOPTIONS_IMPL_NODEF_ADDOPTION(int64_t, NumberOptionParser<int64_t>);
+VESPALIB_PROGRAMOPTIONS_IMPL_NODEF_ADDOPTION(uint64_t, NumberOptionParser<uint64_t>);
+VESPALIB_PROGRAMOPTIONS_IMPL_NODEF_ADDOPTION(float, NumberOptionParser<float>);
+VESPALIB_PROGRAMOPTIONS_IMPL_NODEF_ADDOPTION(double, NumberOptionParser<double>);
+VESPALIB_PROGRAMOPTIONS_IMPL_NODEF_ADDOPTION(MapOptionParser::MapType, MapOptionParser);
+
+#define VESPALIB_PROGRAMOPTIONS_IMPL_ADDOPTION(type, parsertype) \
+template<> \
+ProgramOptions::OptionParser& \
+ProgramOptions::addOption(const std::string& optionNameList, \
+ type& value, const type& defVal, \
+ const std::string& desc) \
+{ \
+ return addOption(OptionParser::SP( \
+ new parsertype(optionNameList, value, defVal, desc))); \
+}
+
+VESPALIB_PROGRAMOPTIONS_IMPL_ADDOPTION(bool, FlagOptionParser);
+VESPALIB_PROGRAMOPTIONS_IMPL_ADDOPTION(std::string, StringOptionParser);
+VESPALIB_PROGRAMOPTIONS_IMPL_ADDOPTION(int32_t, NumberOptionParser<int32_t>);
+VESPALIB_PROGRAMOPTIONS_IMPL_ADDOPTION(uint32_t, NumberOptionParser<uint32_t>);
+VESPALIB_PROGRAMOPTIONS_IMPL_ADDOPTION(int64_t, NumberOptionParser<int64_t>);
+VESPALIB_PROGRAMOPTIONS_IMPL_ADDOPTION(uint64_t, NumberOptionParser<uint64_t>);
+VESPALIB_PROGRAMOPTIONS_IMPL_ADDOPTION(float, NumberOptionParser<float>);
+VESPALIB_PROGRAMOPTIONS_IMPL_ADDOPTION(double, NumberOptionParser<double>);
+
+#define VESPALIB_PROGRAMOPTIONS_IMPL_NODEF_ADDARGUMENT(type, parsertype) \
+template<> \
+ProgramOptions::OptionParser& \
+ProgramOptions::addArgument(const std::string& name, \
+ type& value, \
+ const std::string& desc) \
+{ \
+ return addArgument(OptionParser::SP( \
+ new parsertype(name, value, desc))); \
+}
+
+VESPALIB_PROGRAMOPTIONS_IMPL_NODEF_ADDARGUMENT(bool, BoolOptionParser);
+VESPALIB_PROGRAMOPTIONS_IMPL_NODEF_ADDARGUMENT(std::string, StringOptionParser);
+VESPALIB_PROGRAMOPTIONS_IMPL_NODEF_ADDARGUMENT(int32_t, NumberOptionParser<int32_t>);
+VESPALIB_PROGRAMOPTIONS_IMPL_NODEF_ADDARGUMENT(uint32_t, NumberOptionParser<uint32_t>);
+VESPALIB_PROGRAMOPTIONS_IMPL_NODEF_ADDARGUMENT(int64_t, NumberOptionParser<int64_t>);
+VESPALIB_PROGRAMOPTIONS_IMPL_NODEF_ADDARGUMENT(uint64_t, NumberOptionParser<uint64_t>);
+VESPALIB_PROGRAMOPTIONS_IMPL_NODEF_ADDARGUMENT(float, NumberOptionParser<float>);
+VESPALIB_PROGRAMOPTIONS_IMPL_NODEF_ADDARGUMENT(double, NumberOptionParser<double>);
+
+#define VESPALIB_PROGRAMOPTIONS_IMPL_ADDARGUMENT(type, parsertype) \
+template<> \
+ProgramOptions::OptionParser& \
+ProgramOptions::addArgument(const std::string& name, \
+ type& value, const type& defVal, \
+ const std::string& desc) \
+{ \
+ return addArgument(OptionParser::SP( \
+ new parsertype(name, value, defVal, desc))); \
+}
+
+VESPALIB_PROGRAMOPTIONS_IMPL_ADDARGUMENT(std::string, StringOptionParser);
+VESPALIB_PROGRAMOPTIONS_IMPL_ADDARGUMENT(int32_t, NumberOptionParser<int32_t>);
+VESPALIB_PROGRAMOPTIONS_IMPL_ADDARGUMENT(uint32_t, NumberOptionParser<uint32_t>);
+VESPALIB_PROGRAMOPTIONS_IMPL_ADDARGUMENT(int64_t, NumberOptionParser<int64_t>);
+VESPALIB_PROGRAMOPTIONS_IMPL_ADDARGUMENT(uint64_t, NumberOptionParser<uint64_t>);
+VESPALIB_PROGRAMOPTIONS_IMPL_ADDARGUMENT(float, NumberOptionParser<float>);
+VESPALIB_PROGRAMOPTIONS_IMPL_ADDARGUMENT(double, NumberOptionParser<double>);
+
+#define VESPALIB_PROGRAMOPTIONS_IMPL_ADDLISTARGUMENT(type, parsertype) \
+template<> \
+ProgramOptions::OptionParser& \
+ProgramOptions::addListArgument(const std::string& name, \
+ std::vector<type>& value, \
+ const std::string& desc) \
+{ \
+ ListOptionParser<type>* listParser( \
+ new ListOptionParser<type>(name, value, desc)); \
+ OptionParser::UP entryParser( \
+ new parsertype(name, listParser->getSingleValue(), desc)); \
+ listParser->setEntryParser(std::move(entryParser)); \
+ return addArgument(OptionParser::SP(listParser)); \
+}
+
+VESPALIB_PROGRAMOPTIONS_IMPL_ADDLISTARGUMENT(std::string, StringOptionParser);
+VESPALIB_PROGRAMOPTIONS_IMPL_ADDLISTARGUMENT(int32_t, NumberOptionParser<int32_t>);
+VESPALIB_PROGRAMOPTIONS_IMPL_ADDLISTARGUMENT(uint32_t, NumberOptionParser<uint32_t>);
+VESPALIB_PROGRAMOPTIONS_IMPL_ADDLISTARGUMENT(int64_t, NumberOptionParser<int64_t>);
+VESPALIB_PROGRAMOPTIONS_IMPL_ADDLISTARGUMENT(uint64_t, NumberOptionParser<uint64_t>);
+VESPALIB_PROGRAMOPTIONS_IMPL_ADDLISTARGUMENT(float, NumberOptionParser<float>);
+VESPALIB_PROGRAMOPTIONS_IMPL_ADDLISTARGUMENT(double, NumberOptionParser<double>);
+
template class ProgramOptions::NumberOptionParser<int32_t>;
template class ProgramOptions::NumberOptionParser<uint32_t>;
template class ProgramOptions::NumberOptionParser<int64_t>;