JASSv2
Classes | Public Member Functions | Static Public Member Functions | Static Private Attributes | List of all members
JASS::compress_integer_carryover_12 Class Reference

Carryover-12 integer compression. More...

#include <compress_integer_carryover_12.h>

Inheritance diagram for JASS::compress_integer_carryover_12:
Inheritance graph
[legend]
Collaboration diagram for JASS::compress_integer_carryover_12:
Collaboration graph
[legend]

Classes

class  selector
 Details of the 23 selectors used in Carryover-12. More...
 

Public Member Functions

 compress_integer_carryover_12 ()
 Constructor.
 
virtual ~compress_integer_carryover_12 ()
 Destructor.
 
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...
 
- Public Member Functions inherited from JASS::compress_integer_simple_9
 compress_integer_simple_9 ()
 Consructor.
 
virtual ~compress_integer_simple_9 ()
 Destructor.
 
- Public Member Functions inherited from JASS::compress_integer
 compress_integer ()
 Constructor.
 
virtual ~compress_integer ()
 Destructor.
 

Static Public Member Functions

static void unittest (void)
 Unit test this class.
 
- Static Public Member Functions inherited from JASS::compress_integer_simple_9
static void unittest (void)
 Unit test this class.
 
- Static Public Member Functions inherited from JASS::compress_integer
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. More...
 
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. More...
 
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. More...
 
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. More...
 
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. More...
 
static void unittest (compress_integer &compressor, uint32_t staring_from=0)
 Unit test this class, assert on failure. More...
 

Static Private Attributes

static const compress_integer_carryover_12::selector transition_table []
 The selector table for Carryover-12. More...
 

Additional Inherited Members

- Public Types inherited from JASS::compress_integer
typedef uint32_t integer
 This class and descendants will work on integers of this size. Do not change without also changing JASS_COMPRESS_INTEGER_BITS_PER_INTEGER.
 
- Static Protected Attributes inherited from JASS::compress_integer_simple_9
static const lookup simple9_table []
 The table mapping bits to slectors and masks. More...
 
static const uint32_t bits_to_use []
 The number of bits used to store an integer of the given the number of bits in length. More...
 
static const uint32_t table_row []
 Given the number of bits, which row of simple9_table should be used? More...
 
static const uint32_t ints_packed_table []
 Number of integers packed into a 32-bit word, given its mask type. More...
 
static const uint32_t can_pack_table []
 Bitmask map for valid masks at an offset (column) for some num_bits_needed (row). More...
 
static const uint32_t row_for_bits_needed []
 Translates the 'bits_needed' to the appropriate 'row' offset for use with can_pack table. More...
 
static const uint32_t invalid_masks_for_offset []
 AND out masks for offsets where we don't know if we can fully pack for that offset. More...
 
static const uint32_t simple9_shift_table []
 Number of bits to shift when packing - 9 rows for simple-9. More...
 

Detailed Description

Carryover-12 integer compression.

Simple-9 compression bin-packs as many integers as possible into a single 28-bit word with a 4-bit selector (to make 32-bits). Relative-10 uses 2-bit selector to encode the current word reltive to the previous word. In Carryover-12 the 2-bit selector is stored in the previous word if there is room. This means that sometimes its possible to use 30-bits in the integer and sometimes 32-bits (if the selector is in the previous word).

See: V. Anh, A. Moffat (2005), Inverted Index Compression Using Word-Aligned Binary Codes, Information Retrieval, 8(1):151-166

Member Function Documentation

◆ decode()

void JASS::compress_integer_carryover_12::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 JASS::compress_integer_simple_9.

◆ encode()

size_t JASS::compress_integer_carryover_12::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 JASS::compress_integer_simple_9.

Member Data Documentation

◆ transition_table

const compress_integer_carryover_12::selector JASS::compress_integer_carryover_12::transition_table
staticprivate
Initial value:
=
{
{"a30", 1, 30, false, {0, 1, 2, 11}},
{"b30", 2, 15, false, {0, 1, 2, 11}},
{"c30", 3, 10, false, {1, 2, 3, 11}},
{"d30", 4, 7, true, {14, 15, 16, 23}},
{"e30", 5, 6, false, {3, 4, 5, 11}},
{"f30", 6, 5, false, {4, 5, 6, 11}},
{"g30", 7, 4, true, {17, 18, 19, 23}},
{"h30", 9, 3, true, {18, 19, 20, 23}},
{"i30", 10, 3, false, {7, 8, 9, 11}},
{"j30", 14, 2, true, {20, 21, 22, 23}},
{"k30", 15, 2, false, {8, 9, 10, 11}},
{"l30", 28, 1, true, {17, 20, 22, 23}},
{"a32", 1, 32, false, {0, 1, 2, 11}},
{"b32", 2, 16, false, {0, 1, 2, 11}},
{"c32", 3, 10, true, {13, 14, 15, 23}},
{"d32", 4, 8, false, {2, 3, 4, 11}},
{"e32", 5, 6, true, {15, 16, 17, 23}},
{"f32", 6, 5, true, {16, 17, 18, 23}},
{"g32", 7, 4, true, {17, 18, 19, 23}},
{"h32", 8, 4, false, {6, 7, 8, 11}},
{"i32", 10, 3, true, {19, 20, 21, 23}},
{"j32", 15, 2, true, {20, 21, 22, 23}},
{"k32", 16, 2, false, {8, 9, 10, 11}},
{"l32", 30, 1, true, {17, 20, 22, 23}},
}

The selector table for Carryover-12.


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