41 #define JASS_COMPRESS_INTEGER_BITS_PER_INTEGER 32 78 static size_t d1_encode(integer *encoded,
const integer *source,
size_t source_integers)
81 const integer *end = source + source_integers;
83 for (
const integer *current = source; current < end; current++)
88 integer d1 = *current - prior;
92 return source_integers;
106 static size_t d1_decode(integer *decoded,
const integer *source,
size_t source_integers)
109 const integer *end = source + source_integers;
111 for (
const integer *current = source; current < end; current++)
117 return source_integers;
132 static size_t dn_encode(integer *encoded,
const integer *source,
size_t source_integers,
size_t n = 1)
140 std::copy(source, source + n, encoded);
145 std::copy(source, source + n, prior);
150 integer *into = encoded + n;
151 const integer *current = source + n;
154 const integer *end = source + source_integers;
155 while (current < end)
157 integer difference = *current - prior[where];
158 prior[where] = *current;
162 where = (where + 1) % n;
165 return source_integers;
180 static size_t dn_decode(integer *decoded,
const integer *source,
size_t source_integers,
size_t n = 1)
185 std::copy(source, source + n, decoded);
190 integer *into = decoded + n;
191 integer *previous = decoded;
192 const integer *current = source + n;
194 const integer *end = decoded + source_integers;
196 *into++ = *previous++ + *current++;
198 return source_integers;
213 virtual size_t encode(
void *encoded,
size_t encoded_buffer_length,
const integer *source,
size_t source_integers) = 0;
226 virtual void decode(integer *decoded,
size_t integers_to_decode,
const void *source,
size_t source_length) = 0;
static size_t d1_encode(integer *encoded, const integer *source, size_t source_integers)
Convert an array of integers into an array of D1 (delta, d-gap) encoded integers. ...
Definition: compress_integer.h:78
static void unittest_one(compress_integer &encoder, const std::vector< uint32_t > &sequence)
Test one sequence to make sure it encodes and decodes to the same thing. Assert if not...
Definition: compress_integer.cpp:21
replacement for the C runtime library assert that also works in release.
virtual ~compress_integer()
Destructor.
Definition: compress_integer.h:62
virtual size_t encode(void *encoded, size_t encoded_buffer_length, const integer *source, size_t source_integers)=0
Encode a sequence of integers returning the number of bytes used for the encoding, or 0 if the encoded sequence doesn't fit in the buffer.
Compression codexes for integer sequences.
Definition: compress_integer.h:34
uint32_t integer
This class and descendants will work on integers of this size. Do not change without also changing JA...
Definition: compress_integer.h:40
#define JASS_assert(expression)
Drop in replacement for assert() that aborts in Release as well as Debug.
Definition: asserts.h:33
compress_integer()
Constructor.
Definition: compress_integer.h:51
static size_t dn_decode(integer *decoded, const integer *source, size_t source_integers, size_t n=1)
Convert a Dn encoded array of integers into an array of integers.
Definition: compress_integer.h:180
static size_t dn_encode(integer *encoded, const integer *source, size_t source_integers, size_t n=1)
Convert an array of integers into an array of Dn (delta, d-gap) encoded integers with a gap of n...
Definition: compress_integer.h:132
virtual void decode(integer *decoded, size_t integers_to_decode, const void *source, size_t source_length)=0
Decode a sequence of integers encoded with this codex.
static constexpr int MAX_D_GAP
this is the maximum D-ness that this code supports, it can be changes to anything that won't reuslt i...
Definition: compress_integer.h:37
Definition: compress_integer_elias_delta_simd.c:23
static void unittest(compress_integer &compressor, uint32_t staring_from=0)
Unit test this class, assert on failure.
Definition: compress_integer.cpp:42
static size_t d1_decode(integer *decoded, const integer *source, size_t source_integers)
Convert a D1 encoded array of integers into an array of integers.
Definition: compress_integer.h:106