BitMagic-C++
|
Data Structures | |
struct | bm::gap_len_table< T > |
Default GAP lengths table. More... | |
struct | bm::gap_len_table_min< T > |
Alternative GAP lengths table. Good for for memory saver mode and very sparse bitsets. More... | |
struct | bm::gap_len_table_nl< T > |
Non-linear size growth GAP lengths table. More... | |
Functions | |
BMFORCEINLINE bool | bm::gap_is_all_zero (const bm::gap_word_t *buf) |
Checks if GAP block is all-zero. More... | |
BMFORCEINLINE bool | bm::gap_is_all_one (const bm::gap_word_t *buf) |
Checks if GAP block is all-one. More... | |
BMFORCEINLINE bm::gap_word_t | bm::gap_length (const bm::gap_word_t *buf) |
Returs GAP block length. More... | |
template<typename T > | |
unsigned | bm::gap_capacity (const T *buf, const T *glevel_len) |
Returs GAP block capacity. More... | |
template<typename T > | |
unsigned | bm::gap_limit (const T *buf, const T *glevel_len) |
Returs GAP block capacity limit. More... | |
template<typename T > | |
T | bm::gap_level (const T *buf) |
Returs GAP blocks capacity level. More... | |
template<typename T > | |
unsigned | bm::gap_find_last (const T *buf, unsigned *last) |
GAP block find the last set bit. More... | |
template<typename T > | |
unsigned | bm::gap_find_first (const T *buf, unsigned *first) |
GAP block find the first set bit. More... | |
template<typename T > | |
unsigned | bm::gap_test (const T *buf, unsigned pos) |
Tests if bit = pos is true. More... | |
template<typename T > | |
unsigned | bm::gap_test_unr (const T *buf, const unsigned pos) |
Tests if bit = pos is true. Analog of bm::gap_test with SIMD unrolling. More... | |
template<typename T > | |
unsigned | bm::gap_bit_count (const T *buf, unsigned dsize=0) |
Calculates number of bits ON in GAP buffer. More... | |
template<typename T > | |
unsigned | bm::gap_bit_count_unr (const T *buf) |
Calculates number of bits ON in GAP buffer. Loop unrolled version. More... | |
template<typename T > | |
unsigned | bm::gap_bit_count_range (const T *const buf, unsigned left, unsigned right) |
Counts 1 bits in GAP buffer in the closed [left, right] range. More... | |
template<typename T , typename SIZE_TYPE > | |
SIZE_TYPE | bm::gap_find_rank (const T *const block, SIZE_TYPE rank, unsigned nbit_from, unsigned &nbit_pos) |
GAP block find position for the rank. More... | |
template<typename T > | |
unsigned | bm::gap_bit_count_to (const T *const buf, T right) |
Counts 1 bits in GAP buffer in the closed [0, right] range. More... | |
template<typename T > | |
int | bm::gapcmp (const T *buf1, const T *buf2) |
Lexicographical comparison of GAP buffers. More... | |
template<typename T , class F > | |
unsigned | bm::gap_buff_any_op (const T *BMRESTRICT vect1, unsigned vect1_mask, const T *BMRESTRICT vect2, unsigned vect2_mask, F f) |
Abstract distance test operation for GAP buffers. Receives functor F as a template argument. More... | |
template<typename T , class F > | |
unsigned | bm::gap_buff_count_op (const T *vect1, const T *vect2, F f) |
Abstract distance(similarity) operation for GAP buffers. Receives functor F as a template argument. More... | |
template<typename T > | |
unsigned | bm::gap_set_value (unsigned val, T *BMRESTRICT buf, unsigned pos, unsigned *BMRESTRICT is_set) |
Sets or clears bit in the GAP buffer. More... | |
template<typename T > | |
unsigned | bm::gap_add_value (T *buf, unsigned pos) |
Add new value to the end of GAP buffer. More... | |
template<typename T > | |
bool | bm::gap_shift_r1 (T *buf, unsigned co_flag, unsigned *new_len) |
Right shift GAP block by 1 bit. More... | |
template<typename T > | |
bool | bm::gap_shift_l1 (T *buf, unsigned co_flag, unsigned *new_len) |
Left shift GAP block by 1 bit. More... | |
template<typename T > | |
unsigned | bm::gap_set_array (T *buf, const T *arr, unsigned len) |
Convert array to GAP buffer. More... | |
template<typename T > | |
unsigned | bm::bit_array_compute_gaps (const T *arr, unsigned len) |
Compute number of GAPs in bit-array. More... | |
template<typename T > | |
unsigned | bm::gap_block_find (const T *buf, unsigned nbit, bm::id_t *prev) |
Searches for the next 1 bit in the GAP block. More... | |
template<typename T > | |
void | bm::gap_sub_to_bitset (unsigned *dest, const T *pcurr) |
SUB (AND NOT) GAP block to bitblock. More... | |
template<typename T > | |
void | bm::gap_sub_to_bitset (unsigned *dest, const T *pcurr, bm::id64_t digest0) |
SUB (AND NOT) GAP block to bitblock with digest assist. More... | |
template<typename T > | |
void | bm::gap_xor_to_bitset (unsigned *dest, const T *pcurr) |
XOR GAP block to bitblock. More... | |
template<typename T > | |
void | bm::gap_add_to_bitset (unsigned *dest, const T *pcurr, unsigned len) |
Adds(OR) GAP block to bitblock. More... | |
template<typename T > | |
void | bm::gap_add_to_bitset (unsigned *dest, const T *pcurr) |
Adds(OR) GAP block to bitblock. More... | |
template<typename T > | |
void | bm::gap_and_to_bitset (unsigned *dest, const T *pcurr) |
ANDs GAP block to bitblock. More... | |
template<typename T > | |
void | bm::gap_and_to_bitset (unsigned *dest, const T *pcurr, bm::id64_t digest0) |
ANDs GAP block to bitblock with digest assist. More... | |
template<typename T > | |
bm::id_t | bm::gap_bitset_and_count (const unsigned *block, const T *pcurr) |
Compute bitcount of bit block AND masked by GAP block. More... | |
template<typename T > | |
bm::id_t | bm::gap_bitset_and_any (const unsigned *block, const T *pcurr) |
Bitcount test of bit block AND masked by GAP block. More... | |
template<typename T > | |
bm::id_t | bm::gap_bitset_sub_count (const unsigned *block, const T *buf) |
Compute bitcount of bit block SUB masked by GAP block. More... | |
template<typename T > | |
bm::id_t | bm::gap_bitset_sub_any (const unsigned *block, const T *buf) |
Compute bitcount test of bit block SUB masked by GAP block. More... | |
template<typename T > | |
bm::id_t | bm::gap_bitset_xor_count (const unsigned *block, const T *buf) |
Compute bitcount of bit block XOR masked by GAP block. More... | |
template<typename T > | |
bm::id_t | bm::gap_bitset_xor_any (const unsigned *block, const T *buf) |
Compute bitcount test of bit block XOR masked by GAP block. More... | |
template<typename T > | |
bm::id_t | bm::gap_bitset_or_count (const unsigned *block, const T *buf) |
Compute bitcount of bit block OR masked by GAP block. More... | |
template<typename T > | |
bm::id_t | bm::gap_bitset_or_any (const unsigned *block, const T *buf) |
Compute bitcount test of bit block OR masked by GAP block. More... | |
template<typename T > | |
void | bm::gap_convert_to_bitset (unsigned *dest, const T *buf) |
GAP block to bitblock conversion. More... | |
template<typename T > | |
unsigned * | bm::gap_convert_to_bitset_smart (unsigned *dest, const T *buf, id_t set_max) |
Smart GAP block to bitblock conversion. More... | |
template<typename T > | |
unsigned | bm::gap_control_sum (const T *buf) |
Calculates sum of all words in GAP block. (For debugging purposes) More... | |
template<class T > | |
void | bm::gap_set_all (T *buf, unsigned set_max, unsigned value) |
Sets all bits to 0 or 1 (GAP) More... | |
template<class T > | |
void | bm::gap_init_range_block (T *buf, T from, T to, T value) |
Init gap block so it has block in it (can be whole block) More... | |
template<typename T > | |
void | bm::gap_invert (T *buf) |
Inverts all bits in the GAP buffer. More... | |
template<typename T > | |
void | bm::set_gap_level (T *buf, int level) |
Sets GAP block capacity level. More... | |
template<typename T > | |
int | bm::gap_calc_level (unsigned len, const T *glevel_len) |
Calculates GAP block capacity level. More... | |
template<typename T > | |
unsigned | bm::gap_free_elements (const T *buf, const T *glevel_len) |
Returns number of free elements in GAP block array. Difference between GAP block capacity on this level and actual GAP length. More... | |
unsigned | bm::bit_block_to_gap (gap_word_t *BMRESTRICT dest, const unsigned *BMRESTRICT block, unsigned dest_len) |
Converts bit block to GAP. More... | |
template<class T , class F > | |
void | bm::for_each_gap_dbit (const T *buf, F &func) |
Iterate gap block as delta-bits with a functor. More... | |
template<typename D , typename T > | |
D | bm::gap_convert_to_arr (D *BMRESTRICT dest, const T *BMRESTRICT buf, unsigned dest_len, bool invert=false) |
Convert gap block into array of ints corresponding to 1 bits. More... | |
BMFORCEINLINE gap_word_t * | bm::gap_operation_and (const gap_word_t *BMRESTRICT vect1, const gap_word_t *BMRESTRICT vect2, gap_word_t *BMRESTRICT tmp_buf, unsigned &dsize) |
GAP AND operation. More... | |
BMFORCEINLINE unsigned | bm::gap_operation_any_and (const gap_word_t *BMRESTRICT vect1, const gap_word_t *BMRESTRICT vect2) |
GAP AND operation test. More... | |
BMFORCEINLINE unsigned | bm::gap_count_and (const gap_word_t *BMRESTRICT vect1, const gap_word_t *BMRESTRICT vect2) |
GAP bitcount AND operation test. More... | |
BMFORCEINLINE gap_word_t * | bm::gap_operation_xor (const gap_word_t *BMRESTRICT vect1, const gap_word_t *BMRESTRICT vect2, gap_word_t *BMRESTRICT tmp_buf, unsigned &dsize) |
GAP XOR operation. More... | |
BMFORCEINLINE unsigned | bm::gap_operation_any_xor (const gap_word_t *BMRESTRICT vect1, const gap_word_t *BMRESTRICT vect2) |
GAP XOR operation test. More... | |
BMFORCEINLINE unsigned | bm::gap_count_xor (const gap_word_t *BMRESTRICT vect1, const gap_word_t *BMRESTRICT vect2) |
GAP bitcount XOR operation test. More... | |
gap_word_t * | bm::gap_operation_or (const gap_word_t *BMRESTRICT vect1, const gap_word_t *BMRESTRICT vect2, gap_word_t *BMRESTRICT tmp_buf, unsigned &dsize) |
GAP OR operation. More... | |
BMFORCEINLINE unsigned | bm::gap_count_or (const gap_word_t *BMRESTRICT vect1, const gap_word_t *BMRESTRICT vect2) |
GAP bitcount OR operation test. More... | |
gap_word_t * | bm::gap_operation_sub (const gap_word_t *BMRESTRICT vect1, const gap_word_t *BMRESTRICT vect2, gap_word_t *BMRESTRICT tmp_buf, unsigned &dsize) |
GAP SUB (AND NOT) operation. More... | |
BMFORCEINLINE unsigned | bm::gap_operation_any_sub (const gap_word_t *BMRESTRICT vect1, const gap_word_t *BMRESTRICT vect2) |
GAP SUB operation test. More... | |
BMFORCEINLINE unsigned | bm::gap_count_sub (const gap_word_t *BMRESTRICT vect1, const gap_word_t *BMRESTRICT vect2) |
GAP bitcount SUB (AND NOT) operation test. More... | |
template<typename T > | |
unsigned | bm::gap_overhead (const T *length, const T *length_end, const T *glevel_len) |
Calculates memory overhead for number of gap blocks sharing the same memory allocation table (level lengths table). More... | |
template<typename T > | |
bool | bm::improve_gap_levels (const T *length, const T *length_end, T *glevel_len) |
Finds optimal gap blocks lengths. More... | |
template<typename T , typename Func , typename SIZE_TYPE > | |
void | bm::for_each_gap_blk (const T *buf, SIZE_TYPE offset, Func &bit_functor) |
for-each visitor, calls a special visitor functor for each 1 bit range More... | |
GAP functions implement different opereations on GAP compressed blocks (internals) and serve as a minimal building blocks.
unsigned bm::bit_array_compute_gaps | ( | const T * | arr, |
unsigned | len | ||
) |
|
inline |
Converts bit block to GAP.
dest | - Destinatio GAP buffer. |
block | - Source bitblock buffer. |
dest_len | - length of the dest. buffer. |
Definition at line 3761 of file bmfunc.h.
References bm::bit_scan_forward32(), BM_ASSERT, BMRESTRICT, and bm::set_block_size.
Referenced by bm::bit_to_gap().
void bm::for_each_gap_blk | ( | const T * | buf, |
SIZE_TYPE | offset, | ||
Func & | bit_functor | ||
) |
for-each visitor, calls a special visitor functor for each 1 bit range
buf | - bit block buffer pointer |
offset | - global block offset (number of bits) |
bit_functor | - functor must support .add_range(offset, bits_ptr, size) |
Definition at line 1695 of file bmalgo_impl.h.
void bm::for_each_gap_dbit | ( | const T * | buf, |
F & | func | ||
) |
void bm::gap_add_to_bitset | ( | unsigned * | dest, |
const T * | pcurr, | ||
unsigned | len | ||
) |
Adds(OR) GAP block to bitblock.
dest | - bitblock buffer pointer. |
pcurr | - GAP buffer pointer. |
len | - gap length |
Definition at line 3098 of file bmfunc.h.
References BM_ASSERT, and bm::or_bit_block().
Referenced by bm::bvector<>::combine_operation(), bm::aggregator< bvector_type >::combine_shift_right_and(), bm::gap_add_to_bitset(), bm::gap_convert_to_bitset(), bm::aggregator< bvector_type >::process_gap_blocks_or(), and bm::deseriaizer_base< bm::decoder >::read_bic_gap().
void bm::gap_add_to_bitset | ( | unsigned * | dest, |
const T * | pcurr | ||
) |
Adds(OR) GAP block to bitblock.
dest | - bitblock buffer pointer. |
pcurr | - GAP buffer pointer. |
Definition at line 3131 of file bmfunc.h.
References bm::gap_add_to_bitset().
unsigned bm::gap_add_value | ( | T * | buf, |
unsigned | pos | ||
) |
Add new value to the end of GAP buffer.
buf | - GAP buffer. |
pos | - Index of bit to set. |
Definition at line 2484 of file bmfunc.h.
References BM_ASSERT, and bm::gap_max_bits.
Referenced by bm::deseriaizer_base< bm::decoder >::read_gap_block().
void bm::gap_and_to_bitset | ( | unsigned * | dest, |
const T * | pcurr | ||
) |
ANDs GAP block to bitblock.
dest | - bitblock buffer pointer. |
pcurr | - GAP buffer pointer. |
Definition at line 3146 of file bmfunc.h.
References BM_ASSERT, and bm::sub_bit_block().
Referenced by bm::bvector<>::combine_operation(), bm::aggregator< bvector_type >::process_gap_blocks_and(), and bm::aggregator< bvector_type >::process_shift_right_and().
void bm::gap_and_to_bitset | ( | unsigned * | dest, |
const T * | pcurr, | ||
bm::id64_t | digest0 | ||
) |
ANDs GAP block to bitblock with digest assist.
dest | - bitblock buffer pointer. |
pcurr | - GAP buffer pointer. |
digest0 | - digest of 0 strides for the destination |
Definition at line 3180 of file bmfunc.h.
References BM_ASSERT, bm::check_zero_digest(), bm::count_leading_zeros_u64(), bm::count_trailing_zeros_u64(), bm::set_block_digest_pos_shift, and bm::sub_bit_block().
unsigned bm::gap_bit_count | ( | const T * | buf, |
unsigned | dsize = 0 |
||
) |
Calculates number of bits ON in GAP buffer.
buf | - GAP buffer pointer. |
dsize | - buffer size |
Definition at line 1753 of file bmfunc.h.
Referenced by bm::gap_bit_count_unr().
unsigned bm::gap_bit_count_range | ( | const T *const | buf, |
unsigned | left, | ||
unsigned | right | ||
) |
Counts 1 bits in GAP buffer in the closed [left, right] range.
buf | - GAP buffer pointer. |
left | - leftmost bit index to start from |
right- | rightmost bit index |
Definition at line 1852 of file bmfunc.h.
References BM_ASSERT, and bm::gap_bfind().
Referenced by bm::bvector<>::build_rs_index(), bm::bvector<>::count_range(), and bm::bvector<>::count_to().
unsigned bm::gap_bit_count_to | ( | const T *const | buf, |
T | right | ||
) |
Counts 1 bits in GAP buffer in the closed [0, right] range.
buf | - GAP buffer pointer. |
right- | rightmost bit index |
Definition at line 1948 of file bmfunc.h.
References BM_ASSERT.
Referenced by bm::bvector<>::count_to(), and bm::bvector<>::count_to_test().
unsigned bm::gap_bit_count_unr | ( | const T * | buf | ) |
Calculates number of bits ON in GAP buffer. Loop unrolled version.
buf | - GAP buffer pointer. |
Definition at line 1786 of file bmfunc.h.
References BM_ASSERT, bm::gap_bit_count(), and bm::sse2_gap_sum_arr().
Referenced by bm::combine_count_operation_with_block(), and bm::serializer< bvector_type >::find_gap_best_encoding().
bm::id_t bm::gap_bitset_and_any | ( | const unsigned * | block, |
const T * | pcurr | ||
) |
Bitcount test of bit block AND masked by GAP block.
block | - bitblock buffer pointer |
pcurr | - GAP buffer pointer |
Definition at line 3268 of file bmfunc.h.
References bm::bit_block_any_range(), and BM_ASSERT.
Referenced by bm::combine_any_operation_with_block().
bm::id_t bm::gap_bitset_and_count | ( | const unsigned * | block, |
const T * | pcurr | ||
) |
Compute bitcount of bit block AND masked by GAP block.
block | - bitblock buffer pointer |
pcurr | - GAP buffer pointer |
Definition at line 3241 of file bmfunc.h.
References bm::bit_block_calc_count_range(), and BM_ASSERT.
Referenced by bm::combine_count_and_operation_with_block(), and bm::combine_count_operation_with_block().
bm::id_t bm::gap_bitset_or_any | ( | const unsigned * | block, |
const T * | buf | ||
) |
Compute bitcount test of bit block OR masked by GAP block.
block | - bitblock buffer pointer |
buf | - GAP buffer pointer |
Definition at line 3474 of file bmfunc.h.
References bm::bit_is_all_zero(), and bm::gap_is_all_zero().
Referenced by bm::combine_any_operation_with_block().
bm::id_t bm::gap_bitset_or_count | ( | const unsigned * | block, |
const T * | buf | ||
) |
Compute bitcount of bit block OR masked by GAP block.
block | - bitblock buffer pointer. |
buf | - GAP buffer pointer. |
Definition at line 3442 of file bmfunc.h.
References bm::bit_block_calc_count_range(), and BM_ASSERT.
Referenced by bm::combine_count_operation_with_block().
bm::id_t bm::gap_bitset_sub_any | ( | const unsigned * | block, |
const T * | buf | ||
) |
Compute bitcount test of bit block SUB masked by GAP block.
block | - bitblock buffer pointer |
buf | - GAP buffer pointer |
Definition at line 3331 of file bmfunc.h.
References bm::bit_block_any_range(), and BM_ASSERT.
Referenced by bm::combine_any_operation_with_block().
bm::id_t bm::gap_bitset_sub_count | ( | const unsigned * | block, |
const T * | buf | ||
) |
Compute bitcount of bit block SUB masked by GAP block.
block | - bitblock buffer pointer. |
buf | - GAP buffer pointer. |
Definition at line 3297 of file bmfunc.h.
References bm::bit_block_calc_count_range(), and BM_ASSERT.
Referenced by bm::combine_count_operation_with_block().
bm::id_t bm::gap_bitset_xor_any | ( | const unsigned * | block, |
const T * | buf | ||
) |
Compute bitcount test of bit block XOR masked by GAP block.
block | - bitblock buffer pointer |
buf | - GAP buffer pointer |
Definition at line 3405 of file bmfunc.h.
References bm::bit_block_any_range(), and BM_ASSERT.
Referenced by bm::combine_any_operation_with_block().
bm::id_t bm::gap_bitset_xor_count | ( | const unsigned * | block, |
const T * | buf | ||
) |
Compute bitcount of bit block XOR masked by GAP block.
block | - bitblock buffer pointer |
buf | - GAP buffer pointer |
Definition at line 3368 of file bmfunc.h.
References bm::bit_block_calc_count_range(), and BM_ASSERT.
Referenced by bm::combine_count_operation_with_block().
unsigned bm::gap_block_find | ( | const T * | buf, |
unsigned | nbit, | ||
bm::id_t * | prev | ||
) |
Searches for the next 1 bit in the GAP block.
buf | - GAP buffer |
nbit | - bit index to start checking from. |
prev | - returns previously checked value |
Definition at line 2764 of file bmfunc.h.
References BM_ASSERT, BMFORCEINLINE, bm::gap_bfind(), and bm::gap_max_bits.
Referenced by bm::bvector<>::select().
unsigned bm::gap_buff_any_op | ( | const T *BMRESTRICT | vect1, |
unsigned | vect1_mask, | ||
const T *BMRESTRICT | vect2, | ||
unsigned | vect2_mask, | ||
F | f | ||
) |
Abstract distance test operation for GAP buffers. Receives functor F as a template argument.
vect1 | - operand 1 GAP encoded buffer. |
vect1_mask | - XOR mask for starting bitflag for vector1 can be 0 or 1 (1 inverts the vector) |
vect2 | - operand 2 GAP encoded buffer. |
vect2_mask | - same as vect1_mask |
f | - operation functor. |
Definition at line 2237 of file bmfunc.h.
References bm::gap_max_bits.
Referenced by bm::gap_operation_any_and(), bm::gap_operation_any_sub(), and bm::gap_operation_any_xor().
unsigned bm::gap_buff_count_op | ( | const T * | vect1, |
const T * | vect2, | ||
F | f | ||
) |
Abstract distance(similarity) operation for GAP buffers. Receives functor F as a template argument.
vect1 | - operand 1 GAP encoded buffer. |
vect2 | - operand 2 GAP encoded buffer. |
f | - operation functor. |
Definition at line 2306 of file bmfunc.h.
References bm::gap_max_bits.
Referenced by bm::gap_count_and(), bm::gap_count_or(), bm::gap_count_sub(), and bm::gap_count_xor().
|
inline |
Calculates GAP block capacity level.
len | - GAP buffer length. |
glevel_len | - GAP lengths table |
Definition at line 3695 of file bmfunc.h.
References BM_ASSERT, and bm::gap_levels.
Referenced by bm::iterator_deserializer< BV, SerialIterator >::deserialize(), bm::deserializer< typename SV::bvector_type, bm::decoder >::deserialize_gap(), and bm::gap_overhead().
unsigned bm::gap_capacity | ( | const T * | buf, |
const T * | glevel_len | ||
) |
Returs GAP block capacity.
buf | - GAP buffer pointer |
glevel_len | - pointer on GAP header word |
Definition at line 1082 of file bmfunc.h.
Referenced by bm::bvector<>::calc_stat(), bm::mem_alloc< BA, PA, APool >::free_gap_block(), and bm::gap_free_elements().
unsigned bm::gap_control_sum | ( | const T * | buf | ) |
D bm::gap_convert_to_arr | ( | D *BMRESTRICT | dest, |
const T *BMRESTRICT | buf, | ||
unsigned | dest_len, | ||
bool | invert = false |
||
) |
Convert gap block into array of ints corresponding to 1 bits.
Definition at line 3913 of file bmfunc.h.
References BMREGISTER, and BMRESTRICT.
Referenced by bm::serializer< bvector_type >::encode_gap_block(), and bm::random_subset< BV >::sample().
void bm::gap_convert_to_bitset | ( | unsigned * | dest, |
const T * | buf | ||
) |
GAP block to bitblock conversion.
dest | - bitblock buffer pointer. |
buf | - GAP buffer pointer. |
Definition at line 3510 of file bmfunc.h.
References bm::bit_block_set(), and bm::gap_add_to_bitset().
Referenced by bm::combine_any_operation_with_block(), bm::combine_count_operation_with_block(), bm::bvector<>::combine_operation(), bm::bvector<>::compare(), bm::iterator_deserializer< BV, SerialIterator >::deserialize(), bm::deserializer< typename SV::bvector_type, bm::decoder >::deserialize_gap(), bm::gap_convert_to_bitset_smart(), bm::random_subset< BV >::sample(), and bm::miniset< A, N >::swap().
unsigned* bm::gap_convert_to_bitset_smart | ( | unsigned * | dest, |
const T * | buf, | ||
id_t | set_max | ||
) |
Smart GAP block to bitblock conversion.
Checks if GAP block is ALL-ZERO or ALL-ON. In those cases returns pointer on special static bitblocks.
dest | - bitblock buffer pointer. |
buf | - GAP buffer pointer. |
set_max | - max possible bitset length |
Definition at line 3531 of file bmfunc.h.
References FULL_BLOCK_REAL_ADDR, and bm::gap_convert_to_bitset().
Referenced by bm::bvector<>::combine_operation().
BMFORCEINLINE unsigned bm::gap_count_and | ( | const gap_word_t *BMRESTRICT | vect1, |
const gap_word_t *BMRESTRICT | vect2 | ||
) |
GAP bitcount AND operation test.
vect1 | - operand 1 |
vect2 | - operand 2 |
Definition at line 4868 of file bmfunc.h.
References bm::and_op(), BMFORCEINLINE, and bm::gap_buff_count_op().
Referenced by bm::combine_count_and_operation_with_block(), and bm::combine_count_operation_with_block().
BMFORCEINLINE unsigned bm::gap_count_or | ( | const gap_word_t *BMRESTRICT | vect1, |
const gap_word_t *BMRESTRICT | vect2 | ||
) |
GAP bitcount OR operation test.
vect1 | - operand 1 |
vect2 | - operand 2 |
Definition at line 4979 of file bmfunc.h.
References bm::gap_buff_count_op(), and bm::or_op().
Referenced by bm::combine_count_operation_with_block().
BMFORCEINLINE unsigned bm::gap_count_sub | ( | const gap_word_t *BMRESTRICT | vect1, |
const gap_word_t *BMRESTRICT | vect2 | ||
) |
GAP bitcount SUB (AND NOT) operation test.
vect1 | - operand 1 |
vect2 | - operand 2 |
Definition at line 5046 of file bmfunc.h.
References bm::gap_buff_count_op(), and bm::sub_op().
Referenced by bm::combine_count_operation_with_block().
BMFORCEINLINE unsigned bm::gap_count_xor | ( | const gap_word_t *BMRESTRICT | vect1, |
const gap_word_t *BMRESTRICT | vect2 | ||
) |
GAP bitcount XOR operation test.
vect1 | - operand 1 |
vect2 | - operand 2 |
Definition at line 4934 of file bmfunc.h.
References bm::gap_buff_count_op(), and bm::xor_op().
Referenced by bm::combine_count_operation_with_block().
unsigned bm::gap_find_first | ( | const T * | buf, |
unsigned * | first | ||
) |
GAP block find the first set bit.
buf | - GAP buffer pointer. |
first | - index of the first 1 bit |
Definition at line 1158 of file bmfunc.h.
References BM_ASSERT, and bm::gap_max_bits.
Referenced by bm::bvector<>::find(), and bm::bvector<>::select().
unsigned bm::gap_find_last | ( | const T * | buf, |
unsigned * | last | ||
) |
GAP block find the last set bit.
buf | - GAP buffer pointer. |
last | - index of the last 1 bit |
Definition at line 1128 of file bmfunc.h.
References BM_ASSERT, and bm::gap_max_bits.
Referenced by bm::bvector<>::find_reverse().
SIZE_TYPE bm::gap_find_rank | ( | const T *const | block, |
SIZE_TYPE | rank, | ||
unsigned | nbit_from, | ||
unsigned & | nbit_pos | ||
) |
GAP block find position for the rank.
block | - bit block buffer pointer |
rank | - rank to find (must be > 0) |
nbit_from | - start bit position in block |
nbit_pos | - found position |
Definition at line 1898 of file bmfunc.h.
References BM_ASSERT, and bm::gap_bfind().
Referenced by bm::block_find_rank().
|
inline |
Returns number of free elements in GAP block array. Difference between GAP block capacity on this level and actual GAP length.
buf | - GAP buffer pointer |
glevel_len | - GAP lengths table |
Definition at line 3716 of file bmfunc.h.
References bm::gap_capacity(), and bm::gap_length().
void bm::gap_init_range_block | ( | T * | buf, |
T | from, | ||
T | to, | ||
T | value | ||
) |
Init gap block so it has block in it (can be whole block)
buf | - GAP buffer pointer. |
from | - one block start |
to | - one block end |
value | - (block value)1 or 0 |
Definition at line 3603 of file bmfunc.h.
References bm::bits_in_block, BM_ASSERT, and bm::gap_set_all().
void bm::gap_invert | ( | T * | buf | ) |
Inverts all bits in the GAP buffer.
buf | - GAP buffer pointer. |
Definition at line 3654 of file bmfunc.h.
Referenced by bm::bvector<>::combine_operation(), bm::gap_operation_or(), bm::bvector<>::invert(), and bm::deseriaizer_base< bm::decoder >::read_gap_block().
BMFORCEINLINE bool bm::gap_is_all_one | ( | const bm::gap_word_t * | buf | ) |
Checks if GAP block is all-one.
buf | - GAP buffer pointer. |
set_max | - max possible bitset length |
Definition at line 1054 of file bmfunc.h.
References BMFORCEINLINE, and bm::gap_max_bits.
Referenced by bm::check_block_one().
BMFORCEINLINE bool bm::gap_is_all_zero | ( | const bm::gap_word_t * | buf | ) |
Checks if GAP block is all-zero.
buf | - GAP buffer pointer. |
Definition at line 1039 of file bmfunc.h.
References BMFORCEINLINE, and bm::gap_max_bits.
Referenced by bm::check_block_zero(), bm::combine_any_operation_with_block(), bm::bvector<>::combine_operation(), bm::bvector<>::compare(), bm::bvector<>::erase(), and bm::gap_bitset_or_any().
BMFORCEINLINE bm::gap_word_t bm::gap_length | ( | const bm::gap_word_t * | buf | ) |
Returs GAP block length.
buf | - GAP buffer pointer. |
Definition at line 1067 of file bmfunc.h.
Referenced by bm::bvector<>::calc_stat(), bm::iterator_deserializer< BV, SerialIterator >::deserialize(), bm::deserializer< typename SV::bvector_type, bm::decoder >::deserialize_gap(), bm::serializer< bvector_type >::find_gap_best_encoding(), bm::serializer< bvector_type >::gamma_gap_block(), bm::gap_free_elements(), bm::serializer< bvector_type >::interpolated_encode_gap_block(), and bm::deseriaizer_base< bm::decoder >::read_gap_block().
T bm::gap_level | ( | const T * | buf | ) |
unsigned bm::gap_limit | ( | const T * | buf, |
const T * | glevel_len | ||
) |
Returs GAP block capacity limit.
buf | - GAP buffer pointer. |
glevel_len | - GAP lengths table (gap_len_table) |
Definition at line 1097 of file bmfunc.h.
Referenced by bm::combine_or(), bm::combine_sub(), bm::combine_xor(), bm::bvector<>::erase(), bm::bvector<>::import_block(), and bm::bvector<>::insert().
BMFORCEINLINE gap_word_t* bm::gap_operation_and | ( | const gap_word_t *BMRESTRICT | vect1, |
const gap_word_t *BMRESTRICT | vect2, | ||
gap_word_t *BMRESTRICT | tmp_buf, | ||
unsigned & | dsize | ||
) |
GAP AND operation.
Function performs AND logical operation on gap vectors. If possible function put the result into vect1 and returns this pointer. Otherwise result is put into tmp_buf, which should be twice of the vector size.
vect1 | - operand 1 |
vect2 | - operand 2 |
tmp_buf | - pointer on temporary buffer |
dsize | - out size of the destination |
Definition at line 4827 of file bmfunc.h.
References bm::and_op(), BMFORCEINLINE, and bm::gap_buff_op().
Referenced by bm::operation_functions< T >::bit_operation_count(), and bm::bvector<>::combine_operation().
BMFORCEINLINE unsigned bm::gap_operation_any_and | ( | const gap_word_t *BMRESTRICT | vect1, |
const gap_word_t *BMRESTRICT | vect2 | ||
) |
GAP AND operation test.
Function performs AND logical operation on gap vectors. If possible function put the result into vect1 and returns this pointer. Otherwise result is put into tmp_buf, which should be twice of the vector size.
vect1 | - operand 1 |
vect2 | - operand 2 |
Definition at line 4851 of file bmfunc.h.
References bm::and_op(), BMFORCEINLINE, and bm::gap_buff_any_op().
Referenced by bm::combine_any_operation_with_block().
BMFORCEINLINE unsigned bm::gap_operation_any_sub | ( | const gap_word_t *BMRESTRICT | vect1, |
const gap_word_t *BMRESTRICT | vect2 | ||
) |
GAP SUB operation test.
Function performs AND logical operation on gap vectors. If possible function put the result into vect1 and returns this pointer. Otherwise result is put into tmp_buf, which should be twice of the vector size.
vect1 | - operand 1 |
vect2 | - operand 2 |
Definition at line 5029 of file bmfunc.h.
References bm::and_op(), BMFORCEINLINE, and bm::gap_buff_any_op().
Referenced by bm::combine_any_operation_with_block().
BMFORCEINLINE unsigned bm::gap_operation_any_xor | ( | const gap_word_t *BMRESTRICT | vect1, |
const gap_word_t *BMRESTRICT | vect2 | ||
) |
GAP XOR operation test.
Function performs AND logical operation on gap vectors. If possible function put the result into vect1 and returns this pointer. Otherwise result is put into tmp_buf, which should be twice of the vector size.
vect1 | - operand 1 |
vect2 | - operand 2 |
Definition at line 4918 of file bmfunc.h.
References BMFORCEINLINE, bm::gap_buff_any_op(), and bm::xor_op().
Referenced by bm::combine_any_operation_with_block().
|
inline |
GAP OR operation.
Function performs OR logical oparation on gap vectors. If possible function put the result into vect1 and returns this pointer. Otherwise result is put into tmp_buf, which should be twice of the vector size.
vect1 | - operand 1 |
vect2 | - operand 2 |
tmp_buf | - pointer on temporary buffer |
dsize | - out destination size |
Definition at line 4959 of file bmfunc.h.
References bm::and_op(), BMFORCEINLINE, bm::gap_buff_op(), and bm::gap_invert().
Referenced by bm::operation_functions< T >::bit_operation_count(), bm::combine_any_operation_with_block(), and bm::bvector<>::combine_operation().
|
inline |
GAP SUB (AND NOT) operation.
Function performs SUB logical operation on gap vectors. If possible function put the result into vect1 and returns this pointer. Otherwise result is put into tmp_buf, which should be twice of the vector size.
vect1 | - operand 1 |
vect2 | - operand 2 |
tmp_buf | - pointer on temporary buffer |
dsize | - out destination size |
Definition at line 5004 of file bmfunc.h.
References bm::and_op(), BMFORCEINLINE, and bm::gap_buff_op().
Referenced by bm::operation_functions< T >::bit_operation_count(), and bm::bvector<>::combine_operation().
BMFORCEINLINE gap_word_t* bm::gap_operation_xor | ( | const gap_word_t *BMRESTRICT | vect1, |
const gap_word_t *BMRESTRICT | vect2, | ||
gap_word_t *BMRESTRICT | tmp_buf, | ||
unsigned & | dsize | ||
) |
GAP XOR operation.
Function performs XOR logical operation on gap vectors. If possible function put the result into vect1 and returns this pointer. Otherwise result is put into tmp_buf, which should be twice of the vector size.
vect1 | - operand 1 |
vect2 | - operand 2 |
tmp_buf | - pointer on temporary buffer |
dsize | - out destination size |
Definition at line 4893 of file bmfunc.h.
References BMFORCEINLINE, bm::gap_buff_op(), and bm::xor_op().
Referenced by bm::operation_functions< T >::bit_operation_count(), and bm::bvector<>::combine_operation().
unsigned bm::gap_overhead | ( | const T * | length, |
const T * | length_end, | ||
const T * | glevel_len | ||
) |
Calculates memory overhead for number of gap blocks sharing the same memory allocation table (level lengths table).
Definition at line 7060 of file bmfunc.h.
References BM_ASSERT, bm::gap_calc_level(), and bm::gap_levels.
Referenced by bm::improve_gap_levels().
void bm::gap_set_all | ( | T * | buf, |
unsigned | set_max, | ||
unsigned | value | ||
) |
Sets all bits to 0 or 1 (GAP)
buf | - GAP buffer pointer. |
set_max | - max possible bitset length |
value | - value to set |
Definition at line 3583 of file bmfunc.h.
References BM_ASSERT.
Referenced by bm::gap_init_range_block(), bm::deseriaizer_base< bm::decoder >::read_gap_block(), and bm::miniset< A, N >::swap().
unsigned bm::gap_set_array | ( | T * | buf, |
const T * | arr, | ||
unsigned | len | ||
) |
Convert array to GAP buffer.
buf | - GAP buffer. |
arr | - array of values to set |
len | - length of the array |
Definition at line 2670 of file bmfunc.h.
References BM_ASSERT, and bm::gap_max_bits.
Referenced by bm::deserializer< typename SV::bvector_type, bm::decoder >::deserialize_gap(), and bm::deseriaizer_base< bm::decoder >::read_gap_block().
unsigned bm::gap_set_value | ( | unsigned | val, |
T *BMRESTRICT | buf, | ||
unsigned | pos, | ||
unsigned *BMRESTRICT | is_set | ||
) |
Sets or clears bit in the GAP buffer.
val | - new bit value |
buf | - GAP buffer. |
pos | - Index of bit to set. |
is_set | - (OUT) flag if bit was actually set. |
Definition at line 2391 of file bmfunc.h.
References BM_ASSERT, bm::gap_bfind(), and bm::gap_max_bits.
Referenced by bm::combine_or(), bm::combine_sub(), bm::combine_xor(), bm::gap_shift_l1(), bm::gap_shift_r1(), bm::bvector<>::import_block(), and bm::miniset< A, N >::set().
bool bm::gap_shift_l1 | ( | T * | buf, |
unsigned | co_flag, | ||
unsigned * | new_len | ||
) |
Left shift GAP block by 1 bit.
buf | - block pointer |
co_falg | - carry over from the previous block |
Definition at line 2612 of file bmfunc.h.
References BM_ASSERT, bm::gap_max_bits, and bm::gap_set_value().
Referenced by bm::bvector<>::erase().
bool bm::gap_shift_r1 | ( | T * | buf, |
unsigned | co_flag, | ||
unsigned * | new_len | ||
) |
Right shift GAP block by 1 bit.
buf | - block pointer |
co_falg | - carry over from the previous block |
Definition at line 2565 of file bmfunc.h.
References BM_ASSERT, bm::gap_max_bits, and bm::gap_set_value().
Referenced by bm::bvector<>::insert().
void bm::gap_sub_to_bitset | ( | unsigned * | dest, |
const T * | pcurr | ||
) |
SUB (AND NOT) GAP block to bitblock.
dest | - bitblock buffer pointer. |
pcurr | - GAP buffer pointer. |
Definition at line 2985 of file bmfunc.h.
References BM_ASSERT, and bm::sub_bit_block().
Referenced by bm::bvector<>::combine_operation(), and bm::aggregator< bvector_type >::process_gap_blocks_sub().
void bm::gap_sub_to_bitset | ( | unsigned * | dest, |
const T * | pcurr, | ||
bm::id64_t | digest0 | ||
) |
SUB (AND NOT) GAP block to bitblock with digest assist.
dest | - bitblock buffer pointer. |
pcurr | - GAP buffer pointer. |
digest0 | - digest of 0 strides inside bit block |
Definition at line 3013 of file bmfunc.h.
References BM_ASSERT, bm::check_zero_digest(), bm::count_leading_zeros_u64(), bm::count_trailing_zeros_u64(), bm::set_block_digest_pos_shift, and bm::sub_bit_block().
unsigned bm::gap_test | ( | const T * | buf, |
unsigned | pos | ||
) |
Tests if bit = pos is true.
buf | - GAP buffer pointer. |
pos | - index of the element. |
Definition at line 1213 of file bmfunc.h.
References BM_ASSERT, and bm::gap_max_bits.
Referenced by bm::gap_test_unr(), and bm::miniset< A, N >::test().
unsigned bm::gap_test_unr | ( | const T * | buf, |
const unsigned | pos | ||
) |
Tests if bit = pos is true. Analog of bm::gap_test with SIMD unrolling.
buf | - GAP buffer pointer. |
pos | - index of the element. |
Definition at line 1256 of file bmfunc.h.
References BM_ASSERT, bm::gap_max_bits, bm::gap_test(), bm::sse2_gap_find(), and bm::sse4_gap_find().
Referenced by bm::combine_sub(), bm::combine_xor(), bm::bvector<>::count_to_test(), bm::sparse_vector< unsigned, bm::bvector<> >::extract_range(), bm::sparse_vector< unsigned, bm::bvector<> >::gather(), bm::bvector<>::get_bit(), bm::basic_bmatrix< bm::bvector<> >::get_half_octet(), bm::basic_bmatrix< bm::bvector<> >::get_octet(), bm::bvector<>::inc(), bm::aggregator< bvector_type >::process_gap_blocks_and(), bm::aggregator< bvector_type >::process_gap_blocks_sub(), bm::aggregator< bvector_type >::test_gap_blocks_and(), and bm::aggregator< bvector_type >::test_gap_blocks_sub().
void bm::gap_xor_to_bitset | ( | unsigned * | dest, |
const T * | pcurr | ||
) |
XOR GAP block to bitblock.
dest | - bitblock buffer pointer. |
pcurr | - GAP buffer pointer. |
Definition at line 3071 of file bmfunc.h.
References BM_ASSERT, and bm::xor_bit_block().
Referenced by bm::bvector<>::combine_operation().
int bm::gapcmp | ( | const T * | buf1, |
const T * | buf2 | ||
) |
Lexicographical comparison of GAP buffers.
buf1 | - First GAP buffer pointer. |
buf2 | - Second GAP buffer pointer. |
Definition at line 2094 of file bmfunc.h.
Referenced by bm::bvector<>::compare().
bool bm::improve_gap_levels | ( | const T * | length, |
const T * | length_end, | ||
T * | glevel_len | ||
) |
Finds optimal gap blocks lengths.
length | - first element of GAP lengths array |
length_end | - end of the GAP lengths array |
glevel_len | - destination GAP lengths array |
Definition at line 7087 of file bmfunc.h.
References BM_ASSERT, bm::gap_levels, bm::gap_max_buff_len, and bm::gap_overhead().
Referenced by bm::bvector<>::optimize_gap_size().
void bm::set_gap_level | ( | T * | buf, |
int | level | ||
) |
Sets GAP block capacity level.
buf | - GAP buffer pointer. |
level | new GAP block capacity level. |
Definition at line 3673 of file bmfunc.h.
References BM_ASSERT, and bm::gap_levels.
Referenced by bm::iterator_deserializer< BV, SerialIterator >::deserialize(), and bm::deserializer< typename SV::bvector_type, bm::decoder >::deserialize_gap().