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.h341
1 files changed, 0 insertions, 341 deletions
diff --git a/src/CommonAPI/InputStream.h b/src/CommonAPI/InputStream.h
deleted file mode 100644
index 786a991..0000000
--- a/src/CommonAPI/InputStream.h
+++ /dev/null
@@ -1,341 +0,0 @@
-/* Copyright (C) 2013 BMW Group
- * Author: Manfred Bathelt (manfred.bathelt@bmw.de)
- * Author: Juergen Gehring (juergen.gehring@bmw.de)
- * This Source Code Form is subject to the terms of the Mozilla Public
- * License, v. 2.0. If a copy of the MPL was not distributed with this
- * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
-
-#if !defined (COMMONAPI_INTERNAL_COMPILATION)
-#error "Only <CommonAPI/CommonAPI.h> can be included directly, this file may disappear or change contents."
-#endif
-
-#ifndef COMMONAPI_INPUT_STREAM_H_
-#define COMMONAPI_INPUT_STREAM_H_
-
-#include "ByteBuffer.h"
-#include "SerializableStruct.h"
-#include "SerializableVariant.h"
-#include "types.h"
-
-#include <cstdint>
-#include <functional>
-#include <memory>
-#include <string>
-#include <unordered_map>
-#include <vector>
-#include <type_traits>
-
-namespace CommonAPI {
-
-class InputStream {
-public:
- virtual ~InputStream() {}
- virtual bool hasError() const = 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(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(std::string& stringValue) = 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;
-
- template<typename _EnumBackingType, typename _EnumType>
- InputStream& readEnumValue(_EnumType& enumValue);
-
- virtual InputStream& readVersionValue(Version& versionValue) = 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 readSerializableVariant(SerializableVariant& serializableVariant) = 0;
-
- virtual char* readRawData(const size_t numBytesToRead) = 0;
-
- virtual void beginReadBoolVector() = 0;
- virtual void beginReadInt8Vector() = 0;
- virtual void beginReadInt16Vector() = 0;
- virtual void beginReadInt32Vector() = 0;
- virtual void beginReadInt64Vector() = 0;
- virtual void beginReadUInt8Vector() = 0;
- virtual void beginReadUInt16Vector() = 0;
- virtual void beginReadUInt32Vector() = 0;
- virtual void beginReadUInt64Vector() = 0;
- virtual void beginReadFloatVector() = 0;
- virtual void beginReadDoubleVector() = 0;
- virtual void beginReadStringVector() = 0;
- virtual void beginReadByteBufferVector() = 0;
- virtual void beginReadVersionVector() = 0;
-
- virtual void beginReadInt8EnumVector() = 0;
- virtual void beginReadInt16EnumVector() = 0;
- virtual void beginReadInt32EnumVector() = 0;
- virtual void beginReadInt64EnumVector() = 0;
- virtual void beginReadUInt8EnumVector() = 0;
- virtual void beginReadUInt16EnumVector() = 0;
- virtual void beginReadUInt32EnumVector() = 0;
- virtual void beginReadUInt64EnumVector() = 0;
-
- virtual void beginReadVectorOfSerializableStructs() = 0;
- virtual void beginReadVectorOfSerializableVariants() = 0;
- 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;
-};
-
-template<typename _EnumBackingType, typename _EnumType>
-InputStream& InputStream::readEnumValue(_EnumType& enumValue) {
- _EnumBackingType enumBackingValue;
-
- readEnumValue(enumBackingValue);
- enumValue = static_cast<_EnumType>(enumBackingValue);
-
- return *this;
-}
-
-InputStream& operator>>(InputStream& inputStream, bool& boolValue);
-
-InputStream& operator>>(InputStream& inputStream, int8_t& int8Value);
-
-InputStream& operator>>(InputStream& inputStream, int16_t& int16Value);
-
-InputStream& operator>>(InputStream& inputStream, int32_t& int32Value);
-
-InputStream& operator>>(InputStream& inputStream, int64_t& int64Value);
-
-InputStream& operator>>(InputStream& inputStream, uint8_t& uint8Value);
-
-InputStream& operator>>(InputStream& inputStream, uint16_t& uint16Value);
-
-InputStream& operator>>(InputStream& inputStream, uint32_t& uint32Value);
-
-InputStream& operator>>(InputStream& inputStream, uint64_t& uint64Value);
-
-InputStream& operator>>(InputStream& inputStream, float& floatValue);
-
-InputStream& operator>>(InputStream& inputStream, double& doubleValue);
-
-InputStream& operator>>(InputStream& inputStream, std::string& stringValue);
-
-InputStream& operator>>(InputStream& inputStream, Version& versionValue);
-
-InputStream& operator>>(InputStream& inputStream, SerializableStruct& serializableStruct);
-
-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;
-}
-
-InputStream& operator>>(InputStream& inputStream, SerializableVariant& serializableVariant);
-
-template<typename _VectorElementType>
-class InputStreamGenericTypeVectorHelper {
-public:
- static void beginReadVector(InputStream& inputStream, const std::vector<_VectorElementType>& vectorValue) {
- doBeginReadVector(inputStream, vectorValue);
- }
-
-private:
- static inline void doBeginReadVector(InputStream& inputStream, const std::vector<bool>& vectorValue) {
- inputStream.beginReadBoolVector();
- }
- static inline void doBeginReadVector(InputStream& inputStream, const std::vector<int8_t>& vectorValue) {
- inputStream.beginReadInt8Vector();
- }
- static inline void doBeginReadVector(InputStream& inputStream, const std::vector<int16_t>& vectorValue) {
- inputStream.beginReadInt16Vector();
- }
- static inline void doBeginReadVector(InputStream& inputStream, const std::vector<int32_t>& vectorValue) {
- inputStream.beginReadInt32Vector();
- }
- static inline void doBeginReadVector(InputStream& inputStream, const std::vector<int64_t>& vectorValue) {
- inputStream.beginReadInt64Vector();
- }
- static inline void doBeginReadVector(InputStream& inputStream, const std::vector<uint8_t>& vectorValue) {
- inputStream.beginReadUInt8Vector();
- }
- static inline void doBeginReadVector(InputStream& inputStream, const std::vector<uint16_t>& vectorValue) {
- inputStream.beginReadUInt16Vector();
- }
- static inline void doBeginReadVector(InputStream& inputStream, const std::vector<uint32_t>& vectorValue) {
- inputStream.beginReadUInt32Vector();
- }
- static inline void doBeginReadVector(InputStream& inputStream, const std::vector<uint64_t>& vectorValue) {
- inputStream.beginReadUInt64Vector();
- }
- static inline void doBeginReadVector(InputStream& inputStream, const std::vector<float>& vectorValue) {
- inputStream.beginReadFloatVector();
- }
- static inline void doBeginReadVector(InputStream& inputStream, const std::vector<double>& vectorValue) {
- inputStream.beginReadDoubleVector();
- }
- static inline void doBeginReadVector(InputStream& inputStream, const std::vector<std::string>& vectorValue) {
- inputStream.beginReadStringVector();
- }
- static inline void doBeginReadVector(InputStream& inputStream, const std::vector<ByteBuffer>& vectorValue) {
- inputStream.beginReadByteBufferVector();
- }
- static inline void doBeginReadVector(InputStream& inputStream, const std::vector<Version>& vectorValue) {
- 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) {
- inputStream.beginReadVectorOfVectors();
- }
-
- template<typename _InnerKeyType, typename _InnerValueType, typename _InnerHashType>
- static inline void doBeginReadVector(InputStream& inputStream,
- const std::vector<std::unordered_map<_InnerKeyType, _InnerValueType, _InnerHashType>>& vectorValue) {
- inputStream.beginReadVectorOfMaps();
- }
-
- template<typename _InnerKeyType, typename _InnerValueType>
- static inline void doBeginReadVector(InputStream& inputStream,
- const std::vector<std::unordered_map<_InnerKeyType, _InnerValueType>>& vectorValue) {
- inputStream.beginReadVectorOfMaps();
- }
-};
-
-template<typename _VectorElementType, bool _IsSerializableStruct = false>
-struct InputStreamSerializableStructVectorHelper: InputStreamGenericTypeVectorHelper<_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>
-struct InputStreamSerializableVariantVectorHelper: InputStreamSerializableStructVectorHelper<_VectorElementType,
- std::is_base_of<SerializableStruct, _VectorElementType>::value> {
-};
-
-template<typename _VectorElementType>
-struct InputStreamSerializableVariantVectorHelper<_VectorElementType, true> {
- static void beginReadVector(InputStream& inputStream, const std::vector<_VectorElementType>& vectorValue) {
- inputStream.beginReadVectorOfSerializableVariants();
- }
-};
-
-template<typename _VectorElementType>
-struct InputStreamVectorHelper: InputStreamSerializableVariantVectorHelper<_VectorElementType,
- std::is_base_of<SerializableVariant, _VectorElementType>::value> {
-};
-
-/**
- * Handles all reading of vectors from a given #InputStream. The given vector may contain any types for which a
- * (specialized) operator>>() is provided. For basic types, such an operator already is provided as a templated operator.
- * The vector does not need to be initialized in any way.
- *
- * @tparam _ElementType The type of the values that are contained in the vector that is to be read from the given stream.
- * @param val The vector in which the retrieved values are to be stored
- * @param inputStream The stream which the vector is to be read from
- * @return The given inputStream to allow for successive reading
- */
-template<typename _VectorElementType>
-InputStream& operator>>(InputStream& inputStream, std::vector<_VectorElementType>& vectorValue) {
- InputStreamVectorHelper<_VectorElementType>::beginReadVector(inputStream, vectorValue);
-
- while (inputStream.hasMoreVectorElements()) {
- _VectorElementType element;
-
- inputStream >> element;
-
- if (inputStream.hasError())
- break;
-
- vectorValue.push_back(std::move(element));
- }
-
- inputStream.endReadVector();
- 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;
-
- inputStream.beginReadMap();
-
- while (inputStream.hasMoreMapElements()) {
- _KeyType elementKey;
- _ValueType elementValue;
-
- inputStream.beginReadMapElement();
- inputStream >> elementKey >> elementValue;
- inputStream.endReadMapElement();
-
- if (inputStream.hasError())
- break;
-
- mapValue.insert(MapValueType(std::move(elementKey), std::move(elementValue)));
- }
-
- inputStream.endReadMap();
- return inputStream;
-}
-
-} // namespace CommonAPI
-
-#endif // COMMONAPI_INPUT_STREAM_H_