Copy README.
[command.git] / include / required.h
1 #ifndef __COMMAND_REQUIRED_H
2 #define __COMMAND_REQUIRED_H
3
4 #include "parameter.h"
5
6 namespace command {
7     /**
8      * Required Parameter decorator. Makes passed Parameters treated as required
9      */
10     class Required : public Parameter {
11     protected:
12         /**
13          * Parameter which will be treated as required
14          */
15         Parameter * parameter;
16
17     public:
18         /**
19          * Default constructor.
20          *
21          * @param parameter Parameter which will be treated as required
22          */
23         Required(Parameter * parameter)
24             : Parameter(parameter->describe()), parameter(parameter) {
25         }
26
27         /**
28          * Default destructor. Releases allocated memory
29          */
30         virtual ~Required() {
31             delete parameter;
32         }
33
34         /**
35          * Wrapper method around passed Parameter::handle().
36          *
37          * \inheritdoc
38          */
39         virtual void handle() {
40             parameter->handle();
41         }
42
43         /**
44          * Wrapper method around passed Parameter::understand()
45          *
46          * @param argv command line value against which test will be made
47          *
48          * \inheritdoc
49          */
50         virtual bool understand(const std::string & value) {
51             return parameter->understand(value);
52         }
53
54         /**
55          * Indicates if current Parameter is required
56          *
57          * @return true, as all Parameters wrapped in Required class are set as
58          *      required. In order to make them non-required do not use
59          *      Required class
60          */
61         virtual bool isRequired() {
62             return true;
63         };
64
65         /**
66          * Wrapper method around passed Parameter::isUsed().
67          *
68          * \inheritdoc
69          */
70         virtual bool isUsed() {
71             return parameter->isUsed();
72         }
73
74         /**
75          * Wrapper method around passed Parameter::valuePosition().
76          *
77          * \inheritdoc
78          */
79         virtual unsigned int valuePosition(const std::string & value) {
80             return parameter->valuePosition(value);
81         }
82     };
83 }
84
85 #endif /* __COMMAND_REQUIRED_H */