| Index: src/shared/Communication.h |
| diff --git a/src/shared/Communication.h b/src/shared/Communication.h |
| index 9c9e2cde2ae2e2dc4d2c48279e3b862f6b370179..4caa442dfbfeef7abcb042709cdf84d07366476e 100644 |
| --- a/src/shared/Communication.h |
| +++ b/src/shared/Communication.h |
| @@ -38,7 +38,7 @@ namespace Communication |
| PROC_COMPARE_VERSIONS |
| }; |
| enum ValueType : uint32_t { |
| - TYPE_PROC, TYPE_STRING, TYPE_WSTRING, TYPE_INT64, TYPE_INT32, TYPE_BOOL |
| + TYPE_PROC, TYPE_STRING, TYPE_WSTRING, TYPE_INT64, TYPE_INT32, TYPE_BOOL, TYPE_STRINGS |
| }; |
| typedef uint32_t SizeType; |
| @@ -59,6 +59,7 @@ namespace Communication |
| InputBuffer& operator>>(int64_t& value) { return Read(value, TYPE_INT64); } |
| InputBuffer& operator>>(int32_t& value) { return Read(value, TYPE_INT32); } |
| InputBuffer& operator>>(bool& value) { return Read(value, TYPE_BOOL); } |
| + InputBuffer& operator>>(std::vector<std::string>& value) { return ReadStrings(value); } |
| InputBuffer& operator=(const InputBuffer& copy) |
| { |
| hasType = copy.hasType; |
| @@ -91,6 +92,21 @@ namespace Communication |
| return *this; |
| } |
| + InputBuffer& ReadStrings(std::vector<std::string>& value) |
| + { |
| + value.clear(); |
| + CheckType(ValueType::TYPE_STRINGS); |
| + |
| + SizeType length; |
| + ReadBinary(length); |
| + value.resize(length); |
| + for (SizeType i = 0; i < length; ++i) |
| + { |
| + operator>>(value[i]); |
| + } |
| + return *this; |
| + } |
| + |
| template<class T> |
| InputBuffer& Read(T& value, ValueType expectedType) |
| { |
| @@ -127,6 +143,7 @@ namespace Communication |
| OutputBuffer& operator<<(int64_t value) { return Write(value, TYPE_INT64); } |
| OutputBuffer& operator<<(int32_t value) { return Write(value, TYPE_INT32); } |
| OutputBuffer& operator<<(bool value) { return Write(value, TYPE_BOOL); } |
| + OutputBuffer& operator<<(const std::vector<std::string>& value) { return WriteStrings(value); } |
| private: |
| std::ostringstream buffer; |
| @@ -148,6 +165,17 @@ namespace Communication |
| return *this; |
| } |
| + OutputBuffer& WriteStrings(const std::vector<std::string>& value) |
| + { |
| + WriteBinary(ValueType::TYPE_STRINGS); |
| + WriteBinary(static_cast<SizeType>(value.size())); |
| + for (const auto& str : value) |
| + { |
| + operator<<(str); |
| + } |
| + return *this; |
| + } |
| + |
| template<class T> |
| OutputBuffer& Write(const T value, ValueType type) |
| { |