#ifndef SERIALBUFFERADAPTER_H_ #define SERIALBUFFERADAPTER_H_ #include #include /** * This adapter provides an interface for SerializeIF to serialize or deserialize * buffers with no length header but a known size. * * Additionally, the buffer length can be serialized too and will be put in * front of the serialized buffer. * * Can be used with SerialLinkedListAdapter by declaring a SerializeElement with * SerialElement>. * Right now, the SerialBufferAdapter must always * be initialized with the buffer and size ! * * \ingroup serialize */ template class SerialBufferAdapter: public SerializeIF { public: /** * Constructor for constant uint8_t buffer. Length field can be serialized optionally. * Type of length can be supplied as template type. * @param buffer * @param bufferLength * @param serializeLength */ SerialBufferAdapter(const uint8_t* buffer, count_t bufferLength, bool serializeLength = false); /** * Constructor for non-constant uint8_t buffer. * Length field can be serialized optionally. * Type of length can be supplied as template type. * @param buffer * @param bufferLength * @param serializeLength Length field will be serialized with size count_t */ SerialBufferAdapter(uint8_t* buffer, count_t bufferLength, bool serializeLength = false); virtual ~SerialBufferAdapter(); virtual ReturnValue_t serialize(uint8_t** buffer_, size_t* size, const size_t max_size, bool bigEndian) const override; virtual size_t getSerializedSize() const; /** * @brief This function deserializes a buffer into the member buffer. * @details * If a length field is present, it is ignored, as the size should have * been set in the constructor. If the size is not known beforehand, * consider using SerialFixedArrayListAdapter instead. * @param buffer [out] Resulting buffer * @param size remaining size to deserialize, should be larger than buffer * + size field size * @param bigEndian * @return */ virtual ReturnValue_t deSerialize(const uint8_t** buffer, size_t* size, bool bigEndian) override; uint8_t * getBuffer(); const uint8_t * getConstBuffer(); void setBuffer(uint8_t* buffer_, count_t bufferLength_); private: bool serializeLength = false; const uint8_t *constBuffer = nullptr; uint8_t *buffer = nullptr; count_t bufferLength = 0; }; #endif /* SERIALBUFFERADAPTER_H_ */