BitMagic-C++
bm::serial_stream_iterator< DEC, BLOCK_IDX > Class Template Reference

Serialization stream iterator. More...

#include <bmserial.h>

Inheritance diagram for bm::serial_stream_iterator< DEC, BLOCK_IDX >:
Collaboration diagram for bm::serial_stream_iterator< DEC, BLOCK_IDX >:

Public Types

enum  iterator_state {
  e_unknown = 0 , e_list_ids , e_blocks , e_zero_blocks ,
  e_one_blocks , e_bit_block , e_gap_block
}
 iterator is a state machine, this enum encodes its key value More...
typedef deseriaizer_base< DEC, BLOCK_IDX >::decoder_type decoder_type
typedef BLOCK_IDX block_idx_type
typedef deseriaizer_base< DEC, block_idx_typeparent_type
typedef unsigned(serial_stream_iterator< DEC, BLOCK_IDX >::* get_bit_func_type) (bm::word_t *, bm::word_t *)
 member function pointer for bitset-bitset get operations

Public Member Functions

 serial_stream_iterator (const unsigned char *buf)
 ~serial_stream_iterator ()
block_idx_type bv_size () const
 serialized bitvector size
bool is_eof () const
 Returns true if end of bit-stream reached.
void next ()
 get next block
block_idx_type skip_mono_blocks () BMNOEXCEPT
 skip all zero or all-one blocks
unsigned get_bit_block (bm::word_t *dst_block, bm::word_t *tmp_block, set_operation op)
 read bit block, using logical operation
void get_gap_block (bm::gap_word_t *dst_block)
 Read gap block data (with head).
unsigned dec_size () const
 Return current decoder size.
decoder_typedecoder ()
 Get low level access to the decoder (use carefully).
iterator_state state () const BMNOEXCEPT
 Returns iterator internal state.
iterator_state get_state () const BMNOEXCEPT
unsigned get_id_count () const BMNOEXCEPT
 Number of ids in the inverted list (valid for e_list_ids).
bm::id_t get_id () const BMNOEXCEPT
 Get last id from the id list.
block_idx_type block_idx () const BMNOEXCEPT
 Get current block index.
unsigned get_bit_block_ASSIGN (bm::word_t *dst_block, bm::word_t *tmp_block)
unsigned get_bit_block_OR (bm::word_t *dst_block, bm::word_t *tmp_block)
unsigned get_bit_block_AND (bm::word_t *dst_block, bm::word_t *tmp_block)
unsigned get_bit_block_SUB (bm::word_t *dst_block, bm::word_t *tmp_block)
unsigned get_bit_block_XOR (bm::word_t *dst_block, bm::word_t *tmp_block)
unsigned get_bit_block_COUNT (bm::word_t *dst_block, bm::word_t *tmp_block)
unsigned get_bit_block_COUNT_AND (bm::word_t *dst_block, bm::word_t *tmp_block)
unsigned get_bit_block_COUNT_OR (bm::word_t *dst_block, bm::word_t *tmp_block)
unsigned get_bit_block_COUNT_XOR (bm::word_t *dst_block, bm::word_t *tmp_block)
unsigned get_bit_block_COUNT_SUB_AB (bm::word_t *dst_block, bm::word_t *tmp_block)
unsigned get_bit_block_COUNT_SUB_BA (bm::word_t *dst_block, bm::word_t *tmp_block)
unsigned get_bit_block_COUNT_A (bm::word_t *dst_block, bm::word_t *tmp_block)
unsigned get_bit_block_COUNT_B (bm::word_t *dst_block, bm::word_t *tmp_block)
unsigned get_arr_bit (bm::word_t *dst_block, bool clear_target=true) BMNOEXCEPT
 Get array of bits out of the decoder into bit block (Converts inverted list into bits) Returns number of words (bits) being read.
unsigned get_block_type () const BMNOEXCEPT
 Get current block type.
unsigned get_bit () BMNOEXCEPT
void get_inv_arr (bm::word_t *block) BMNOEXCEPT
bool try_skip (block_idx_type nb, block_idx_type expect_nb) BMNOEXCEPT
 Try to skip if skip bookmark is available within reach.

Protected Attributes

get_bit_func_type bit_func_table_ [bm::set_END]
unsigned char header_flag_
decoder_type decoder_
bool end_of_stream_
block_idx_type bv_size_
iterator_state state_
unsigned id_cnt_
 Id counter for id list.
bm::id_t last_id_
 Last id from the id list.
gap_word_t glevels_ [bm::gap_levels]
 GAP levels.
unsigned block_type_
 current block type
block_idx_type block_idx_
 current block index
block_idx_type mono_block_cnt_
 number of 0 or 1 blocks
gap_word_t gap_head_
gap_word_tblock_idx_arr_
Protected Attributes inherited from bm::deseriaizer_base< DEC, BLOCK_IDX >
bm::gap_word_tid_array_
 ptr to idx array for temp decode use
unsigned * sb_id_array_
 ptr to super-block idx array (temp)
block_idx_type bookmark_idx_
 last bookmark block index
unsigned skip_offset_
 bookmark to skip 256 encoded blocks
const unsigned char * skip_pos_
 decoder skip position

Additional Inherited Members

Protected Types inherited from bm::deseriaizer_base< DEC, BLOCK_IDX >
typedef DEC decoder_type
typedef BLOCK_IDX block_idx_type
typedef bm::bit_in< DEC > bit_in_type
Protected Member Functions inherited from bm::deseriaizer_base< DEC, BLOCK_IDX >
 deseriaizer_base ()
void read_gap_block (decoder_type &decoder, unsigned block_type, bm::gap_word_t *dst_block, bm::gap_word_t &gap_head)
 Read GAP block from the stream.
unsigned read_id_list (decoder_type &decoder, unsigned block_type, bm::gap_word_t *dst_arr)
 Read list of bit ids.
void read_bic_arr (decoder_type &decoder, bm::word_t *blk, unsigned block_type) BMNOEXCEPT
 Read binary interpolated list into a bit-set.
unsigned read_bic_sb_arr (decoder_type &decoder, unsigned block_type, unsigned *dst_arr, unsigned *sb_idx)
 Read list of bit ids for super-blocks.
void read_bic_gap (decoder_type &decoder, bm::word_t *blk) BMNOEXCEPT
 Read binary interpolated gap blocks into a bitset.
void read_bic_arr_inv (decoder_type &decoder, bm::word_t *blk) BMNOEXCEPT
 Read inverted binary interpolated list into a bit-set.
void read_digest0_block (decoder_type &decoder, bm::word_t *blk) BMNOEXCEPT
 Read digest0-type bit-block.
block_idx_type try_skip (decoder_type &decoder, block_idx_type nb, block_idx_type expect_nb) BMNOEXCEPT
 Try to skip if skip bookmark is available within reach.
Static Protected Member Functions inherited from bm::deseriaizer_base< DEC, BLOCK_IDX >
static void read_0runs_block (decoder_type &decoder, bm::word_t *blk) BMNOEXCEPT
 read bit-block encoded as runs
static const char * err_msg () BMNOEXCEPT

Detailed Description

template<class DEC, typename BLOCK_IDX>
class bm::serial_stream_iterator< DEC, BLOCK_IDX >

Serialization stream iterator.

Iterates blocks and control tokens of serialized bit-stream

Definition at line 767 of file bmserial.h.

Member Typedef Documentation

◆ block_idx_type

template<class DEC, typename BLOCK_IDX>
typedef BLOCK_IDX bm::serial_stream_iterator< DEC, BLOCK_IDX >::block_idx_type

Definition at line 771 of file bmserial.h.

◆ decoder_type

template<class DEC, typename BLOCK_IDX>
typedef deseriaizer_base<DEC,BLOCK_IDX>::decoder_type bm::serial_stream_iterator< DEC, BLOCK_IDX >::decoder_type

Definition at line 770 of file bmserial.h.

◆ get_bit_func_type

template<class DEC, typename BLOCK_IDX>
typedef unsigned(serial_stream_iterator< DEC, BLOCK_IDX >::* bm::serial_stream_iterator< DEC, BLOCK_IDX >::get_bit_func_type) (bm::word_t *, bm::word_t *)

member function pointer for bitset-bitset get operations

Definition at line 837 of file bmserial.h.

◆ parent_type

template<class DEC, typename BLOCK_IDX>
typedef deseriaizer_base<DEC, block_idx_type> bm::serial_stream_iterator< DEC, BLOCK_IDX >::parent_type

Definition at line 772 of file bmserial.h.

Member Enumeration Documentation

◆ iterator_state

template<class DEC, typename BLOCK_IDX>
enum bm::serial_stream_iterator::iterator_state

iterator is a state machine, this enum encodes its key value

Enumerator
e_unknown 
e_list_ids 

plain int array

e_blocks 

stream of blocks

e_zero_blocks 

one or more zero bit blocks

e_one_blocks 

one or more all-1 bit blocks

e_bit_block 

one bit block

e_gap_block 

one gap block

Definition at line 808 of file bmserial.h.

Constructor & Destructor Documentation

◆ serial_stream_iterator()

◆ ~serial_stream_iterator()

template<typename DEC, typename BLOCK_IDX>
bm::serial_stream_iterator< DEC, BLOCK_IDX >::~serial_stream_iterator ( )

Definition at line 4849 of file bmserial.h.

References block_idx_arr_.

Member Function Documentation

◆ block_idx()

template<class DEC, typename BLOCK_IDX>
block_idx_type bm::serial_stream_iterator< DEC, BLOCK_IDX >::block_idx ( ) const
inline

Get current block index.

Definition at line 831 of file bmserial.h.

◆ bv_size()

template<class DEC, typename BLOCK_IDX>
block_idx_type bm::serial_stream_iterator< DEC, BLOCK_IDX >::bv_size ( ) const
inline

serialized bitvector size

Definition at line 779 of file bmserial.h.

◆ dec_size()

template<class DEC, typename BLOCK_IDX>
unsigned bm::serial_stream_iterator< DEC, BLOCK_IDX >::dec_size ( ) const
inline

Return current decoder size.

Definition at line 800 of file bmserial.h.

◆ decoder()

template<class DEC, typename BLOCK_IDX>
decoder_type & bm::serial_stream_iterator< DEC, BLOCK_IDX >::decoder ( )
inline

Get low level access to the decoder (use carefully).

Definition at line 803 of file bmserial.h.

◆ get_arr_bit()

template<typename DEC, typename BLOCK_IDX>
unsigned bm::serial_stream_iterator< DEC, BLOCK_IDX >::get_arr_bit ( bm::word_t * dst_block,
bool clear_target = true )

◆ get_bit()

template<typename DEC, typename BLOCK_IDX>
unsigned bm::serial_stream_iterator< DEC, BLOCK_IDX >::get_bit ( )

◆ get_bit_block()

template<typename DEC, typename BLOCK_IDX>
unsigned bm::serial_stream_iterator< DEC, BLOCK_IDX >::get_bit_block ( bm::word_t * dst_block,
bm::word_t * tmp_block,
set_operation op )

read bit block, using logical operation

Definition at line 6354 of file bmserial.h.

References bit_func_table_, block_idx_, BM_ASSERT, e_bit_block, e_blocks, and state_.

◆ get_bit_block_AND()

◆ get_bit_block_ASSIGN()

◆ get_bit_block_COUNT()

◆ get_bit_block_COUNT_A()

◆ get_bit_block_COUNT_AND()

◆ get_bit_block_COUNT_B()

template<class DEC, typename BLOCK_IDX>
unsigned bm::serial_stream_iterator< DEC, BLOCK_IDX >::get_bit_block_COUNT_B ( bm::word_t * dst_block,
bm::word_t * tmp_block )
inline

Definition at line 865 of file bmserial.h.

◆ get_bit_block_COUNT_OR()

◆ get_bit_block_COUNT_SUB_AB()

◆ get_bit_block_COUNT_SUB_BA()

◆ get_bit_block_COUNT_XOR()

◆ get_bit_block_OR()

◆ get_bit_block_SUB()

◆ get_bit_block_XOR()

◆ get_block_type()

template<class DEC, typename BLOCK_IDX>
unsigned bm::serial_stream_iterator< DEC, BLOCK_IDX >::get_block_type ( ) const
inline

Get current block type.

Definition at line 877 of file bmserial.h.

◆ get_gap_block()

template<typename DEC, typename BLOCK_IDX>
void bm::serial_stream_iterator< DEC, BLOCK_IDX >::get_gap_block ( bm::gap_word_t * dst_block)

◆ get_id()

template<class DEC, typename BLOCK_IDX>
bm::id_t bm::serial_stream_iterator< DEC, BLOCK_IDX >::get_id ( ) const
inline

Get last id from the id list.

Definition at line 828 of file bmserial.h.

◆ get_id_count()

template<class DEC, typename BLOCK_IDX>
unsigned bm::serial_stream_iterator< DEC, BLOCK_IDX >::get_id_count ( ) const
inline

Number of ids in the inverted list (valid for e_list_ids).

Definition at line 825 of file bmserial.h.

◆ get_inv_arr()

◆ get_state()

template<class DEC, typename BLOCK_IDX>
iterator_state bm::serial_stream_iterator< DEC, BLOCK_IDX >::get_state ( ) const
inline

Definition at line 823 of file bmserial.h.

◆ is_eof()

template<class DEC, typename BLOCK_IDX>
bool bm::serial_stream_iterator< DEC, BLOCK_IDX >::is_eof ( ) const
inline

Returns true if end of bit-stream reached.

Definition at line 782 of file bmserial.h.

Referenced by next().

◆ next()

template<typename DEC, typename BLOCK_IDX>
void bm::serial_stream_iterator< DEC, BLOCK_IDX >::next ( )

get next block

Definition at line 4857 of file bmserial.h.

References block_idx_, block_type_, BM_ASSERT, BM_FALLTHROUGH, bm::deseriaizer_base< DEC, BLOCK_IDX >::bookmark_idx_, decoder_, e_bit_block, e_blocks, e_gap_block, e_list_ids, e_one_blocks, e_unknown, e_zero_blocks, end_of_stream_, bm::deseriaizer_base< DEC, BLOCK_IDX >::err_msg(), gap_head_, id_cnt_, is_eof(), last_id_, mono_block_cnt_, bm::set_block_16one, bm::set_block_16zero, bm::set_block_1one, bm::set_block_1zero, bm::set_block_32one, bm::set_block_32zero, bm::set_block_64one, bm::set_block_8one, bm::set_block_8zero, bm::set_block_aone, bm::set_block_arr_bienc, bm::set_block_arr_bienc_8bh, bm::set_block_arr_bienc_inv, bm::set_block_arrbit, bm::set_block_arrbit_inv, bm::set_block_arrgap, bm::set_block_arrgap_bienc, bm::set_block_arrgap_bienc_inv, bm::set_block_arrgap_bienc_inv_v2, bm::set_block_arrgap_bienc_v2, bm::set_block_arrgap_egamma, bm::set_block_arrgap_egamma_inv, bm::set_block_arrgap_inv, bm::set_block_azero, bm::set_block_bit, bm::set_block_bit_0runs, bm::set_block_bit_1bit, bm::set_block_bit_digest0, bm::set_block_bit_interval, bm::set_block_bitgap_bienc, bm::set_block_end, bm::set_block_gap, bm::set_block_gap_bienc, bm::set_block_gap_bienc_v2, bm::set_block_gap_egamma, bm::set_block_gapbit, bm::set_block_ref_eq, bm::set_block_xor_ref16, bm::set_block_xor_ref16_um, bm::set_block_xor_ref32, bm::set_block_xor_ref32_um, bm::set_block_xor_ref8, bm::set_block_xor_ref8_um, bm::set_nb_bookmark16, bm::set_nb_bookmark24, bm::set_nb_bookmark32, bm::set_nb_sync_mark16, bm::set_nb_sync_mark24, bm::set_nb_sync_mark32, bm::set_nb_sync_mark48, bm::set_nb_sync_mark64, bm::set_nb_sync_mark8, bm::set_sblock_bienc, bm::set_total_blocks, bm::deseriaizer_base< DEC, BLOCK_IDX >::skip_offset_, bm::deseriaizer_base< DEC, BLOCK_IDX >::skip_pos_, and state_.

Referenced by serial_stream_iterator().

◆ skip_mono_blocks()

template<typename DEC, typename BLOCK_IDX>
serial_stream_iterator< DEC, BLOCK_IDX >::block_idx_type bm::serial_stream_iterator< DEC, BLOCK_IDX >::skip_mono_blocks ( )

skip all zero or all-one blocks

Definition at line 5091 of file bmserial.h.

References block_idx_, BM_ASSERT, BMNOEXCEPT, e_blocks, e_one_blocks, e_zero_blocks, mono_block_cnt_, and state_.

◆ state()

template<class DEC, typename BLOCK_IDX>
iterator_state bm::serial_stream_iterator< DEC, BLOCK_IDX >::state ( ) const
inline

Returns iterator internal state.

Definition at line 821 of file bmserial.h.

◆ try_skip()

template<class DEC, typename BLOCK_IDX>
bool bm::serial_stream_iterator< DEC, BLOCK_IDX >::try_skip ( block_idx_type nb,
block_idx_type expect_nb )
inline

Try to skip if skip bookmark is available within reach.

Returns
true if skip went well

Definition at line 886 of file bmserial.h.

Field Documentation

◆ bit_func_table_

template<class DEC, typename BLOCK_IDX>
get_bit_func_type bm::serial_stream_iterator< DEC, BLOCK_IDX >::bit_func_table_[bm::set_END]
protected

Definition at line 897 of file bmserial.h.

Referenced by get_bit_block(), and serial_stream_iterator().

◆ block_idx_

template<class DEC, typename BLOCK_IDX>
block_idx_type bm::serial_stream_iterator< DEC, BLOCK_IDX >::block_idx_
protected

current block index

Definition at line 910 of file bmserial.h.

Referenced by get_bit(), get_bit_block(), get_gap_block(), next(), serial_stream_iterator(), and skip_mono_blocks().

◆ block_idx_arr_

template<class DEC, typename BLOCK_IDX>
gap_word_t* bm::serial_stream_iterator< DEC, BLOCK_IDX >::block_idx_arr_
protected

Definition at line 914 of file bmserial.h.

Referenced by serial_stream_iterator(), and ~serial_stream_iterator().

◆ block_type_

◆ bv_size_

template<class DEC, typename BLOCK_IDX>
block_idx_type bm::serial_stream_iterator< DEC, BLOCK_IDX >::bv_size_
protected

Definition at line 903 of file bmserial.h.

Referenced by serial_stream_iterator().

◆ decoder_

◆ end_of_stream_

template<class DEC, typename BLOCK_IDX>
bool bm::serial_stream_iterator< DEC, BLOCK_IDX >::end_of_stream_
protected

Definition at line 902 of file bmserial.h.

Referenced by next(), and serial_stream_iterator().

◆ gap_head_

template<class DEC, typename BLOCK_IDX>
gap_word_t bm::serial_stream_iterator< DEC, BLOCK_IDX >::gap_head_
protected

Definition at line 913 of file bmserial.h.

Referenced by get_gap_block(), and next().

◆ glevels_

template<class DEC, typename BLOCK_IDX>
gap_word_t bm::serial_stream_iterator< DEC, BLOCK_IDX >::glevels_[bm::gap_levels]
protected

GAP levels.

Definition at line 907 of file bmserial.h.

Referenced by serial_stream_iterator().

◆ header_flag_

template<class DEC, typename BLOCK_IDX>
unsigned char bm::serial_stream_iterator< DEC, BLOCK_IDX >::header_flag_
protected

Definition at line 899 of file bmserial.h.

Referenced by serial_stream_iterator().

◆ id_cnt_

template<class DEC, typename BLOCK_IDX>
unsigned bm::serial_stream_iterator< DEC, BLOCK_IDX >::id_cnt_
protected

Id counter for id list.

Definition at line 905 of file bmserial.h.

Referenced by next(), and serial_stream_iterator().

◆ last_id_

template<class DEC, typename BLOCK_IDX>
bm::id_t bm::serial_stream_iterator< DEC, BLOCK_IDX >::last_id_
protected

Last id from the id list.

Definition at line 906 of file bmserial.h.

Referenced by next().

◆ mono_block_cnt_

template<class DEC, typename BLOCK_IDX>
block_idx_type bm::serial_stream_iterator< DEC, BLOCK_IDX >::mono_block_cnt_
protected

number of 0 or 1 blocks

Definition at line 911 of file bmserial.h.

Referenced by next(), serial_stream_iterator(), and skip_mono_blocks().

◆ state_


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