Added mechanism to understand passed Argument value.
[command.git] / include / command.h
1 #ifndef __COMMAND_COMMAND_H
2 #define __COMMAND_COMMAND_H
3
4 #include <string>
5 #include <vector>
6 #include <iostream>
7
8 #include "parameter.h"
9
10 namespace command {
11     /**
12      * Main class for handling user passed parameters from command line.
13      */
14     class Command {
15     protected:
16         std::vector<Parameter *> parameters;
17     public:
18         /**
19          * Default constructor.
20          *
21          * @param argc passed to the main function
22          * @param argv passed to the main function
23          * @param params initializer_list containing Parameter handlers
24          *      responsible for correctly handle user data.
25          */
26         Command(unsigned int argc, char *argv[], std::initializer_list<Parameter *> params)
27             : parameters(params) {
28
29             matchArguments(argc, argv);
30         }
31
32         /**
33          * Destructor. Releases allocated memory.
34          */
35         ~Command() {
36             for (Parameter * parameter : parameters) {
37                 delete parameter;
38             }
39         }
40     protected:
41         /**
42          * Matches user passed arguments with available parameter handlers.
43          */
44         void matchArguments(unsigned int argc, char *argv[]) {
45             for (unsigned int i = 1; i < argc; i++) {
46                 for(Parameter *param : parameters) {
47                     if (param->understand(argv[i])) {
48                         param->handle();
49                         break;
50                     }
51                 }
52             }
53         }
54     };
55 }
56
57 #endif /* __COMMAND_COMMAND_H */