diff options
author | Stefan Laner <laner@itestra.de> | 2013-10-29 10:26:05 +0100 |
---|---|---|
committer | Stefan Laner <laner@itestra.de> | 2013-10-29 10:40:11 +0100 |
commit | 9beb2a82f63afc8f48f4be651e0c8d124ad6f237 (patch) | |
tree | b77963cc2b256e180cb0412acecf5dc7495e8cc8 /src/CommonAPI | |
parent | 3fa9c2af5733657c1c3bf48a0a2d38525c16f6ed (diff) | |
download | genivi-common-api-runtime-9beb2a82f63afc8f48f4be651e0c8d124ad6f237.tar.gz |
added support for struct members being maps with enums as key
Change-Id: I6f9397a27eb8db5e8071c6feb18ab8491b50f10c
Diffstat (limited to 'src/CommonAPI')
-rw-r--r-- | src/CommonAPI/InputStream.h | 33 | ||||
-rw-r--r-- | src/CommonAPI/OutputStream.h | 33 | ||||
-rw-r--r-- | src/CommonAPI/types.h | 9 |
3 files changed, 41 insertions, 34 deletions
diff --git a/src/CommonAPI/InputStream.h b/src/CommonAPI/InputStream.h index e7c3e10..feaa984 100644 --- a/src/CommonAPI/InputStream.h +++ b/src/CommonAPI/InputStream.h @@ -332,30 +332,29 @@ InputStream& operator>>(InputStream& inputStream, std::vector<_VectorElementType return inputStream; } +template<typename _KeyType, typename _ValueType, typename _HasherType> +InputStream& operator>>(InputStream& inputStream, std::unordered_map<_KeyType, _ValueType, _HasherType>& mapValue) { + typedef typename std::unordered_map<_KeyType, _ValueType, _HasherType>::value_type MapValueType; -template<typename _KeyType, typename _ValueType> -InputStream& operator>>(InputStream& inputStream, std::unordered_map<_KeyType, _ValueType>& mapValue) { - typedef typename std::unordered_map<_KeyType, _ValueType>::value_type MapValueType; + inputStream.beginReadMap(); - inputStream.beginReadMap(); + while (inputStream.hasMoreMapElements()) { + _KeyType elementKey; + _ValueType elementValue; - while (inputStream.hasMoreMapElements()) { - _KeyType elementKey; - _ValueType elementValue; + inputStream.beginReadMapElement(); + inputStream >> elementKey >> elementValue; + inputStream.endReadMapElement(); - inputStream.beginReadMapElement(); - inputStream >> elementKey >> elementValue; - inputStream.endReadMapElement(); - - if (inputStream.hasError()) - break; + if (inputStream.hasError()) + break; - mapValue.insert(MapValueType(std::move(elementKey), std::move(elementValue))); - } + mapValue.insert(MapValueType(std::move(elementKey), std::move(elementValue))); + } - inputStream.endReadMap(); + inputStream.endReadMap(); - return inputStream; + return inputStream; } } // namespace CommonAPI diff --git a/src/CommonAPI/OutputStream.h b/src/CommonAPI/OutputStream.h index 3251ad1..80a0f0b 100644 --- a/src/CommonAPI/OutputStream.h +++ b/src/CommonAPI/OutputStream.h @@ -528,31 +528,30 @@ OutputStream& operator<<(OutputStream& outputStream, const std::vector<_VectorEl } outputStream.endWriteVector(); - return outputStream; + return outputStream; } +template<typename _KeyType, typename _ValueType, typename _HasherType> +OutputStream& operator<<(OutputStream& outputStream, + const std::unordered_map<_KeyType, _ValueType, _HasherType>& mapValue) { + typedef typename std::unordered_map<_KeyType, _ValueType, _HasherType>::const_iterator MapConstIterator; -template<typename _KeyType, typename _ValueType> -OutputStream& operator<<(OutputStream& outputStream, const std::unordered_map<_KeyType, _ValueType>& mapValue) { - typedef typename std::unordered_map<_KeyType, _ValueType>::const_iterator MapConstIterator; - - const size_t elementCount = mapValue.size(); - outputStream.beginWriteMap(elementCount); + const size_t elementCount = mapValue.size(); + outputStream.beginWriteMap(elementCount); - for (MapConstIterator iter = mapValue.cbegin(); iter != mapValue.cend(); iter++) { - outputStream.beginWriteMapElement(); - outputStream << iter->first << iter->second; - if (outputStream.hasError()) - return outputStream; - outputStream.endWriteMapElement(); - } + for (MapConstIterator iter = mapValue.cbegin(); iter != mapValue.cend(); iter++) { + outputStream.beginWriteMapElement(); + outputStream << iter->first << iter->second; + if (outputStream.hasError()) + return outputStream; + outputStream.endWriteMapElement(); + } - outputStream.endWriteMap(); + outputStream.endWriteMap(); - return outputStream; + return outputStream; } - } // namespace CommonAPI #endif // COMMONAPI_OUTPUT_STREAM_H_ diff --git a/src/CommonAPI/types.h b/src/CommonAPI/types.h index ffc338c..b81cf5d 100644 --- a/src/CommonAPI/types.h +++ b/src/CommonAPI/types.h @@ -83,6 +83,15 @@ struct SelectiveBroadcastSubscriptionResult { }; +template<typename _EnumType> +class EnumHasher { +public: + inline size_t operator()(const _EnumType& testEnum) const { + return static_cast<int32_t>(testEnum); + } + +}; + } // namespace CommonAPI #endif // COMMONAPI_TYPES_H_ |