Command  0.3
multiValue.h
1#ifndef __COMMAND_MULTIVALUE_H
2#define __COMMAND_MULTIVALUE_H
3
4#include <iostream>
5#include <vector>
6
7#include "parameter.h"
8
9namespace command {
22 class MultiValue : public Parameter {
23 protected:
28
29 std::vector<std::string> values;
30
31 std::string separator;
32
33 public:
39 MultiValue(std::string separator, Parameter * parameter)
41 separator(separator) {
42 }
43
47 virtual ~MultiValue() {
48 delete parameter;
49 }
50
56 virtual void handle() {
57 for (std::string value : values) {
58 parameter->understand(value);
60 }
61 }
62
70 virtual bool understand(const std::string & value) {
71 size_t start = 0;
72 size_t pos = 0;
73 bool _understand = true;
74 std::string prefix = "";
75
76 start = parameter->valuePosition(value);
77
78 if (start > value.size()) {
79 return false;
80 }
81
82 if (start > 0) {
83 prefix = value.substr(0, ++start);// always count: "="
84 }
85
86 do {
87 pos = value.find(separator, start);
88 values.push_back(prefix + value.substr(start, pos-start));
89 _understand &= parameter->understand(values.back());
90 start = pos + 1;
91
92 if (!_understand) {
93 values.clear();
94 break;
95 }
96 } while ((pos != std::string::npos) && (start < value.size()));
97 return _understand;
98 }
99
106 virtual bool isRequired() {
107 return parameter->isRequired();
108 };
109
115 virtual bool isUsed() {
116 return parameter->isUsed();
117 };
118
124 virtual unsigned int valuePosition(const std::string & value) {
125 return parameter->valuePosition(value);
126 }
127 };
128}
129
130#endif /* __COMMAND_MULTIVALUE_H */
const std::string & describe()
Definition: descriptive.h:29
Definition: multiValue.h:22
virtual bool isRequired()
Definition: multiValue.h:106
virtual bool understand(const std::string &value)
Definition: multiValue.h:70
virtual unsigned int valuePosition(const std::string &value)
Definition: multiValue.h:124
virtual ~MultiValue()
Definition: multiValue.h:47
virtual bool isUsed()
Definition: multiValue.h:115
MultiValue(std::string separator, Parameter *parameter)
Definition: multiValue.h:39
Parameter * parameter
Definition: multiValue.h:27
virtual void handle()
Definition: multiValue.h:56
Definition: parameter.h:17
virtual void handle()=0
virtual bool isRequired()
Definition: parameter.h:55
virtual bool isUsed()
Definition: parameter.h:64
virtual bool understand(const std::string &)=0
virtual unsigned int valuePosition(const std::string &)=0