X-Git-Url: https://git.dlugolecki.net.pl/?a=blobdiff_plain;f=include%2Foption.h;h=7e9917b589c7021a0c5852695e90eecb5fa36908;hb=71d10208f91a566b40ea1bdbb1e2f20f85f8182f;hp=d66164d38d6f622e7f81440c5ba4845bcd4e6a7a;hpb=77267acae0a5c4b6c80392bbb9e07afbed3da043;p=command.git diff --git a/include/option.h b/include/option.h index d66164d..7e9917b 100644 --- a/include/option.h +++ b/include/option.h @@ -89,8 +89,7 @@ namespace command { * to ParameterType */ virtual bool understand(const std::string & argv) { - - if (argv.find(name) == 0) { + if (this->hasName(argv)) { std::size_t pos = this->valuePosition(argv); if (pos != name.size()) { @@ -98,11 +97,11 @@ namespace command { } std::stringstream ss; - ss << argv.substr(pos + 1); + ss << std::fixed << argv.substr(pos + 1); ss >> value; if (ss.fail()) { - throw OptionFailedConversion("Value for option: " + name + " failed conversion to the required type"); + throw OptionFailedConversion("Option: " + name + " failed value conversion to the required type"); } return true; @@ -116,12 +115,17 @@ namespace command { virtual unsigned int valuePosition(const std::string & value) { std::size_t pos = value.find("="); - if (pos == std::string::npos) { - throw OptionValueNotSpecified("Option: " + name + " requires value to be specified using equal sign"); + if ((this->hasName(value)) && (pos == std::string::npos)) { + throw OptionValueNotSpecified("Option: " + name + " requires value to be specified after equal sign, but no equal sign was found"); } return pos; } + + protected: + bool hasName(const std::string & argv) { + return argv.find(name) == 0; + } }; /**