JASSv2
Public Member Functions | Static Protected Member Functions | Static Protected Attributes | List of all members
compress_integer_elias_gamma_simd_vb Class Reference

Pack 32-bit integers into 512-bit SIMD words using elias gamma with vbyte for short lists. More...

#include <compress_integer_elias_gamma_simd_vb.h>

Inheritance diagram for compress_integer_elias_gamma_simd_vb:
Inheritance graph
[legend]
Collaboration diagram for compress_integer_elias_gamma_simd_vb:
Collaboration graph
[legend]

Public Member Functions

virtual size_t encode (void *encoded, size_t encoded_buffer_length, const integer *source, size_t source_integers)
 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. More...
 
virtual void decode (integer *decoded, size_t integers_to_decode, const void *source, size_t source_length)
 Decode a sequence of integers encoded with this codex. More...
 
virtual long long compress (unsigned char *destination, long long destination_length, uint32_t *source, long long source_integers)
 Decode a sequence of integers encoded with this codex, calling add_rsv for each SIMD register. More...
 
virtual void decompress (uint32_t *destination, unsigned char *source, long long destination_integers)
 
- Public Member Functions inherited from compress_integer_variable_byte
 compress_integer_variable_byte ()
 Constructor.
 
virtual ~compress_integer_variable_byte ()
 Constructor.
 

Static Protected Member Functions

static uint32_t compute_selector (const uint8_t *encodings)
 Computer the selector to use for this encoding. More...
 
static forceinline uint64_t find_first_set_bit (uint64_t value)
 return the position of the least significant set bit (using a single machine code instruction) More...
 

Static Protected Attributes

static const uint32_t mask_set [33][16]
 

Additional Inherited Members

- Public Types inherited from compress_integer_variable_byte
typedef uint32_t integer
 
- Static Public Member Functions inherited from compress_integer_variable_byte
static void static_decode (integer *decoded, size_t integers_to_decode, const void *source_as_void, size_t source_length)
 Decode a sequence of integers encoded with this codex. More...
 
static size_t bytes_needed_for (integer value)
 Decode a sequence of integers encoded with this codex, calling add_rsv for each SIMD register. More...
 
template<typename DESTINATION >
static forceinline void compress_into (DESTINATION &destination, integer value)
 Encode the given integer placing the encoding into destination (whose size is not validated). More...
 
template<typename SOURCE >
static forceinline void decompress_into (integer *decoded, SOURCE &source)
 Decode the given integer placing the encoding into destination (whose size is not validated). More...
 

Detailed Description

Pack 32-bit integers into 512-bit SIMD words using elias gamma with vbyte for short lists.

see: A. Trotman, K. Lilly (2018), Elias Revisited: Group Elias SIMD Coding, Proceedings of The 23rd Australasian Document Computing Symposium (ADCS 2018)

Member Function Documentation

◆ compress()

virtual long long compress_integer_elias_gamma_simd_vb::compress ( unsigned char *  destination,
long long  destination_length,
uint32_t *  source,
long long  source_integers 
)
inlinevirtual

Decode a sequence of integers encoded with this codex, calling add_rsv for each SIMD register.

Parameters
integers_to_decode[in] The minimum number of integers to decode (it may decode more).
source[in] The encoded integers.
source_length[in] The length (in bytes) of the source buffer.

Reimplemented from compress_integer_variable_byte.

◆ compute_selector()

uint32_t compress_integer_elias_gamma_simd_vb::compute_selector ( const uint8_t *  encodings)
staticprotected

Computer the selector to use for this encoding.

Parameters
encodings[in] The width (in bits) of the (at most) 32 integers. The first integer is at encodngs[0]. leading 0s are used to mark fewer than 32 integers.
Returns
The selector encoded as an integer

◆ decode()

void compress_integer_elias_gamma_simd_vb::decode ( integer *  decoded,
size_t  integers_to_decode,
const void *  source,
size_t  source_length 
)
virtual

Decode a sequence of integers encoded with this codex.

Parameters
decoded[out] The sequence of decoded integers.
integers_to_decode[in] The minimum number of integers to decode (it may decode more).
source[in] The encoded integers.
source_length[in] The length (in bytes) of the source buffer.

Reimplemented from compress_integer_variable_byte.

◆ encode()

size_t compress_integer_elias_gamma_simd_vb::encode ( void *  encoded,
size_t  encoded_buffer_length,
const integer *  source,
size_t  source_integers 
)
virtual

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.

Parameters
encoded[out] The sequence of bytes that is the encoded sequence.
encoded_buffer_length[in] The length (in bytes) of the output buffer, encoded.
source[in] The sequence of integers to encode.
source_integers[in] The length (in integers) of the source buffer.
Returns
The number of bytes used to encode the integer sequence, or 0 on error (i.e. overflow).

Reimplemented from compress_integer_variable_byte.

◆ find_first_set_bit()

static forceinline uint64_t compress_integer_elias_gamma_simd_vb::find_first_set_bit ( uint64_t  value)
inlinestaticprotected

return the position of the least significant set bit (using a single machine code instruction)

Parameters
[in]valuethe integer to check.
Returns
The position of the lowest set bit (or 0 if no bits are set)

The documentation for this class was generated from the following files: