Parameter inheritance fixes.
authorRafał Długołęcki <rafal@dlugolecki.net.pl>
Sat, 2 May 2015 16:22:18 +0000 (18:22 +0200)
committerRafał Długołęcki <rafal@dlugolecki.net.pl>
Sat, 2 May 2015 16:22:18 +0000 (18:22 +0200)
include/argument.h
include/descriptive.h
include/option.h
include/parameter.h

index 70d83c787d042ede1d59b791c1170fba3e520cdd..eee218fb7d4720b65193ec45979249abd688c78f 100644 (file)
@@ -31,9 +31,12 @@ namespace command {
         virtual ~Argument() { }
 
         virtual void handle() {
-            std::cout << "Argument::handle()" << std::endl;
             this->call(std::string("A"));
         }
+
+        virtual bool understand(const std::string &) {
+            return false;
+        }
     };
 }
 
index d93c9314ba2bb947ce599c3221654750ff39713c..08be41e8be3638613191c17d4515c70bf9591d47 100644 (file)
@@ -15,7 +15,7 @@ namespace command {
          *
          * @param description Description
          */
-        Descriptive(std::string description)
+        Descriptive(const std::string& description)
             : description(description) {
         }
 
index fef4e31376287290af7a988f3fdb279efa04a151..3cba30fe1691df1b0321a7659574c34cf5754bd8 100644 (file)
@@ -3,7 +3,7 @@
 
 #include <string>
 
-#include "argument.h"
+#include "parameter.h"
 
 namespace command {
     /**
@@ -15,9 +15,7 @@ namespace command {
      */
     template<typename OptionType>
     class Option
-        : public Argument<OptionType> {
-    public:
-//         typedef typename Argument<OptionType, Lambda>::FunctionType FunctionType;
+        : public Parameter, public Callable<OptionType>  {
     protected:
         /**
          * Option name
@@ -33,14 +31,21 @@ namespace command {
          * @param function Function used to handle current Option.
          */
         Option(std::string name, std::string description, void (*function)(OptionType))
-            : name(name), Argument<OptionType>(description, function) {
+            : Parameter(description), Callable<OptionType>(function) {
         }
         virtual ~Option() { }
 
         virtual void handle() {
-            std::cout << "Option::handle()" << std::endl;
             this->call(std::string("O"));
         }
+
+        virtual bool understand(std::string argVal) {
+            if (argVal.find(name) != std::string::npos) {
+                return true;
+            }
+
+            return false;
+        }
     };
 }
 
index 5ca49317ffc9528d7d9fdc9f9cd1895207b4f5b9..3f5cfaab896bc9cbccfbcb54447fdd2ee46e2ce2 100644 (file)
@@ -8,15 +8,12 @@
 
 namespace command {
     /**
-     * Class responsible for handling commandline arguments.
-     * Arguments are required,x non-named parameters of program.
+     * Base class for all the Arguments and Options.
      *
      * Example:
      *  ./myprog ARGUMENT
      */
     class Parameter : public Descriptive {
-    protected:
-        std::string userValue;
     public:
         typedef class Parameter Type;
         /**
@@ -29,11 +26,16 @@ namespace command {
         }
         virtual ~Parameter() {}
 
+        /**
+         * Method used for handling method calls linked with Argument or Option
+         */
         virtual void handle() = 0;
 
-        virtual void passUserValue(std::string argVal) {
-            userValue = argVal;
-        }
+        /**
+         * Method used for checking if the given user value understandable for
+         * parameter.
+         */
+        virtual bool understand(std::string argVal) = 0;
     };
 }