Small documentation improvements. Added possibility to pass user values for Parameters.
authorRafał Długołęcki <rafal@dlugolecki.net.pl>
Sun, 26 Apr 2015 11:59:03 +0000 (13:59 +0200)
committerRafał Długołęcki <rafal@dlugolecki.net.pl>
Sun, 26 Apr 2015 11:59:03 +0000 (13:59 +0200)
include/command.h
include/parameter.h

index 9cf0a9fc5bba15fb9b229309df13c603d75cb385..a48ab91f5ee02b8eed81a7645cbf2be904f3e9c2 100644 (file)
@@ -13,29 +13,47 @@ namespace command {
      */
     class Command {
     protected:
-        unsigned int argc;
-        std::vector<std::string> _argv;
         std::vector<Parameter *> args;
     public:
         /**
          * Default constructor.
          *
-         * @param 
-         * @param 
-         * @param 
+         * @param argc passed to the main function
+         * @param argv passed to the main function
+         * @param params initializer_list containing Parameter handlers
+         *      responsible for correctly handle user data.
          */
         Command(unsigned int argc, char *argv[], std::initializer_list<Parameter *> params)
             : args(params) {
-            for(Parameter *param : params) {
-                param->handle();
-            }
+
+            matchArguments(argc, argv);
+            invoke();
         }
-        
+
+        /**
+         * Destructor. Releases allocated memory.
+         */
         ~Command() {
             for (Parameter * parameter : args) {
                 delete parameter;
             }
         }
+    protected:
+        /**
+         * Matches user passed arguments with available parameter handlers.
+         */
+        void matchArguments(unsigned int argc, char *argv[]) {
+//             param->passUserValue();
+        }
+
+        /**
+         * Invokes passed parameter handlers
+         */
+        void invoke() {
+            for(Parameter *param : params) {
+                param->handle();
+            }
+        }
     };
 }
 
index 9e250869c1c7a95f6290cabf8926b718fe581ecc..e55a2d1e248c2fe3541fb3395177a52691c33dee 100644 (file)
@@ -15,6 +15,8 @@ namespace command {
      *  ./myprog ARGUMENT
      */
     class Parameter : public Descriptive {
+    protected:
+        std:string userValue;
     public:
         typedef class Parameter Type;
         /**
@@ -27,9 +29,11 @@ namespace command {
         }
         virtual ~Parameter() {}
 
-        virtual void handle() {
-            std::cout << "Parameter::handle()" << std::endl;
-        };
+        virtual void handle() = 0;
+
+        virtual void passUserValue(std::string argVal) {
+            userValue = argVal;
+        }
     };
 }