diff options
Diffstat (limited to 'staging_vespalib/src/vespa/vespalib/util/programoptions.cpp')
-rw-r--r-- | staging_vespalib/src/vespa/vespalib/util/programoptions.cpp | 104 |
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>; |