diff options
Diffstat (limited to 'src/CommonAPI/InputStream.h')
-rw-r--r-- | src/CommonAPI/InputStream.h | 182 |
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; } |