jaffarCommon
Loading...
Searching...
No Matches
serializers/contiguous.hpp
Go to the documentation of this file.
1#pragma once
2
8#include "../exceptions.hpp"
9#include "base.hpp"
10#include <limits>
11#include <string.h>
12
13namespace jaffarCommon
14{
15
16namespace serializer
17{
18
23class Contiguous final : public serializer::Base
24{
25public:
32 Contiguous(void* __restrict outputDataBuffer = nullptr, const size_t outputDataBufferSize = std::numeric_limits<uint32_t>::max())
33 : serializer::Base(outputDataBuffer, outputDataBufferSize)
34 {
35 }
36
37 ~Contiguous() = default;
38
39 __JAFFAR_COMMON__INLINE__ void pushContiguous(const void* const __restrict inputDataBuffer = nullptr, const size_t inputDataSize = 0) override
40 {
41 // Making sure we do not exceed the maximum size estipulated
42 if (_outputDataBufferPos + inputDataSize > _outputDataBufferSize)
43 JAFFAR_THROW_RUNTIME("Maximum output data position (%lu) reached before contiguous serialization from pos (%lu) and input size (%lu)", _outputDataBufferSize,
44 _outputDataBufferPos, inputDataSize);
45
46 // Only perform memcpy if the output block is not null
47 if (_outputDataBuffer != nullptr && inputDataBuffer != nullptr) memcpy(&_outputDataBuffer[_outputDataBufferPos], inputDataBuffer, inputDataSize);
48
49 // Moving output data pointer position
50 _outputDataBufferPos += inputDataSize;
51 }
52
53 __JAFFAR_COMMON__INLINE__ void push(const void* const __restrict inputDataBuffer, const size_t inputDataSize) override { pushContiguous(inputDataBuffer, inputDataSize); }
54};
55
56} // namespace serializer
57
58} // namespace jaffarCommon
Definition serializers/base.hpp:24
size_t _outputDataBufferPos
Definition serializers/base.hpp:84
const size_t _outputDataBufferSize
Definition serializers/base.hpp:79
uint8_t *__restrict const _outputDataBuffer
Definition serializers/base.hpp:74
Definition serializers/contiguous.hpp:24
__JAFFAR_COMMON__INLINE__ void pushContiguous(const void *const __restrict inputDataBuffer=nullptr, const size_t inputDataSize=0) override
Definition serializers/contiguous.hpp:39
__JAFFAR_COMMON__INLINE__ void push(const void *const __restrict inputDataBuffer, const size_t inputDataSize) override
Definition serializers/contiguous.hpp:53
Contiguous(void *__restrict outputDataBuffer=nullptr, const size_t outputDataBufferSize=std::numeric_limits< uint32_t >::max())
Definition serializers/contiguous.hpp:32
#define JAFFAR_THROW_RUNTIME(...)
Definition exceptions.hpp:22
Contains the base class for the data serializers.