InputStream and OutputStream now have a way to recognize beginning/end
authorPhilip Rauwolf <rauwolf@itestra.de>
Fri, 22 Feb 2013 13:35:58 +0000 (14:35 +0100)
committerPhilip Rauwolf <rauwolf@itestra.de>
Fri, 22 Feb 2013 13:35:58 +0000 (14:35 +0100)
of each entry in a map

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

index 82da755..302023d 100644 (file)
@@ -100,6 +100,8 @@ class InputStream {
        virtual void beginReadMap() = 0;
        virtual bool hasMoreMapElements() = 0;
        virtual void endReadMap() = 0;
+       virtual void beginReadMapElement() = 0;
+       virtual void endReadMapElement() = 0;
 };
 
 template <typename _EnumBackingType, typename _EnumType>
@@ -312,7 +314,9 @@ InputStream& operator>>(InputStream& inputStream, std::unordered_map<_KeyType, _
                _KeyType elementKey;
                _ValueType elementValue;
 
+               inputStream.beginReadMapElement();
                inputStream >> elementKey >> elementValue;
+               inputStream.endReadMapElement();
 
                if (inputStream.hasError())
                        break;
index 16bbcc7..fccb31c 100644 (file)
@@ -11,6 +11,8 @@
 #include "SerializableStruct.h"
 #include "SerializableVariant.h"
 #include "types.h"
+#include <unistd.h>
+#include <iostream>
 
 #include <cstdint>
 #include <functional>
@@ -314,6 +316,8 @@ class OutputStream {
 
        virtual void beginWriteMap(size_t elementCount) = 0;
        virtual void endWriteMap() = 0;
+       virtual void beginWriteMapElement() = 0;
+       virtual void endWriteMapElement() = 0;
 };
 
 
@@ -518,14 +522,14 @@ OutputStream& operator<<(OutputStream& outputStream, const std::unordered_map<_K
        typedef typename std::unordered_map<_KeyType, _ValueType>::const_iterator MapConstIterator;
 
        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();
        }
 
        outputStream.endWriteMap();