X-Git-Url: https://git.dlugolecki.net.pl/?a=blobdiff_plain;f=include%2Foption.h;h=963d662aec681f690a9afeeba4074dcf7e9de2a7;hb=68461ce43951a67646427c05ba94a960dcfa0a55;hp=115676665388a3fb88f42ce065bde8ae85bf4b39;hpb=9bc6a44ad1a07a6420ce4fd75dfea0796bcd0d46;p=command.git diff --git a/include/option.h b/include/option.h index 1156766..963d662 100644 --- a/include/option.h +++ b/include/option.h @@ -10,16 +10,16 @@ namespace command { /** * Class responsible for handling commandline options. - * Options are non-required, named parameters of program. + * Options are named parameters of program. * * Example: * ./myprog OptionName=OptionValue * ./myprog -f=/some/file * ./myprog --level=15 */ - template + template class Option - : public Parameter, public Callable { + : public Parameter, public Callable { public: typedef std::string OptionName; protected: @@ -31,10 +31,7 @@ namespace command { /** * Current Option value */ - OptionType value; - - /** Variable indicating if current Option was already used or not */ - bool used = false; + ParameterType value; public: /** @@ -44,8 +41,8 @@ namespace command { * @param description Description of current Option * @param function Function used to handle current Option. */ - Option(const std::string & name, const std::string & description, void (*function)(OptionType)) - : Parameter(description), Callable(function), name(name) { + Option(const std::string & name, const std::string & description, void (*function)(ParameterType)) + : Parameter(description), Callable(function), name(name) { } /** @@ -71,7 +68,7 @@ namespace command { * If no equal sign is after OptionName part, * std::invalid_argument exception with appropriate message is thrown * - * If conversion of OptionValue part to OptionType failed, + * If conversion of OptionValue part to ParameterType failed, * std::invalid_argument exception with appropriate message is thrown * * @param argv command line value against which test will be made. @@ -79,18 +76,18 @@ namespace command { * * @return If passed argv succesfully detected OptionName part as a * current option and its OptionValue part has been succesfully - * converted to OptionType, returns true and Option is set as used one. + * 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 - * to OptionType + * to ParameterType */ virtual bool understand(const std::string & argv) throw(std::invalid_argument) { - if ((!used) && (argv.find(name) == 0)) { + if ((!isUsed()) && (argv.find(name) == 0)) { std::size_t pos = argv.find("="); if (pos != name.size()) { @@ -99,7 +96,7 @@ namespace command { std::stringstream ss; ss << argv.substr(pos + 1); - ss >> value;// memory leak? when is uncommented, and exception is + ss >> value;// memory leak? when uncommented and exception is // thrown, valgrind shows e.g.: // possibly lost: 380 bytes in 7 blocks @@ -136,10 +133,6 @@ namespace command { * Current Option name */ const OptionName name; - - /** Variable indicating if current Option was already used or not */ - bool used = false; - public: /** * Default constructor. @@ -175,7 +168,7 @@ namespace command { * used to check against next value. */ virtual bool understand(const std::string & argv) { - if ((!used) && + if ((!isUsed()) && (argv == name)) { used = true; return true;