X-Git-Url: https://git.dlugolecki.net.pl/?a=blobdiff_plain;f=include%2Foption.h;fp=include%2Foption.h;h=21f814e105f9f3e6b1fffc91d50864109700c749;hb=521027e1f566744a1b087cc3d047a714551d5f00;hp=516fce016eb80c6d6e350c6e050fc498e9d3c497;hpb=e7c2ad96ad56116b2bfca1000f425287b1a02da2;p=command.git diff --git a/include/option.h b/include/option.h index 516fce0..21f814e 100644 --- a/include/option.h +++ b/include/option.h @@ -6,6 +6,8 @@ #include #include "parameter.h" +#include "exception/missingOptionValue.h" +#include "exception/optionFailedConversion.h" namespace command { /** @@ -79,29 +81,26 @@ namespace command { * converted to ParameterType, returns true and Option is set as used one. * Otherwise returns false and can be used to check against next value. * - * @throw std::invalid_argument when OptionName part has no equal sign - * after itself - * @throw std::invalid_argument when OptionValue part failed conversion + * @throw MissingOptionValue when OptionValue part is missing after + * equal sign + * @throw OptionFailedConversion when OptionValue part failed conversion * to ParameterType */ - virtual bool understand(const std::string & argv) - throw(std::invalid_argument) { + virtual bool understand(const std::string & argv) { if ((!isUsed()) && (argv.find(name) == 0)) { std::size_t pos = argv.find("="); if (pos != name.size()) { - throw std::invalid_argument("Option: " + name + " requires value but no one has been provided"); + throw MissingOptionValue("Option: " + name + " requires value but no one has been provided"); } std::stringstream ss; ss << argv.substr(pos + 1); - ss >> value;// memory leak? when uncommented and exception is - // thrown, valgrind shows e.g.: - // possibly lost: 380 bytes in 7 blocks + ss >> value; if (ss.fail()) { - throw std::invalid_argument("Value for option: " + name + " failed conversion to the required type"); + throw OptionFailedConversion("Value for option: " + name + " failed conversion to the required type"); } used = true;