X-Git-Url: https://git.dlugolecki.net.pl/?a=blobdiff_plain;f=include%2Fparameter.h;h=87c1590ccc85fbcdbe9d6f69ce01f0d5fd2253a6;hb=f2d683504e2dc76868ec84d7c1fd858edc0df5a4;hp=3f5cfaab896bc9cbccfbcb54447fdd2ee46e2ce2;hpb=1fb7bf70d04d24cbb0c1789a3c5125aadeb8b158;p=command.git diff --git a/include/parameter.h b/include/parameter.h index 3f5cfaa..87c1590 100644 --- a/include/parameter.h +++ b/include/parameter.h @@ -2,6 +2,7 @@ #define __COMMAND_PARAMETER_H #include +#include #include "descriptive.h" #include "callable.h" @@ -14,6 +15,10 @@ namespace command { * ./myprog ARGUMENT */ class Parameter : public Descriptive { + protected: + /** Variable indicating if current Parameter was already used or not */ + bool used = false; + public: typedef class Parameter Type; /** @@ -21,21 +26,55 @@ namespace command { * * @param description Description of current Argument */ - Parameter(std::string description) + Parameter(const std::string & description) : Descriptive(description) { } - virtual ~Parameter() {} + + virtual ~Parameter() { } /** - * Method used for handling method calls linked with Argument or Option + * Method used for handling method calls linked with this Parameter */ virtual void handle() = 0; /** * Method used for checking if the given user value understandable for * parameter. + * + * @return true if passed value is understandable by current Parameter. + * False otherwise. + */ + virtual bool understand(const std::string & ) = 0; + + /** + * Indicates if current Parameter is required + * + * @return false, as all Parameters are non-required by default. If you + * want to make Parameter as required, wrap it using Required class + */ + virtual bool isRequired() { + return false; + }; + + /** + * Indicates if current Parameter has been already used + * + * @return true if current Parameter has been already used. False otherwise. + */ + virtual bool isUsed() { + return used; + } + + /** + */ + virtual bool hungryForValue() { + return false; + } + + /** + * @return position where value starts in passed string */ - virtual bool understand(std::string argVal) = 0; + virtual unsigned int valuePosition(const std::string & ) = 0; }; }