|
BitMagic-C++
|
Algorithms for fast aggregation of a group of bit-vectors. More...
#include <bmaggregator.h>

Data Structures | |
| struct | arg_groups |
| Aggregator arg groups. More... | |
| struct | pipeline_bcache |
| Block cache for pipeline execution. More... | |
| struct | run_options |
| Aggregation options for runtime control. More... | |
| class | pipeline |
| Pipeline vector for running a group of aggregation operations on a family of vectors. More... | |
| struct | arena |
| Temporary operations vectors. More... | |
Public Member Functions | |
Construction and setup | |
| aggregator () | |
| ~aggregator () | |
| void | set_optimization (typename bvector_type::optmode opt=bvector_type::opt_compress) BMNOEXCEPT |
| set on-the-fly bit-block compression By default aggregator does not try to optimize result, but in some cases it can be quite a lot faster than calling bvector<>::optimize() later (because block data sits in CPU cache). | |
| void | set_compute_count (bool count_mode) BMNOEXCEPT |
Methods to setup argument groups and run operations on groups | |
| size_t | add (const bvector_type *bv, unsigned agr_group=0) |
| Attach source bit-vector to a argument group (0 or 1). | |
| void | reset () |
| Reset aggregate groups, forget all attached vectors. | |
| void | combine_or (bvector_type &bv_target) |
| Aggregate added group of vectors using logical OR Operation does NOT perform an explicit reset of arg group(s). | |
| void | combine_and (bvector_type &bv_target) |
| Aggregate added group of vectors using logical AND Operation does NOT perform an explicit reset of arg group(s). | |
| bool | combine_and_sub (bvector_type &bv_target) |
| Aggregate added group of vectors using fused logical AND-SUB Operation does NOT perform an explicit reset of arg group(s). | |
| template<class TPipe> | |
| void | combine_and_sub (TPipe &pipe) |
| Run AND-SUB: AND (groups1) AND NOT ( OR(group0)) for a pipeline. | |
| bool | combine_and_sub (bvector_type &bv_target, bool any) |
| Aggregate added group of vectors using fused logical AND-SUB Operation does NOT perform an explicit reset of arg group(s) Operation can terminate early if anything was found. | |
| template<typename BII> | |
| bool | combine_and_sub_bi (BII bi) |
| Aggregate added group of vectors using fused logical AND-SUB. | |
| bool | find_first_and_sub (size_type &idx) |
| Aggregate added group of vectors using fused logical AND-SUB, find the first match. | |
| void | combine_shift_right_and (bvector_type &bv_target) |
| Aggregate added group of vectors using SHIFT-RIGHT and logical AND Operation does NOT perform an explicit reset of arg group(s). | |
| bool | set_range_hint (size_type from, size_type to) BMNOEXCEPT |
| Set search hint for the range, where results needs to be searched (experimental for internal use). | |
| void | reset_range_hint () BMNOEXCEPT |
| Reset range hint to false. | |
| size_type | count () const |
Logical operations (C-style interface) | |
| void | combine_or (bvector_type &bv_target, const bvector_type_const_ptr *bv_src, size_t src_size) |
| Aggregate group of vectors using logical OR. | |
| void | combine_and (bvector_type &bv_target, const bvector_type_const_ptr *bv_src, size_t src_size) |
| Aggregate group of vectors using logical AND. | |
| bool | combine_and_sub (bvector_type &bv_target, const bvector_type_const_ptr *bv_src_and, size_t src_and_size, const bvector_type_const_ptr *bv_src_sub, size_t src_sub_size, bool any) |
| Fusion aggregate group of vectors using logical AND MINUS another set. | |
| template<typename BII> | |
| bool | combine_and_sub (BII bi, const bvector_type_const_ptr *bv_src_and, size_t src_and_size, const bvector_type_const_ptr *bv_src_sub, size_t src_sub_size) |
| bool | find_first_and_sub (size_type &idx, const bvector_type_const_ptr *bv_src_and, size_t src_and_size, const bvector_type_const_ptr *bv_src_sub, size_t src_sub_size) |
| bool | combine_shift_right_and (bvector_type &bv_target, const bvector_type_const_ptr *bv_src_and, size_t src_and_size, bool any) |
| Fusion aggregate group of vectors using SHIFT right with AND. | |
Horizontal Logical operations used for tests (C-style interface) | |
| void | combine_or_horizontal (bvector_type &bv_target, const bvector_type_const_ptr *bv_src, size_t src_size) |
| Horizontal OR aggregation (potentially slower) method. | |
| void | combine_and_horizontal (bvector_type &bv_target, const bvector_type_const_ptr *bv_src, size_t src_size) |
| Horizontal AND aggregation (potentially slower) method. | |
| void | combine_and_sub_horizontal (bvector_type &bv_target, const bvector_type_const_ptr *bv_src_and, size_t src_and_size, const bvector_type_const_ptr *bv_src_sub, size_t src_sub_size) |
| Horizontal AND-SUB aggregation (potentially slower) method. | |
Pipeline operations | |
| int | get_operation () const BMNOEXCEPT |
| Get current operation code. | |
| void | set_operation (int op_code) BMNOEXCEPT |
| Set operation code for the aggregator. | |
| void | stage (bm::word_t *temp_block) |
| Prepare operation, create internal resources, analyse dependencies. | |
| operation_status | run_step (unsigned i, unsigned j) |
| Run a step of current arrgegation operation. | |
| operation_status | get_operation_status () const |
| const bvector_type * | get_target () const BMNOEXCEPT |
| bm::word_t * | get_temp_block () BMNOEXCEPT |
Execition metrics and telemetry | |
| typedef bvector_type::blocks_manager_type | blocks_manager_type |
| typedef BV::block_idx_type | block_idx_type |
| typedef bm::heap_vector< const bm::word_t *, allocator_type, true > | block_ptr_vector_type |
| typedef bm::heap_vector< const bm::gap_word_t *, allocator_type, true > | gap_block_ptr_vector_type |
| typedef bm::heap_vector< unsigned char, allocator_type, true > | uchar_vector_type |
| bm::id64_t | get_cache_gap_hits () const BMNOEXCEPT |
| void | reset_vars () |
| void | combine_or (unsigned i, unsigned j, bvector_type &bv_target, const bvector_type_const_ptr *bv_src, size_t src_size) |
| void | combine_and (unsigned i, unsigned j, bvector_type &bv_target, const bvector_type_const_ptr *bv_src, size_t src_size) |
| digest_type | combine_and_sub (unsigned i, unsigned j, const bvector_type_const_ptr *bv_src_and, size_t src_and_size, const bvector_type_const_ptr *bv_src_sub, size_t src_sub_size, int *is_result_full, bool find_all) |
| void | prepare_shift_right_and (bvector_type &bv_target, const bvector_type_const_ptr *bv_src, size_t src_size) |
| bool | combine_shift_right_and (unsigned i, unsigned j, bvector_type &bv_target, const bvector_type_const_ptr *bv_src, size_t src_size) |
| bm::word_t * | sort_input_blocks_or (const bvector_type_const_ptr *bv_src, size_t src_size, unsigned i, unsigned j) |
| bm::word_t * | sort_input_blocks_and (const bvector_type_const_ptr *bv_src, size_t src_size, unsigned i, unsigned j) |
| bm::word_t * | cache_gap_block (const bm::word_t *arg_blk, const size_t *src_idx, size_t k, unsigned i, unsigned j) |
| bool | process_bit_blocks_or (blocks_manager_type &bman_target, unsigned i, unsigned j, const arena &ar) |
| void | process_gap_blocks_or (const arena &ar) |
| digest_type | process_bit_blocks_and (const arena &ar, digest_type digest, bool find_all) |
| digest_type | process_gap_blocks_and (const arena &ar, digest_type digest) |
| bool | test_gap_blocks_and (size_t block_count, unsigned bit_idx) |
| bool | test_gap_blocks_sub (size_t block_count, unsigned bit_idx) |
| digest_type | process_bit_blocks_sub (const arena &ar, digest_type digest) |
| digest_type | process_gap_blocks_sub (const arena &ar, digest_type digest) |
| bvector_type * | check_create_target () |
| static unsigned | resize_target (bvector_type &bv_target, const bvector_type_const_ptr *bv_src, size_t src_size, bool init_clear=true) |
| static unsigned | max_top_blocks (const bvector_type_const_ptr *bv_src, size_t src_size) BMNOEXCEPT |
| static unsigned | find_effective_sub_block_size (unsigned i, const bvector_type_const_ptr *bv_src, size_t src_size, bool top_null_as_zero) BMNOEXCEPT |
| static unsigned | find_effective_sub_block_size (unsigned i, const bvector_type_const_ptr *bv_src1, size_t src_size1, const bvector_type_const_ptr *bv_src2, size_t src_size2) BMNOEXCEPT |
| static bool | any_carry_overs (const unsigned char *carry_overs, size_t co_size) BMNOEXCEPT |
| static unsigned | process_shift_right_and (bm::word_t *BMRESTRICT blk, const bm::word_t *BMRESTRICT arg_blk, digest_type &BMRESTRICT digest, unsigned carry_over) BMNOEXCEPT |
| static const bm::word_t * | get_arg_block (const bvector_type_const_ptr *bv_src, unsigned k, unsigned i, unsigned j) BMNOEXCEPT |
| static arena * | construct_arena () |
| static void | free_arena (arena *ar) BMNOEXCEPT |
| static arg_groups * | construct_arg_group () |
| static void | free_arg_group (arg_groups *arg) |
Algorithms for fast aggregation of a group of bit-vectors.
Algorithms of this class use cache locality optimizations and efficient on cases, wehen we need to apply the same logical operation (aggregate) more than 2x vectors.
TARGET = BV1 or BV2 or BV3 or BV4 ...
Aggregator supports OR, AND and AND-MINUS (AND-SUB) operations
Definition at line 121 of file bmaggregator.h.
| typedef bvector_type::allocator_type::allocator_pool_type bm::aggregator< BV >::allocator_pool_type |
Definition at line 130 of file bmaggregator.h.
| typedef BV::allocator_type bm::aggregator< BV >::allocator_type |
Definition at line 126 of file bmaggregator.h.
| typedef arg_groups* bm::aggregator< BV >::arg_groups_type_ptr |
Definition at line 181 of file bmaggregator.h.
| typedef bm::heap_vector<arg_groups_type_ptr, allocator_type, true> bm::aggregator< BV >::arg_vector_type |
Definition at line 183 of file bmaggregator.h.
|
protected |
Definition at line 639 of file bmaggregator.h.
| typedef bm::heap_vector<bm::pair<unsigned, unsigned>, allocator_type, true> bm::aggregator< BV >::block_ij_vector_type |
Definition at line 191 of file bmaggregator.h.
|
protected |
Definition at line 641 of file bmaggregator.h.
| typedef bm::heap_vector<bm::word_t*, allocator_type, true> bm::aggregator< BV >::blockptr_vector_type |
Definition at line 189 of file bmaggregator.h.
|
protected |
Definition at line 638 of file bmaggregator.h.
| typedef bm::heap_vector<size_type, allocator_type, true> bm::aggregator< BV >::bv_count_vector_type |
Definition at line 187 of file bmaggregator.h.
| typedef bm::heap_vector<bvector_type_const_ptr, allocator_type, true> bm::aggregator< BV >::bv_vector_type |
Definition at line 132 of file bmaggregator.h.
| typedef bm::heap_vector<bvector_type*, allocator_type, true> bm::aggregator< BV >::bvect_vector_type |
Definition at line 134 of file bmaggregator.h.
| typedef BV bm::aggregator< BV >::bvector_type |
Definition at line 124 of file bmaggregator.h.
| typedef const bvector_type* bm::aggregator< BV >::bvector_type_const_ptr |
Definition at line 127 of file bmaggregator.h.
| typedef bm::heap_vector<unsigned, allocator_type, true> bm::aggregator< BV >::count_vector_type |
Definition at line 185 of file bmaggregator.h.
| typedef bm::id64_t bm::aggregator< BV >::digest_type |
Definition at line 128 of file bmaggregator.h.
|
protected |
Definition at line 643 of file bmaggregator.h.
| typedef bm::heap_vector<size_t, allocator_type, true> bm::aggregator< BV >::index_vector_type |
Definition at line 136 of file bmaggregator.h.
| typedef BV::size_type bm::aggregator< BV >::size_type |
Definition at line 125 of file bmaggregator.h.
|
protected |
Definition at line 645 of file bmaggregator.h.
| enum bm::aggregator::operation |
Codes for aggregation operations which can be pipelined for efficient execution.
| Enumerator | |
|---|---|
| BM_NOT_DEFINED | |
| BM_SHIFT_R_AND | |
Definition at line 141 of file bmaggregator.h.
|
strong |
| Enumerator | |
|---|---|
| op_undefined | |
| op_prepared | |
| op_in_progress | |
| op_done | |
Definition at line 147 of file bmaggregator.h.
| bm::aggregator< BV >::aggregator | ( | ) |
Definition at line 916 of file bmaggregator.h.
References bm::aligned_new_malloc(), and construct_arena().
| bm::aggregator< BV >::~aggregator | ( | ) |
Definition at line 928 of file bmaggregator.h.
References bm::aligned_free(), BM_ASSERT, and free_arena().
| size_t bm::aggregator< BV >::add | ( | const bvector_type * | bv, |
| unsigned | agr_group = 0 ) |
Attach source bit-vector to a argument group (0 or 1).
Arg group 1 used for fused operations like (AND-SUB)
| bv | - input bit-vector pointer to attach |
| agr_group | - input argument group (0 - default, 1 - fused op) |
Definition at line 1013 of file bmaggregator.h.
Referenced by DemoAND(), DemoAND_OR(), DemoAND_SUB(), DemoOR(), DemoSUB(), and main().
|
staticprotected |
Definition at line 2683 of file bmaggregator.h.
References BMNOEXCEPT.
Referenced by combine_shift_right_and(), and run_step().
|
protected |
Definition at line 2371 of file bmaggregator.h.
References bm::aligned_new_malloc(), BM_ASSERT, BMGAP_PTR, bm::pair< First, Second >::first, bm::gap_convert_to_bitset(), bm::pair< First, Second >::second, and bm::set_block_size.
|
protected |
Definition at line 1000 of file bmaggregator.h.
Referenced by stage().
| void bm::aggregator< BV >::combine_and | ( | bvector_type & | bv_target | ) |
Aggregate added group of vectors using logical AND Operation does NOT perform an explicit reset of arg group(s).
| bv_target | - target vector (input is arg group 0) |
Definition at line 1030 of file bmaggregator.h.
References BM_ASSERT, and combine_and_sub().
| void bm::aggregator< BV >::combine_and | ( | bvector_type & | bv_target, |
| const bvector_type_const_ptr * | bv_src, | ||
| size_t | src_size ) |
Aggregate group of vectors using logical AND.
| bv_target | - target vector |
| bv_src | - array of pointers on bit-vector aggregate arguments |
| src_size | - size of bv_src (how many vectors to aggregate) |
Definition at line 1127 of file bmaggregator.h.
References BM_ASSERT, bm::combine_and(), find_effective_sub_block_size(), and resize_target().
|
protected |
Definition at line 1668 of file bmaggregator.h.
References BM_ASSERT, FULL_BLOCK_FAKE_ADDR, FULL_BLOCK_REAL_ADDR, process_bit_blocks_and(), process_gap_blocks_and(), bm::set_sub_array_size, and sort_input_blocks_and().
| void bm::aggregator< BV >::combine_and_horizontal | ( | bvector_type & | bv_target, |
| const bvector_type_const_ptr * | bv_src, | ||
| size_t | src_size ) |
Horizontal AND aggregation (potentially slower) method.
| bv_target | - target vector |
| bv_src | - array of pointers on bit-vector aggregate arguments |
| src_size | - size of bv_src (how many vectors to aggregate) |
Definition at line 2431 of file bmaggregator.h.
References BM_ASSERT, and bm::READWRITE.
Referenced by combine_and_sub_horizontal().
| bool bm::aggregator< BV >::combine_and_sub | ( | BII | bi, |
| const bvector_type_const_ptr * | bv_src_and, | ||
| size_t | src_and_size, | ||
| const bvector_type_const_ptr * | bv_src_sub, | ||
| size_t | src_sub_size ) |
Definition at line 1225 of file bmaggregator.h.
References bm::bits_in_block, BM_ASSERT, combine_and_sub(), find_effective_sub_block_size(), bm::for_each_bit_blk(), and bm::set_sub_array_size.
| bool bm::aggregator< BV >::combine_and_sub | ( | bvector_type & | bv_target | ) |
Aggregate added group of vectors using fused logical AND-SUB Operation does NOT perform an explicit reset of arg group(s).
| bv_target | - target vector (input is arg group 0(AND), 1(SUB) ) |
Definition at line 1044 of file bmaggregator.h.
References BM_ASSERT, and combine_and_sub().
Referenced by combine_and(), combine_and_sub(), combine_and_sub(), combine_and_sub(), combine_and_sub(), combine_and_sub(), combine_and_sub_bi(), DemoAND_OR(), DemoAND_SUB(), DemoSUB(), find_first_and_sub(), and main().
| bool bm::aggregator< BV >::combine_and_sub | ( | bvector_type & | bv_target, |
| bool | any ) |
Aggregate added group of vectors using fused logical AND-SUB Operation does NOT perform an explicit reset of arg group(s) Operation can terminate early if anything was found.
| bv_target | - target vector (input is arg group 0(AND), 1(SUB) ) |
| any | - if true, search result will terminate of first found result |
Definition at line 1056 of file bmaggregator.h.
References BM_ASSERT, and combine_and_sub().
| bool bm::aggregator< BV >::combine_and_sub | ( | bvector_type & | bv_target, |
| const bvector_type_const_ptr * | bv_src_and, | ||
| size_t | src_and_size, | ||
| const bvector_type_const_ptr * | bv_src_sub, | ||
| size_t | src_sub_size, | ||
| bool | any ) |
Fusion aggregate group of vectors using logical AND MINUS another set.
| bv_target | - target vector |
| bv_src_and | - array of pointers on bit-vectors for AND |
| src_and_size | - size of AND group |
| bv_src_sub | - array of pointers on bit-vectors for SUBstract |
| src_sub_size | - size of SUB group |
| any | - flag if caller needs any results asap (incomplete results) |
Definition at line 1162 of file bmaggregator.h.
References BM_ASSERT, combine_and_sub(), find_effective_sub_block_size(), FULL_BLOCK_FAKE_ADDR, bm::bvector< Alloc >::opt_compress, resize_target(), and bm::set_sub_array_size.
| void bm::aggregator< BV >::combine_and_sub | ( | TPipe & | pipe | ) |
Run AND-SUB: AND (groups1) AND NOT ( OR(group0)) for a pipeline.
| pipe | - pipeline to run (should be prepared, filled and complete |
Definition at line 1292 of file bmaggregator.h.
References bm::aggregator< BV >::arg_groups::arg_bv0, bm::aggregator< BV >::arg_groups::arg_bv1, bm::bit_block_count(), BM_ASSERT, bm::BM_GAP, combine_and_sub(), FULL_BLOCK_FAKE_ADDR, bm::gap_max_bits, bm::get_block_coord(), bm::bvector< Alloc >::opt_compress, reset_vars(), bm::set_block_shift, and bm::set_sub_array_size.
|
protected |
Definition at line 1720 of file bmaggregator.h.
References BM_ASSERT, FULL_BLOCK_FAKE_ADDR, FULL_BLOCK_REAL_ADDR, bm::gap_test_unr(), process_bit_blocks_and(), process_bit_blocks_sub(), process_gap_blocks_and(), process_gap_blocks_sub(), sort_input_blocks_and(), sort_input_blocks_or(), and bm::word_bitcount64().
| bool bm::aggregator< BV >::combine_and_sub_bi | ( | BII | bi | ) |
Aggregate added group of vectors using fused logical AND-SUB.
search traget is back_inserter
Definition at line 1068 of file bmaggregator.h.
References combine_and_sub().
| void bm::aggregator< BV >::combine_and_sub_horizontal | ( | bvector_type & | bv_target, |
| const bvector_type_const_ptr * | bv_src_and, | ||
| size_t | src_and_size, | ||
| const bvector_type_const_ptr * | bv_src_sub, | ||
| size_t | src_sub_size ) |
Horizontal AND-SUB aggregation (potentially slower) method.
| bv_target | - target vector |
| bv_src_and | - array of pointers on bit-vector to AND aggregate |
| src_and_size | - size of bv_src_and |
| bv_src_sub | - array of pointers on bit-vector to SUB aggregate |
| src_sub_size | - size of bv_src_sub |
Definition at line 2456 of file bmaggregator.h.
References BM_ASSERT, and combine_and_horizontal().
| void bm::aggregator< BV >::combine_or | ( | bvector_type & | bv_target | ) |
Aggregate added group of vectors using logical OR Operation does NOT perform an explicit reset of arg group(s).
| bv_target | - target vector (input is arg group 0) |
Definition at line 1021 of file bmaggregator.h.
References BM_ASSERT, and bm::combine_or().
| void bm::aggregator< BV >::combine_or | ( | bvector_type & | bv_target, |
| const bvector_type_const_ptr * | bv_src, | ||
| size_t | src_size ) |
Aggregate group of vectors using logical OR.
| bv_target | - target vector |
| bv_src | - array of pointers on bit-vector aggregate arguments |
| src_size | - size of bv_src (how many vectors to aggregate) |
Definition at line 1101 of file bmaggregator.h.
References BM_ASSERT, bm::combine_or(), find_effective_sub_block_size(), and resize_target().
|
protected |
Definition at line 1626 of file bmaggregator.h.
References BM_ASSERT, FULL_BLOCK_FAKE_ADDR, process_bit_blocks_or(), process_gap_blocks_or(), bm::set_sub_array_size, and sort_input_blocks_or().
| void bm::aggregator< BV >::combine_or_horizontal | ( | bvector_type & | bv_target, |
| const bvector_type_const_ptr * | bv_src, | ||
| size_t | src_size ) |
Horizontal OR aggregation (potentially slower) method.
| bv_target | - target vector |
| bv_src | - array of pointers on bit-vector aggregate arguments |
| src_size | - size of bv_src (how many vectors to aggregate) |
Definition at line 2407 of file bmaggregator.h.
References BM_ASSERT, and bm::READWRITE.
| void bm::aggregator< BV >::combine_shift_right_and | ( | bvector_type & | bv_target | ) |
Aggregate added group of vectors using SHIFT-RIGHT and logical AND Operation does NOT perform an explicit reset of arg group(s).
| bv_target | - target vector (input is arg group 0) |
Definition at line 1089 of file bmaggregator.h.
References BM_ASSERT, and combine_shift_right_and().
Referenced by combine_shift_right_and(), combine_shift_right_and(), and run_step().
| bool bm::aggregator< BV >::combine_shift_right_and | ( | bvector_type & | bv_target, |
| const bvector_type_const_ptr * | bv_src_and, | ||
| size_t | src_and_size, | ||
| bool | any ) |
Fusion aggregate group of vectors using SHIFT right with AND.
| bv_target | - target vector |
| bv_src_and | - array of pointers on bit-vectors for AND masking |
| src_and_size | - size of AND group |
| any | - flag if caller needs any results asap (incomplete results) |
Definition at line 2493 of file bmaggregator.h.
References any_carry_overs(), combine_shift_right_and(), prepare_shift_right_and(), bm::set_sub_array_size, and bm::set_top_array_size.
|
protected |
Definition at line 2533 of file bmaggregator.h.
References bm::bit_block_copy(), bm::bit_block_count(), bm::bit_block_set(), bm::bit_is_all_zero(), BM_ASSERT, BM_IS_GAP, BMGAP_PTR, bm::gap_add_to_bitset(), get_arg_block(), and process_shift_right_and().
|
inlinestaticprotected |
Definition at line 784 of file bmaggregator.h.
Referenced by aggregator().
|
inlinestaticprotected |
Definition at line 796 of file bmaggregator.h.
Referenced by bm::aggregator< BV >::pipeline< Opt >::add().
|
inline |
Definition at line 488 of file bmaggregator.h.
|
staticprotected |
Definition at line 1557 of file bmaggregator.h.
References BM_ASSERT, BMNOEXCEPT, FULL_BLOCK_FAKE_ADDR, max_size, and bm::set_sub_array_size.
Referenced by combine_and(), combine_and_sub(), combine_and_sub(), combine_or(), find_effective_sub_block_size(), and find_first_and_sub().
|
staticprotected |
Definition at line 1605 of file bmaggregator.h.
References BMNOEXCEPT, and find_effective_sub_block_size().
| bool bm::aggregator< BV >::find_first_and_sub | ( | size_type & | idx | ) |
Aggregate added group of vectors using fused logical AND-SUB, find the first match.
| idx | - [out] index of the first occurence |
Definition at line 1079 of file bmaggregator.h.
References find_first_and_sub().
Referenced by find_first_and_sub().
| bool bm::aggregator< BV >::find_first_and_sub | ( | size_type & | idx, |
| const bvector_type_const_ptr * | bv_src_and, | ||
| size_t | src_and_size, | ||
| const bvector_type_const_ptr * | bv_src_sub, | ||
| size_t | src_sub_size ) |
Definition at line 1458 of file bmaggregator.h.
References bm::bit_find_first(), bm::block_to_global_index(), BM_ASSERT, combine_and_sub(), find_effective_sub_block_size(), max_top_blocks(), bm::set_array_mask, bm::set_array_shift, bm::set_block_shift, and bm::set_sub_array_size.
|
inlinestaticprotected |
Definition at line 789 of file bmaggregator.h.
Referenced by ~aggregator().
|
inlinestaticprotected |
Definition at line 802 of file bmaggregator.h.
Referenced by bm::aggregator< BV >::pipeline< Opt >::~pipeline().
|
staticprotected |
Definition at line 2673 of file bmaggregator.h.
References BMNOEXCEPT.
Referenced by combine_shift_right_and().
|
inline |
Definition at line 634 of file bmaggregator.h.
|
inline |
Get current operation code.
Definition at line 606 of file bmaggregator.h.
|
inline |
Definition at line 622 of file bmaggregator.h.
|
inline |
Definition at line 624 of file bmaggregator.h.
Referenced by DNA_FingerprintScanner< bm::bvector<> >::FindCollection().
|
inline |
Definition at line 626 of file bmaggregator.h.
|
staticprotected |
Definition at line 2257 of file bmaggregator.h.
References BMNOEXCEPT.
Referenced by bm::aggregator< BV >::pipeline< Opt >::complete(), and find_first_and_sub().
|
protected |
Definition at line 2478 of file bmaggregator.h.
References resize_target().
Referenced by combine_shift_right_and(), and stage().
|
protected |
Definition at line 1994 of file bmaggregator.h.
References bm::bit_block_and(), bm::bit_block_and_2way(), bm::bit_block_and_3way(), bm::bit_block_and_5way(), bm::bit_block_copy(), bm::bit_block_init_and_2way(), bm::bit_find_first_if_1(), bm::block_init_digest0(), bm::calc_block_digest0(), bm::digest_mask(), bm::set_block_mask, bm::set_block_shift, bm::set_word_mask, bm::set_word_shift, bm::aggregator< BV >::arena::v_arg_and_blk, and bm::word_bitcount64().
Referenced by combine_and(), and combine_and_sub().
|
protected |
Definition at line 1924 of file bmaggregator.h.
References bm::bit_block_copy(), bm::bit_block_or(), bm::bit_block_or_3way(), bm::bit_block_or_5way(), bm::bit_block_set(), BM_ASSERT, FULL_BLOCK_FAKE_ADDR, bm::is_bits_one(), and bm::aggregator< BV >::arena::v_arg_or_blk.
Referenced by combine_or().
|
protected |
Definition at line 2125 of file bmaggregator.h.
References bm::bit_block_sub(), bm::bit_block_sub_3way(), bm::bit_block_sub_5way(), bm::bit_find_first_if_1(), bm::set_word_mask, bm::set_word_shift, bm::aggregator< BV >::arena::v_arg_or_blk, and bm::word_bitcount64().
Referenced by combine_and_sub().
|
protected |
Definition at line 1820 of file bmaggregator.h.
References bm::bit_find_first_if_1(), bm::bit_is_all_zero(), BM_ASSERT, bm::gap_and_to_bitset(), bm::gap_test_unr(), bm::aggregator< BV >::arena::v_arg_and_blk_gap, and bm::word_bitcount64().
Referenced by combine_and(), and combine_and_sub().
|
protected |
Definition at line 1808 of file bmaggregator.h.
References bm::gap_add_to_bitset(), and bm::aggregator< BV >::arena::v_arg_or_blk_gap.
Referenced by combine_or().
|
protected |
Definition at line 1854 of file bmaggregator.h.
References bm::bit_find_first_if_1(), bm::bit_is_all_zero(), BM_ASSERT, bm::gap_sub_to_bitset(), bm::gap_test_unr(), bm::aggregator< BV >::arena::v_arg_or_blk_gap, and bm::word_bitcount64().
Referenced by combine_and_sub().
|
staticprotected |
Definition at line 2612 of file bmaggregator.h.
References bm::bit_block_set(), bm::bit_block_shift_r1_and_unr(), BM_ASSERT, BM_IS_GAP, BMGAP_PTR, BMNOEXCEPT, BMRESTRICT, bm::calc_block_digest0(), FULL_BLOCK_REAL_ADDR, bm::gap_and_to_bitset(), and bm::set_block_size.
Referenced by combine_shift_right_and().
| void bm::aggregator< BV >::reset | ( | ) |
Reset aggregate groups, forget all attached vectors.
Definition at line 941 of file bmaggregator.h.
References reset_range_hint(), and reset_vars().
Referenced by DemoAND(), DemoAND_SUB(), DemoOR(), DemoSUB(), and main().
| void bm::aggregator< BV >::reset_range_hint | ( | ) |
Reset range hint to false.
Definition at line 962 of file bmaggregator.h.
References BMNOEXCEPT, and bm::id_max.
Referenced by reset().
|
protected |
Definition at line 950 of file bmaggregator.h.
References op_undefined.
Referenced by combine_and_sub(), and reset().
|
staticprotected |
Definition at line 2210 of file bmaggregator.h.
References BM_ASSERT.
Referenced by combine_and(), combine_and_sub(), combine_or(), and prepare_shift_right_and().
| aggregator< BV >::operation_status bm::aggregator< BV >::run_step | ( | unsigned | i, |
| unsigned | j ) |
Run a step of current arrgegation operation.
Definition at line 2720 of file bmaggregator.h.
References any_carry_overs(), BM_ASSERT, BM_NOT_DEFINED, BM_SHIFT_R_AND, combine_shift_right_and(), op_done, op_in_progress, op_prepared, and bm::set_sub_array_size.
|
inline |
Definition at line 363 of file bmaggregator.h.
|
inline |
Set operation code for the aggregator.
Definition at line 609 of file bmaggregator.h.
|
inline |
set on-the-fly bit-block compression By default aggregator does not try to optimize result, but in some cases it can be quite a lot faster than calling bvector<>::optimize() later (because block data sits in CPU cache).
| opt | - optimization mode (full compression by default) |
Definition at line 359 of file bmaggregator.h.
Referenced by DemoAND(), DemoAND_SUB(), DemoOR(), and DemoSUB().
| bool bm::aggregator< BV >::set_range_hint | ( | size_type | from, |
| size_type | to ) |
Set search hint for the range, where results needs to be searched (experimental for internal use).
Definition at line 974 of file bmaggregator.h.
References BMNOEXCEPT, bm::gap_init_range_block(), bm::set_block_mask, and bm::set_block_shift.
|
protected |
Definition at line 2315 of file bmaggregator.h.
References BM_ASSERT, BM_IS_GAP, BMGAP_PTR, FULL_BLOCK_FAKE_ADDR, and FULL_BLOCK_REAL_ADDR.
Referenced by combine_and(), and combine_and_sub().
|
protected |
Definition at line 2278 of file bmaggregator.h.
References BM_IS_GAP, BMGAP_PTR, and FULL_BLOCK_FAKE_ADDR.
Referenced by combine_and_sub(), and combine_or().
| void bm::aggregator< BV >::stage | ( | bm::word_t * | temp_block | ) |
Prepare operation, create internal resources, analyse dependencies.
Prerequisites are: that operation is set and all argument vectors are added
Definition at line 2696 of file bmaggregator.h.
References BM_ASSERT, BM_NOT_DEFINED, BM_SHIFT_R_AND, check_create_target(), op_prepared, and prepare_shift_right_and().
|
protected |
Definition at line 1895 of file bmaggregator.h.
References bm::gap_test_unr().
|
protected |
Definition at line 1907 of file bmaggregator.h.
References bm::gap_test_unr().