X-Git-Url: https://git.dlugolecki.net.pl/?p=command.git;a=blobdiff_plain;f=include%2Fargument.h;h=2cd3c300f970a8d2e205de7685a6f10fd9ad241d;hp=82954eb6fd3a5b8fa2b46841f110973d2def3f6b;hb=ae6743a2a2c69b7a927f64ff1d3abf38a5e7d4bc;hpb=2900a7396aa582dcf622b968c286059b28d9c0a8 diff --git a/include/argument.h b/include/argument.h index 82954eb..2cd3c30 100644 --- a/include/argument.h +++ b/include/argument.h @@ -4,6 +4,7 @@ #include #include #include +#include #include "parameter.h" #include "callable.h" @@ -11,19 +12,17 @@ namespace command { /** * Class responsible for handling commandline arguments. - * Arguments are required, non-named parameters of program. - * Accepts + * Arguments are non-named parameters of program. * * Example: - * ./myprog ARGUMENT + * - ./myprog ARGUMENT + * - ./myprog /path/to/file + * - ./myprog "some argument" */ - template - class Argument : public Parameter, public Callable { + template + class Argument : public Parameter, public Callable { protected: - /** Variable indicating if current Argument was already used or not */ - bool used = false; - - ArgumentType argument; + ParameterType value; public: typedef class Argument Type; @@ -33,8 +32,12 @@ namespace command { * @param description Description of current Argument * @param function Function used to handle current Argument. */ - Argument(const std::string & description, void (*function)(ArgumentType)) - : Parameter(description), Callable(function) { + Argument(const std::string & description, void (*function)(ParameterType)) + : Parameter(description), Callable(function) { + } + + Argument(const std::string & description, std::function function) + : Parameter(description), Callable(function) { } /** @@ -43,10 +46,11 @@ namespace command { virtual ~Argument() { } /** - * + * \inheritdoc */ virtual void handle() { - this->call(argument); + this->call(value); + this->used = true; } /** @@ -54,32 +58,36 @@ namespace command { * If so current Argument is flagged as used and no more checks against * it will be done in future. * - * \attention If conversion from passed value to ArgumentType is + * \attention If conversion from passed value to ParameterType is * impossible, it is ignored. It means that it is not understanded by * Argument. * * @param argv command line value against which test will be made. * - * @return If passed argv is succesfully converted to ArgumentType, + * @return If passed argv is succesfully converted to ParameterType, * returns true and Argument is set as used one. If there was an error * during conversion, method returns false and can be used to check * against next value. */ virtual bool understand(const std::string & argv) { - if (!used) { - std::stringstream ss; + std::stringstream ss; - ss << argv; - ss >> argument; + ss << std::fixed << argv; + ss >> value; - if (!ss.fail()) { - used = true; - return true; - } + if (!ss.fail()) { + return true; } return false; } + + /** + * \inheritdoc + */ + virtual unsigned int valuePosition(const std::string & ) { + return 0; + } }; }