summaryrefslogtreecommitdiff
path: root/src/CommonAPI/InputStream.h
diff options
context:
space:
mode:
Diffstat (limited to 'src/CommonAPI/InputStream.h')
-rw-r--r--src/CommonAPI/InputStream.h182
1 files changed, 95 insertions, 87 deletions
diff --git a/src/CommonAPI/InputStream.h b/src/CommonAPI/InputStream.h
index feaa984..6f3444e 100644
--- a/src/CommonAPI/InputStream.h
+++ b/src/CommonAPI/InputStream.h
@@ -28,48 +28,48 @@
namespace CommonAPI {
class InputStream {
- public:
- virtual ~InputStream() { }
+public:
+ virtual ~InputStream() {}
virtual bool hasError() const = 0;
- virtual InputStream& readValue(bool& boolValue) = 0;
+ virtual InputStream& readValue(bool& boolValue) = 0;
- virtual InputStream& readValue(int8_t& int8Value) = 0;
- virtual InputStream& readValue(int16_t& int16Value) = 0;
- virtual InputStream& readValue(int32_t& int32Value) = 0;
- virtual InputStream& readValue(int64_t& int64Value) = 0;
+ virtual InputStream& readValue(int8_t& int8Value) = 0;
+ virtual InputStream& readValue(int16_t& int16Value) = 0;
+ virtual InputStream& readValue(int32_t& int32Value) = 0;
+ virtual InputStream& readValue(int64_t& int64Value) = 0;
- virtual InputStream& readValue(uint8_t& uint8Value) = 0;
- virtual InputStream& readValue(uint16_t& uint16Value) = 0;
- virtual InputStream& readValue(uint32_t& uint32Value) = 0;
- virtual InputStream& readValue(uint64_t& uint64Value) = 0;
+ virtual InputStream& readValue(uint8_t& uint8Value) = 0;
+ virtual InputStream& readValue(uint16_t& uint16Value) = 0;
+ virtual InputStream& readValue(uint32_t& uint32Value) = 0;
+ virtual InputStream& readValue(uint64_t& uint64Value) = 0;
- virtual InputStream& readValue(float& floatValue) = 0;
- virtual InputStream& readValue(double& doubleValue) = 0;
+ virtual InputStream& readValue(float& floatValue) = 0;
+ virtual InputStream& readValue(double& doubleValue) = 0;
- virtual InputStream& readValue(std::string& stringValue) = 0;
+ virtual InputStream& readValue(std::string& stringValue) = 0;
- virtual InputStream& readValue(ByteBuffer& byteBufferValue) = 0;
+ virtual InputStream& readValue(ByteBuffer& byteBufferValue) = 0;
- virtual InputStream& readEnumValue(int8_t& int8BackingTypeValue) = 0;
- virtual InputStream& readEnumValue(int16_t& int16BackingTypeValue) = 0;
- virtual InputStream& readEnumValue(int32_t& int32BackingTypeValue) = 0;
- virtual InputStream& readEnumValue(int64_t& int64BackingTypeValue) = 0;
- virtual InputStream& readEnumValue(uint8_t& uint8BackingTypeValue) = 0;
- virtual InputStream& readEnumValue(uint16_t& uint16BackingTypeValue) = 0;
- virtual InputStream& readEnumValue(uint32_t& uint32BackingTypeValue) = 0;
- virtual InputStream& readEnumValue(uint64_t& uint64BackingTypeValue) = 0;
+ virtual InputStream& readEnumValue(int8_t& int8BackingTypeValue) = 0;
+ virtual InputStream& readEnumValue(int16_t& int16BackingTypeValue) = 0;
+ virtual InputStream& readEnumValue(int32_t& int32BackingTypeValue) = 0;
+ virtual InputStream& readEnumValue(int64_t& int64BackingTypeValue) = 0;
+ virtual InputStream& readEnumValue(uint8_t& uint8BackingTypeValue) = 0;
+ virtual InputStream& readEnumValue(uint16_t& uint16BackingTypeValue) = 0;
+ virtual InputStream& readEnumValue(uint32_t& uint32BackingTypeValue) = 0;
+ virtual InputStream& readEnumValue(uint64_t& uint64BackingTypeValue) = 0;
- template <typename _EnumBackingType, typename _EnumType>
- inline InputStream& readEnumValue(_EnumType& enumValue);
+ template<typename _EnumBackingType, typename _EnumType>
+ inline InputStream& readEnumValue(_EnumType& enumValue);
- virtual InputStream& readVersionValue(Version& versionValue) = 0;
+ virtual InputStream& readVersionValue(Version& versionValue) = 0;
- virtual void beginReadSerializableStruct(const SerializableStruct& serializableStruct) = 0;
- virtual void endReadSerializableStruct(const SerializableStruct& serializableStruct) = 0;
+ virtual void beginReadSerializableStruct(const SerializableStruct& serializableStruct) = 0;
+ virtual void endReadSerializableStruct(const SerializableStruct& serializableStruct) = 0;
- virtual void beginReadSerializablePolymorphicStruct(uint32_t& serialId) = 0;
- virtual void endReadSerializablePolymorphicStruct(const uint32_t& serialId) = 0;
+ virtual void beginReadSerializablePolymorphicStruct(uint32_t& serialId) = 0;
+ virtual void endReadSerializablePolymorphicStruct(const uint32_t& serialId) = 0;
virtual void readSerializableVariant(SerializableVariant& serializableVariant) = 0;
@@ -104,77 +104,78 @@ class InputStream {
virtual void beginReadVectorOfVectors() = 0;
virtual void beginReadVectorOfMaps() = 0;
+ virtual void beginReadVectorOfSerializablePolymorphicStructs() = 0;
+
virtual bool hasMoreVectorElements() = 0;
virtual void endReadVector() = 0;
- virtual void beginReadMap() = 0;
- virtual bool hasMoreMapElements() = 0;
- virtual void endReadMap() = 0;
- virtual void beginReadMapElement() = 0;
- virtual void endReadMapElement() = 0;
+ 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>
+template<typename _EnumBackingType, typename _EnumType>
InputStream& InputStream::readEnumValue(_EnumType& enumValue) {
- _EnumBackingType enumBackingValue;
+ _EnumBackingType enumBackingValue;
- readEnumValue(enumBackingValue);
- enumValue = static_cast<_EnumType>(enumBackingValue);
+ readEnumValue(enumBackingValue);
+ enumValue = static_cast<_EnumType>(enumBackingValue);
- return *this;
+ return *this;
}
-
inline InputStream& operator>>(InputStream& inputStream, bool& boolValue) {
- return inputStream.readValue(boolValue);
+ return inputStream.readValue(boolValue);
}
inline InputStream& operator>>(InputStream& inputStream, int8_t& int8Value) {
- return inputStream.readValue(int8Value);
+ return inputStream.readValue(int8Value);
}
inline InputStream& operator>>(InputStream& inputStream, int16_t& int16Value) {
- return inputStream.readValue(int16Value);
+ return inputStream.readValue(int16Value);
}
inline InputStream& operator>>(InputStream& inputStream, int32_t& int32Value) {
- return inputStream.readValue(int32Value);
+ return inputStream.readValue(int32Value);
}
inline InputStream& operator>>(InputStream& inputStream, int64_t& int64Value) {
- return inputStream.readValue(int64Value);
+ return inputStream.readValue(int64Value);
}
inline InputStream& operator>>(InputStream& inputStream, uint8_t& uint8Value) {
- return inputStream.readValue(uint8Value);
+ return inputStream.readValue(uint8Value);
}
inline InputStream& operator>>(InputStream& inputStream, uint16_t& uint16Value) {
- return inputStream.readValue(uint16Value);
+ return inputStream.readValue(uint16Value);
}
inline InputStream& operator>>(InputStream& inputStream, uint32_t& uint32Value) {
- return inputStream.readValue(uint32Value);
+ return inputStream.readValue(uint32Value);
}
inline InputStream& operator>>(InputStream& inputStream, uint64_t& uint64Value) {
- return inputStream.readValue(uint64Value);
+ return inputStream.readValue(uint64Value);
}
inline InputStream& operator>>(InputStream& inputStream, float& floatValue) {
- return inputStream.readValue(floatValue);
+ return inputStream.readValue(floatValue);
}
inline InputStream& operator>>(InputStream& inputStream, double& doubleValue) {
- return inputStream.readValue(doubleValue);
+ return inputStream.readValue(doubleValue);
}
inline InputStream& operator>>(InputStream& inputStream, std::string& stringValue) {
- return inputStream.readValue(stringValue);
+ return inputStream.readValue(stringValue);
}
inline InputStream& operator>>(InputStream& inputStream, Version& versionValue) {
- return inputStream.readVersionValue(versionValue);
+ return inputStream.readVersionValue(versionValue);
}
inline InputStream& operator>>(InputStream& inputStream, SerializableStruct& serializableStruct) {
@@ -185,23 +186,25 @@ inline InputStream& operator>>(InputStream& inputStream, SerializableStruct& ser
return inputStream;
}
-template <typename _SerializablePolymorphicStructType>
-typename std::enable_if<std::is_base_of<SerializablePolymorphicStruct, _SerializablePolymorphicStructType>::value, InputStream>::type&
-operator>>(InputStream& inputStream, std::shared_ptr<_SerializablePolymorphicStructType>& serializablePolymorphicStruct) {
- uint32_t serialId;
-
- inputStream.beginReadSerializablePolymorphicStruct(serialId);
- if (!inputStream.hasError()) {
- _SerializablePolymorphicStructType* instancePtr = _SerializablePolymorphicStructType::createInstance(serialId);
- serializablePolymorphicStruct.reset(instancePtr);
- if (instancePtr != NULL) {
- instancePtr->readFromInputStream(inputStream);
- }
-
- inputStream.endReadSerializablePolymorphicStruct(serialId);
- }
+template<typename _SerializablePolymorphicStructType>
+typename std::enable_if<std::is_base_of<SerializablePolymorphicStruct, _SerializablePolymorphicStructType>::value,
+ InputStream>::type&
+operator>>(InputStream& inputStream,
+ std::shared_ptr<_SerializablePolymorphicStructType>& serializablePolymorphicStruct) {
+ uint32_t serialId;
+
+ inputStream.beginReadSerializablePolymorphicStruct(serialId);
+ if (!inputStream.hasError()) {
+ _SerializablePolymorphicStructType* instancePtr = _SerializablePolymorphicStructType::createInstance(serialId);
+ serializablePolymorphicStruct.reset(instancePtr);
+ if (instancePtr != NULL) {
+ instancePtr->readFromInputStream(inputStream);
+ }
+
+ inputStream.endReadSerializablePolymorphicStruct(serialId);
+ }
- return inputStream;
+ return inputStream;
}
inline InputStream& operator>>(InputStream& inputStream, SerializableVariant& serializableVariant) {
@@ -209,15 +212,14 @@ inline InputStream& operator>>(InputStream& inputStream, SerializableVariant& se
return inputStream;
}
-
-template <typename _VectorElementType>
+template<typename _VectorElementType>
class InputStreamGenericTypeVectorHelper {
- public:
+public:
static void beginReadVector(InputStream& inputStream, const std::vector<_VectorElementType>& vectorValue) {
doBeginReadVector(inputStream, vectorValue);
}
- private:
+private:
static inline void doBeginReadVector(InputStream& inputStream, const std::vector<bool>& vectorValue) {
inputStream.beginReadBoolVector();
}
@@ -261,46 +263,53 @@ class InputStreamGenericTypeVectorHelper {
inputStream.beginReadVersionVector();
}
+ template<typename _PointerType,
+ typename = typename std::enable_if<
+ std::is_base_of<SerializablePolymorphicStruct, _PointerType>::value>::type>
+ static inline void doBeginReadVector(InputStream& inputStream,
+ const std::vector<std::shared_ptr<_PointerType>>& vectorValue) {
+ inputStream.beginReadVectorOfSerializablePolymorphicStructs();
+ }
+
template<typename _InnerVectorElementType>
- static inline void doBeginReadVector(InputStream& inputStream, const std::vector<std::vector<_InnerVectorElementType>>& vectorValue) {
+ static inline void doBeginReadVector(InputStream& inputStream,
+ const std::vector<std::vector<_InnerVectorElementType>>& vectorValue) {
inputStream.beginReadVectorOfVectors();
}
template<typename _InnerKeyType, typename _InnerValueType>
- static inline void doBeginReadVector(InputStream& inputStream, const std::vector<std::unordered_map<_InnerKeyType, _InnerValueType>>& vectorValue) {
+ static inline void doBeginReadVector(InputStream& inputStream,
+ const std::vector<std::unordered_map<_InnerKeyType, _InnerValueType>>& vectorValue) {
inputStream.beginReadVectorOfMaps();
}
};
-
-template <typename _VectorElementType, bool _IsSerializableStruct = false>
+template<typename _VectorElementType, bool _IsSerializableStruct = false>
struct InputStreamSerializableStructVectorHelper: InputStreamGenericTypeVectorHelper<_VectorElementType> {
};
-template <typename _VectorElementType>
+template<typename _VectorElementType>
struct InputStreamSerializableStructVectorHelper<_VectorElementType, true> {
static void beginReadVector(InputStream& inputStream, const std::vector<_VectorElementType>& vectorValue) {
inputStream.beginReadVectorOfSerializableStructs();
}
};
-
-template <typename _VectorElementType, bool _IsSerializableVariant = false>
+template<typename _VectorElementType, bool _IsSerializableVariant = false>
struct InputStreamSerializableVariantVectorHelper: InputStreamSerializableStructVectorHelper<_VectorElementType,
- std::is_base_of<SerializableStruct, _VectorElementType>::value> {
+ std::is_base_of<SerializableStruct, _VectorElementType>::value> {
};
-template <typename _VectorElementType>
+template<typename _VectorElementType>
struct InputStreamSerializableVariantVectorHelper<_VectorElementType, true> {
static void beginReadVector(InputStream& inputStream, const std::vector<_VectorElementType>& vectorValue) {
inputStream.beginReadVectorOfSerializableVariants();
}
};
-
-template <typename _VectorElementType>
+template<typename _VectorElementType>
struct InputStreamVectorHelper: InputStreamSerializableVariantVectorHelper<_VectorElementType,
- std::is_base_of<SerializableVariant, _VectorElementType>::value> {
+ std::is_base_of<SerializableVariant, _VectorElementType>::value> {
};
/**
@@ -353,7 +362,6 @@ InputStream& operator>>(InputStream& inputStream, std::unordered_map<_KeyType, _
}
inputStream.endReadMap();
-
return inputStream;
}