X-Git-Url: https://git.dlugolecki.net.pl/?a=blobdiff_plain;f=include%2FmultiValue.h;h=26738b5c54e6a7c2461d9a8e88edb4355365aee9;hb=723cec55870209fc6fba43c1d7b49ada83c07faa;hp=e84b855628f035a0e89ea47b0f6223d2975063ec;hpb=32ec13f77dce87c6f8086baa954b1d0f9fedb89c;p=command.git diff --git a/include/multiValue.h b/include/multiValue.h index e84b855..26738b5 100644 --- a/include/multiValue.h +++ b/include/multiValue.h @@ -2,6 +2,7 @@ #define __COMMAND_MULTIVALUE_H #include +#include #include "parameter.h" @@ -70,14 +71,29 @@ namespace command { size_t start = 0; size_t pos = 0; bool _understand = true; + std::string prefix = ""; + + start = parameter->valuePosition(value); + + if (start > value.size()) { + return false; + } + + if (start > 0) { + prefix = value.substr(0, ++start);// always count: "=" + } do { pos = value.find(separator, start); - values.push_back(value.substr(start, pos-start)); + values.push_back(prefix + value.substr(start, pos-start)); _understand &= parameter->understand(values.back()); start = pos + 1; - } while ((pos != std::string::npos) && (start < value.size())); + if (!_understand) { + values.clear(); + break; + } + } while ((pos != std::string::npos) && (start < value.size())); return _understand; } @@ -99,7 +115,16 @@ namespace command { virtual bool isUsed() { return parameter->isUsed(); }; + + /** + * Wrapper method around passed Parameter::valuePosition(). + * + * \inheritdoc + */ + virtual unsigned int valuePosition(const std::string & value) { + return parameter->valuePosition(value); + } }; } -#endif /* __COMMAND_PARAMETER_H */ +#endif /* __COMMAND_MULTIVALUE_H */