summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorStefan Laner <laner@itestra.de>2013-10-29 10:26:05 +0100
committerStefan Laner <laner@itestra.de>2013-10-29 10:40:11 +0100
commit9beb2a82f63afc8f48f4be651e0c8d124ad6f237 (patch)
treeb77963cc2b256e180cb0412acecf5dc7495e8cc8
parent3fa9c2af5733657c1c3bf48a0a2d38525c16f6ed (diff)
downloadgenivi-common-api-runtime-9beb2a82f63afc8f48f4be651e0c8d124ad6f237.tar.gz
added support for struct members being maps with enums as key
Change-Id: I6f9397a27eb8db5e8071c6feb18ab8491b50f10c
-rw-r--r--src/CommonAPI/InputStream.h33
-rw-r--r--src/CommonAPI/OutputStream.h33
-rw-r--r--src/CommonAPI/types.h9
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_