8#include "../exceptions.hpp"
10#include <xdelta3/xdelta3.h>
35 Differential(
const void* __restrict inputDataBuffer =
nullptr,
const size_t inputDataBufferSize = std::numeric_limits<uint32_t>::max(),
36 const void* __restrict referenceDataBuffer =
nullptr,
const size_t referenceDataBufferSize = std::numeric_limits<uint32_t>::max(),
const bool useZlib =
false)
37 : deserializer::
Base(inputDataBuffer, inputDataBufferSize)
38 , _referenceDataBuffer((const uint8_t*)referenceDataBuffer)
39 , _referenceDataBufferSize(referenceDataBufferSize)
46 __JAFFAR_COMMON__INLINE__
void popContiguous(
void*
const __restrict outputDataBuffer,
const size_t outputDataSize)
override
52 if (_referenceDataBufferPos + outputDataSize > _referenceDataBufferSize)
53 JAFFAR_THROW_RUNTIME(
"[Error] Maximum reference data position to be exceeded on contiguous deserialization (%lu + %lu > %lu)", _referenceDataBufferPos, outputDataSize,
54 _referenceDataBufferSize);
63 _referenceDataBufferPos += outputDataSize;
66 __JAFFAR_COMMON__INLINE__
void pop(
void*
const __restrict outputDataBuffer,
const size_t outputDataSize)
override
74 const size_t differentialBufferSize =
sizeof(usize_t);
85 if (_referenceDataBufferPos + outputDataSize > _referenceDataBufferSize)
86 JAFFAR_THROW_RUNTIME(
"[Error] Maximum reference data position exceeded before differential decode (%lu + %lu > %lu)", _referenceDataBufferPos, outputDataSize,
87 _referenceDataBufferSize);
92 &output_size, outputDataSize, _useZlib ? 0 : XD3_NOCOMPRESS);
97 "[Error] unexpected error while decoding differential decompression. Probably maximum input data position reached after differential decode (%lu + %lu > %lu)",
104 _differentialBytesCount += diffCount;
107 _referenceDataBufferPos += outputDataSize;
130 const uint8_t* __restrict
const _referenceDataBuffer;
135 const size_t _referenceDataBufferSize;
140 size_t _referenceDataBufferPos = 0;
145 size_t _differentialBytesCount = 0;
Definition deserializers/base.hpp:24
size_t _inputDataBufferPos
Definition deserializers/base.hpp:84
const size_t _inputDataBufferSize
Definition deserializers/base.hpp:79
const uint8_t *__restrict const _inputDataBuffer
Definition deserializers/base.hpp:74
Definition deserializers/differential.hpp:24
__JAFFAR_COMMON__INLINE__ void pop(void *const __restrict outputDataBuffer, const size_t outputDataSize) override
Definition deserializers/differential.hpp:66
size_t getDifferentialBytesCount() const
Definition deserializers/differential.hpp:124
size_t getReferenceDataBufferPos() const
Definition deserializers/differential.hpp:115
Differential(const void *__restrict inputDataBuffer=nullptr, const size_t inputDataBufferSize=std::numeric_limits< uint32_t >::max(), const void *__restrict referenceDataBuffer=nullptr, const size_t referenceDataBufferSize=std::numeric_limits< uint32_t >::max(), const bool useZlib=false)
Definition deserializers/differential.hpp:35
__JAFFAR_COMMON__INLINE__ void popContiguous(void *const __restrict outputDataBuffer, const size_t outputDataSize) override
Definition deserializers/differential.hpp:46
#define JAFFAR_THROW_RUNTIME(...)
Definition exceptions.hpp:22
Contains the base class for the data serializers.