added support for struct members being maps with enums as key
authorStefan Laner <laner@itestra.de>
Tue, 29 Oct 2013 09:26:05 +0000 (10:26 +0100)
committerStefan Laner <laner@itestra.de>
Tue, 29 Oct 2013 09:40:11 +0000 (10:40 +0100)
Change-Id: I6f9397a27eb8db5e8071c6feb18ab8491b50f10c

src/CommonAPI/InputStream.h
src/CommonAPI/OutputStream.h
src/CommonAPI/types.h

index e7c3e10..feaa984 100644 (file)
@@ -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
index 3251ad1..80a0f0b 100644 (file)
@@ -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_
index ffc338c..b81cf5d 100644 (file)
@@ -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_