23
23
<div class="contents">
24
<h1>Set algorithms<br/>
24
<h1>GAP functions<br/>
26
[<a class="el" href="a00112.html">BitMagic C++ Library</a>]</small>
26
[<a class="el" href="a00117.html">BitMagic C++ Library</a>]</small>
28
28
<p><div class="dynheader">
29
Collaboration diagram for Set algorithms:</div>
29
Collaboration diagram for GAP functions:</div>
30
30
<div class="dynsection">
31
31
<center><table><tr><td><img src="a00119.png" border="0" alt="" usemap="#a00119_map"/>
32
32
<map name="a00119_map" id="a00119">
33
<area shape="rect" href="a00112.html" title="For more information please visit: http://bmagic.sourceforge.net." alt="" coords="5,5,149,35"/><area shape="rect" href="a00120.html" title="Distance metrics" alt="" coords="352,5,472,35"/></map></td></tr></table></center>
33
<area shape="rect" href="a00117.html" title="For more information please visit: http://bmagic.sourceforge.net." alt="" coords="5,5,149,35"/></map></td></tr></table></center>
36
36
<table border="0" cellpadding="0" cellspacing="0">
37
<tr><td colspan="2"><h2>Modules</h2></td></tr>
38
<tr><td class="memItemLeft" align="right" valign="top"> </td><td class="memItemRight" valign="bottom"><a class="el" href="a00120.html">Distance metrics</a></td></tr>
37
<tr><td colspan="2"><h2>Data Structures</h2></td></tr>
38
<tr><td class="memItemLeft" align="right" valign="top">struct </td><td class="memItemRight" valign="bottom"><a class="el" href="a00067.html">bm::gap_len_table< T ></a></td></tr>
39
<tr><td class="mdescLeft"> </td><td class="mdescRight">Default GAP lengths table. <a href="a00067.html#_details">More...</a><br/></td></tr>
40
<tr><td class="memItemLeft" align="right" valign="top">struct </td><td class="memItemRight" valign="bottom"><a class="el" href="a00068.html">bm::gap_len_table_min< T ></a></td></tr>
41
<tr><td class="mdescLeft"> </td><td class="mdescRight">Alternative GAP lengths table. Good for for memory saver mode and very sparse bitsets. <a href="a00068.html#_details">More...</a><br/></td></tr>
39
42
<tr><td colspan="2"><h2>Functions</h2></td></tr>
40
<tr><td class="memTemplParams" colspan="2">template<class BV , class It > </td></tr>
41
<tr><td class="memTemplItemLeft" align="right" valign="top">void </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00119.html#ga54ff78528c99ae3ca443eb99ba44785b">bm::combine_or</a> (BV &bv, It first, It last)</td></tr>
42
<tr><td class="mdescLeft"> </td><td class="mdescRight">OR Combine bitvector and the iterable sequence. <a href="#ga54ff78528c99ae3ca443eb99ba44785b"></a><br/></td></tr>
43
<tr><td class="memTemplParams" colspan="2">template<class BV , class It > </td></tr>
44
<tr><td class="memTemplItemLeft" align="right" valign="top">void </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00119.html#ga3cb362aee03de6a321495100ae5c8375">bm::combine_xor</a> (BV &bv, It first, It last)</td></tr>
45
<tr><td class="mdescLeft"> </td><td class="mdescRight">XOR Combine bitvector and the iterable sequence. <a href="#ga3cb362aee03de6a321495100ae5c8375"></a><br/></td></tr>
46
<tr><td class="memTemplParams" colspan="2">template<class BV , class It > </td></tr>
47
<tr><td class="memTemplItemLeft" align="right" valign="top">void </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00119.html#gab88c5bf51484323e0139aa789d7f0b98">bm::combine_sub</a> (BV &bv, It first, It last)</td></tr>
48
<tr><td class="mdescLeft"> </td><td class="mdescRight">SUB Combine bitvector and the iterable sequence. <a href="#gab88c5bf51484323e0139aa789d7f0b98"></a><br/></td></tr>
49
<tr><td class="memTemplParams" colspan="2">template<class BV , class It > </td></tr>
50
<tr><td class="memTemplItemLeft" align="right" valign="top">void </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00119.html#ga22922f71bd1eec8a5b663dc77b90cf6c">bm::combine_and_sorted</a> (BV &bv, It first, It last)</td></tr>
51
<tr><td class="mdescLeft"> </td><td class="mdescRight">AND Combine bitvector and the iterable sequence. <a href="#ga22922f71bd1eec8a5b663dc77b90cf6c"></a><br/></td></tr>
52
<tr><td class="memTemplParams" colspan="2">template<class BV , class It > </td></tr>
53
<tr><td class="memTemplItemLeft" align="right" valign="top">void </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00119.html#ga819bdab57a624a08456ea79161b9c5d2">bm::combine_and</a> (BV &bv, It first, It last)</td></tr>
54
<tr><td class="mdescLeft"> </td><td class="mdescRight">AND Combine bitvector and the iterable sequence. <a href="#ga819bdab57a624a08456ea79161b9c5d2"></a><br/></td></tr>
55
<tr><td class="memTemplParams" colspan="2">template<class BV > </td></tr>
56
<tr><td class="memTemplItemLeft" align="right" valign="top"><a class="el" href="a00110.html#aa3824d882a037396370b16f2f0a8bf37">bm::id_t</a> </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00119.html#gac7a59d3bc266310ec127cb3efadb0d33">bm::count_intervals</a> (const BV &bv)</td></tr>
57
<tr><td class="mdescLeft"> </td><td class="mdescRight">Compute number of bit intervals (GAPs) in the bitvector. <a href="#gac7a59d3bc266310ec127cb3efadb0d33"></a><br/></td></tr>
58
<tr><td class="memTemplParams" colspan="2">template<class BV , class It > </td></tr>
59
<tr><td class="memTemplItemLeft" align="right" valign="top">void </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00119.html#gacd88ed9539553dd93419b7029e8a4584">bm::export_array</a> (BV &bv, It first, It last)</td></tr>
60
<tr><td class="mdescLeft"> </td><td class="mdescRight">Export bitset from an array of binary data representing the bit vector. <a href="#gacd88ed9539553dd93419b7029e8a4584"></a><br/></td></tr>
43
<tr><td class="memTemplParams" colspan="2">template<typename T > </td></tr>
44
<tr><td class="memTemplItemLeft" align="right" valign="top">unsigned </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00119.html#ga866352ef5986a7d2b709795d127b666b">bm::gap_test</a> (const T *buf, unsigned pos)</td></tr>
45
<tr><td class="mdescLeft"> </td><td class="mdescRight">Tests if bit = pos is true. <a href="#ga866352ef5986a7d2b709795d127b666b"></a><br/></td></tr>
46
<tr><td class="memTemplParams" colspan="2">template<typename T > </td></tr>
47
<tr><td class="memTemplItemLeft" align="right" valign="top">unsigned </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00119.html#ga570a6f573ffb9ac9e41a688d2bdc6004">bm::gap_bit_count</a> (const T *buf, unsigned dsize=0)</td></tr>
48
<tr><td class="mdescLeft"> </td><td class="mdescRight">Calculates number of bits ON in GAP buffer. <a href="#ga570a6f573ffb9ac9e41a688d2bdc6004"></a><br/></td></tr>
49
<tr><td class="memTemplParams" colspan="2">template<typename T > </td></tr>
50
<tr><td class="memTemplItemLeft" align="right" valign="top">int </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00119.html#ga406952734f1b05962941b32e37b3eb96">bm::gapcmp</a> (const T *buf1, const T *buf2)</td></tr>
51
<tr><td class="mdescLeft"> </td><td class="mdescRight">Lexicographical comparison of GAP buffers. <a href="#ga406952734f1b05962941b32e37b3eb96"></a><br/></td></tr>
52
<tr><td class="memTemplParams" colspan="2">template<typename T , class F > </td></tr>
53
<tr><td class="memTemplItemLeft" align="right" valign="top">unsigned </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00119.html#ga5e3123c3c9d3587f470abdbe6c8c3ad3">bm::gap_buff_any_op</a> (const T *BMRESTRICT vect1, unsigned vect1_mask, const T *BMRESTRICT vect2, unsigned vect2_mask, F f)</td></tr>
54
<tr><td class="mdescLeft"> </td><td class="mdescRight">Abstract distance test operation for GAP buffers. Receives functor F as a template argument. <a href="#ga5e3123c3c9d3587f470abdbe6c8c3ad3"></a><br/></td></tr>
55
<tr><td class="memTemplParams" colspan="2">template<typename T > </td></tr>
56
<tr><td class="memTemplItemLeft" align="right" valign="top">unsigned </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00119.html#ga69186bd13bda27e04b3e33683ff884c2">bm::gap_set_value</a> (unsigned val, T *BMRESTRICT buf, unsigned pos, unsigned *BMRESTRICT is_set)</td></tr>
57
<tr><td class="mdescLeft"> </td><td class="mdescRight">Abstract distance(similarity) operation for GAP buffers. Receives functor F as a template argument. <a href="#ga69186bd13bda27e04b3e33683ff884c2"></a><br/></td></tr>
58
<tr><td class="memTemplParams" colspan="2">template<typename T > </td></tr>
59
<tr><td class="memTemplItemLeft" align="right" valign="top">int </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00119.html#gaa7df7193094353ea24b8519debf745be">bm::gap_find_in_block</a> (const T *buf, unsigned nbit, <a class="el" href="a00115.html#aa3824d882a037396370b16f2f0a8bf37">bm::id_t</a> *prev)</td></tr>
60
<tr><td class="mdescLeft"> </td><td class="mdescRight">Searches for the next 1 bit in the GAP block. <a href="#gaa7df7193094353ea24b8519debf745be"></a><br/></td></tr>
61
<tr><td class="memTemplParams" colspan="2">template<typename T > </td></tr>
62
<tr><td class="memTemplItemLeft" align="right" valign="top">void </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00119.html#ga08e0ae8b2fd5869aa31cfad7d47177c4">bm::gap_sub_to_bitset</a> (unsigned *dest, const T *buf)</td></tr>
63
<tr><td class="mdescLeft"> </td><td class="mdescRight">SUB (AND NOT) GAP block to bitblock. <a href="#ga08e0ae8b2fd5869aa31cfad7d47177c4"></a><br/></td></tr>
64
<tr><td class="memTemplParams" colspan="2">template<typename T > </td></tr>
65
<tr><td class="memTemplItemLeft" align="right" valign="top">void </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00119.html#gab939656d4ea54fd3868aa236cdb20b82">bm::gap_xor_to_bitset</a> (unsigned *dest, const T *buf)</td></tr>
66
<tr><td class="mdescLeft"> </td><td class="mdescRight">XOR GAP block to bitblock. <a href="#gab939656d4ea54fd3868aa236cdb20b82"></a><br/></td></tr>
67
<tr><td class="memTemplParams" colspan="2">template<typename T > </td></tr>
68
<tr><td class="memTemplItemLeft" align="right" valign="top">void </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00119.html#ga12615cd62f2e5367e1bc688d00a2188f">bm::gap_add_to_bitset</a> (unsigned *dest, const T *buf)</td></tr>
69
<tr><td class="mdescLeft"> </td><td class="mdescRight">Adds(OR) GAP block to bitblock. <a href="#ga12615cd62f2e5367e1bc688d00a2188f"></a><br/></td></tr>
70
<tr><td class="memTemplParams" colspan="2">template<typename T > </td></tr>
71
<tr><td class="memTemplItemLeft" align="right" valign="top">void </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00119.html#gafe6f72a009618290eeab3cddee869543">bm::gap_and_to_bitset</a> (unsigned *dest, const T *buf)</td></tr>
72
<tr><td class="mdescLeft"> </td><td class="mdescRight">ANDs GAP block to bitblock. <a href="#gafe6f72a009618290eeab3cddee869543"></a><br/></td></tr>
73
<tr><td class="memTemplParams" colspan="2">template<typename T > </td></tr>
74
<tr><td class="memTemplItemLeft" align="right" valign="top">void </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00119.html#ga4862f4dcdcb7c0575e2e2db9e5f2a849">bm::gap_convert_to_bitset</a> (unsigned *dest, const T *buf)</td></tr>
75
<tr><td class="mdescLeft"> </td><td class="mdescRight">GAP block to bitblock conversion. <a href="#ga4862f4dcdcb7c0575e2e2db9e5f2a849"></a><br/></td></tr>
76
<tr><td class="memTemplParams" colspan="2">template<typename T > </td></tr>
77
<tr><td class="memTemplItemLeft" align="right" valign="top">void </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00119.html#ga9bb80c42ee0ecf8f2af8250d7f5d327b">bm::gap_convert_to_bitset</a> (unsigned *dest, const T *buf, unsigned dest_len)</td></tr>
78
<tr><td class="mdescLeft"> </td><td class="mdescRight">GAP block to bitblock conversion. <a href="#ga9bb80c42ee0ecf8f2af8250d7f5d327b"></a><br/></td></tr>
79
<tr><td class="memTemplParams" colspan="2">template<typename T > </td></tr>
80
<tr><td class="memTemplItemLeft" align="right" valign="top">unsigned * </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00119.html#ga3f01bb7c1ae7983aa8c4ba82e1e3f54c">bm::gap_convert_to_bitset_smart</a> (unsigned *dest, const T *buf, id_t set_max)</td></tr>
81
<tr><td class="mdescLeft"> </td><td class="mdescRight">Smart GAP block to bitblock conversion. <a href="#ga3f01bb7c1ae7983aa8c4ba82e1e3f54c"></a><br/></td></tr>
82
<tr><td class="memTemplParams" colspan="2">template<typename T > </td></tr>
83
<tr><td class="memTemplItemLeft" align="right" valign="top">unsigned </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00119.html#ga14d29338ffd1387758810b3f9e3a72c6">bm::gap_control_sum</a> (const T *buf)</td></tr>
84
<tr><td class="mdescLeft"> </td><td class="mdescRight">Calculates sum of all words in GAP block. (For debugging purposes). <a href="#ga14d29338ffd1387758810b3f9e3a72c6"></a><br/></td></tr>
85
<tr><td class="memTemplParams" colspan="2">template<class T > </td></tr>
86
<tr><td class="memTemplItemLeft" align="right" valign="top">void </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00119.html#gaef53b2877ff369badd7bb25b26bb9029">bm::gap_set_all</a> (T *buf, unsigned set_max, unsigned value)</td></tr>
87
<tr><td class="mdescLeft"> </td><td class="mdescRight">Sets all bits to 0 or 1 (GAP). <a href="#gaef53b2877ff369badd7bb25b26bb9029"></a><br/></td></tr>
88
<tr><td class="memTemplParams" colspan="2">template<class T > </td></tr>
89
<tr><td class="memTemplItemLeft" align="right" valign="top">void </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00119.html#ga5d49355eb9dd7947699e20f3a2a75ef5">bm::gap_init_range_block</a> (T *buf, unsigned from, unsigned to, unsigned value, unsigned set_max)</td></tr>
90
<tr><td class="mdescLeft"> </td><td class="mdescRight">Init gap block so it has block in it (can be whole block). <a href="#ga5d49355eb9dd7947699e20f3a2a75ef5"></a><br/></td></tr>
91
<tr><td class="memTemplParams" colspan="2">template<typename T > </td></tr>
92
<tr><td class="memTemplItemLeft" align="right" valign="top">void </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00119.html#ga3f22bfde5dfe06d6d77dc2598b8c0845">bm::gap_invert</a> (T *buf)</td></tr>
93
<tr><td class="mdescLeft"> </td><td class="mdescRight">Inverts all bits in the GAP buffer. <a href="#ga3f22bfde5dfe06d6d77dc2598b8c0845"></a><br/></td></tr>
94
<tr><td class="memTemplParams" colspan="2">template<typename T > </td></tr>
95
<tr><td class="memTemplItemLeft" align="right" valign="top">bool </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00119.html#ga690ff7c8b16e1821a77663b7194267e7">bm::gap_is_all_zero</a> (const T *buf, unsigned set_max)</td></tr>
96
<tr><td class="mdescLeft"> </td><td class="mdescRight">Temporary inverts all bits in the GAP buffer. <a href="#ga690ff7c8b16e1821a77663b7194267e7"></a><br/></td></tr>
97
<tr><td class="memTemplParams" colspan="2">template<typename T > </td></tr>
98
<tr><td class="memTemplItemLeft" align="right" valign="top">bool </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00119.html#ga1427d43e91872f981c6311fa76ab5633">bm::gap_is_all_one</a> (const T *buf, unsigned set_max)</td></tr>
99
<tr><td class="mdescLeft"> </td><td class="mdescRight">Checks if GAP block is all-one. <a href="#ga1427d43e91872f981c6311fa76ab5633"></a><br/></td></tr>
100
<tr><td class="memTemplParams" colspan="2">template<typename T > </td></tr>
101
<tr><td class="memTemplItemLeft" align="right" valign="top">unsigned </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00119.html#gad6bfb9da9950b0df8983a9faf9db5042">bm::gap_length</a> (const T *buf)</td></tr>
102
<tr><td class="mdescLeft"> </td><td class="mdescRight">Returs GAP block length. <a href="#gad6bfb9da9950b0df8983a9faf9db5042"></a><br/></td></tr>
103
<tr><td class="memTemplParams" colspan="2">template<typename T > </td></tr>
104
<tr><td class="memTemplItemLeft" align="right" valign="top">unsigned </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00119.html#ga0419ed06e2f0b7891e7d721546f5fb45">bm::gap_capacity</a> (const T *buf, const T *glevel_len)</td></tr>
105
<tr><td class="mdescLeft"> </td><td class="mdescRight">Returs GAP block capacity. <a href="#ga0419ed06e2f0b7891e7d721546f5fb45"></a><br/></td></tr>
106
<tr><td class="memTemplParams" colspan="2">template<typename T > </td></tr>
107
<tr><td class="memTemplItemLeft" align="right" valign="top">unsigned </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00119.html#ga94a5371b5dc6a1560d95d7c2dde88815">bm::gap_limit</a> (const T *buf, const T *glevel_len)</td></tr>
108
<tr><td class="mdescLeft"> </td><td class="mdescRight">Returs GAP block capacity limit. <a href="#ga94a5371b5dc6a1560d95d7c2dde88815"></a><br/></td></tr>
109
<tr><td class="memTemplParams" colspan="2">template<typename T > </td></tr>
110
<tr><td class="memTemplItemLeft" align="right" valign="top">unsigned </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00119.html#ga1defe73aa4227a0e7204363ac6bb1ac1">bm::gap_level</a> (const T *buf)</td></tr>
111
<tr><td class="mdescLeft"> </td><td class="mdescRight">Returs GAP blocks capacity level. <a href="#ga1defe73aa4227a0e7204363ac6bb1ac1"></a><br/></td></tr>
112
<tr><td class="memTemplParams" colspan="2">template<typename T > </td></tr>
113
<tr><td class="memTemplItemLeft" align="right" valign="top">void </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00119.html#ga501aa9bf029e7f9ea9518e7003fe5549">bm::set_gap_level</a> (T *buf, unsigned level)</td></tr>
114
<tr><td class="mdescLeft"> </td><td class="mdescRight">Sets GAP block capacity level. <a href="#ga501aa9bf029e7f9ea9518e7003fe5549"></a><br/></td></tr>
115
<tr><td class="memTemplParams" colspan="2">template<typename T > </td></tr>
116
<tr><td class="memTemplItemLeft" align="right" valign="top">int </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00119.html#ga3bfaebeeb4b2d479c5a9ac9d57607165">bm::gap_calc_level</a> (int len, const T *glevel_len)</td></tr>
117
<tr><td class="mdescLeft"> </td><td class="mdescRight">Calculates GAP block capacity level. <a href="#ga3bfaebeeb4b2d479c5a9ac9d57607165"></a><br/></td></tr>
118
<tr><td class="memTemplParams" colspan="2">template<typename T > </td></tr>
119
<tr><td class="memTemplItemLeft" align="right" valign="top">unsigned </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00119.html#gafd76869eb44fac688da5e26e0e74f41f">bm::gap_free_elements</a> (const T *buf, const T *glevel_len)</td></tr>
120
<tr><td class="mdescLeft"> </td><td class="mdescRight">Returns number of free elements in GAP block array. Difference between GAP block capacity on this level and actual GAP length. <a href="#gafd76869eb44fac688da5e26e0e74f41f"></a><br/></td></tr>
121
<tr><td class="memTemplParams" colspan="2">template<typename T > </td></tr>
122
<tr><td class="memTemplItemLeft" align="right" valign="top">unsigned </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00119.html#ga80d09bb6ab244e68ab0c1fdccc17b95b">bm::bit_convert_to_gap</a> (T *BMRESTRICT dest, const unsigned *BMRESTRICT src, <a class="el" href="a00115.html#aa3824d882a037396370b16f2f0a8bf37">bm::id_t</a> bits, unsigned dest_len)</td></tr>
123
<tr><td class="mdescLeft"> </td><td class="mdescRight">Converts bit block to GAP. <a href="#ga80d09bb6ab244e68ab0c1fdccc17b95b"></a><br/></td></tr>
124
<tr><td class="memTemplParams" colspan="2">template<class T , class F > </td></tr>
125
<tr><td class="memTemplItemLeft" align="right" valign="top">void </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00119.html#ga11bc26da8533752bb23756632fd30a00">bm::for_each_gap_dbit</a> (const T *buf, F &func)</td></tr>
126
<tr><td class="mdescLeft"> </td><td class="mdescRight">Iterate gap block as delta-bits with a functor. <a href="#ga11bc26da8533752bb23756632fd30a00"></a><br/></td></tr>
127
<tr><td class="memTemplParams" colspan="2">template<typename D , typename T > </td></tr>
128
<tr><td class="memTemplItemLeft" align="right" valign="top">D </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00119.html#ga5cd7e0cfee401da1b8f702151c083b27">bm::gap_convert_to_arr</a> (D *BMRESTRICT dest, const T *BMRESTRICT buf, unsigned dest_len, bool invert=false)</td></tr>
129
<tr><td class="mdescLeft"> </td><td class="mdescRight">Convert gap block into array of ints corresponding to 1 bits. <a href="#ga5cd7e0cfee401da1b8f702151c083b27"></a><br/></td></tr>
130
<tr><td class="memItemLeft" align="right" valign="top">gap_word_t * </td><td class="memItemRight" valign="bottom"><a class="el" href="a00119.html#ga1666464d22f7fd473db9aafcf2f77a63">bm::gap_operation_and</a> (const gap_word_t *BMRESTRICT vect1, const gap_word_t *BMRESTRICT vect2, gap_word_t *BMRESTRICT tmp_buf, unsigned &dsize)</td></tr>
131
<tr><td class="mdescLeft"> </td><td class="mdescRight">GAP AND operation. <a href="#ga1666464d22f7fd473db9aafcf2f77a63"></a><br/></td></tr>
132
<tr><td class="memItemLeft" align="right" valign="top">unsigned </td><td class="memItemRight" valign="bottom"><a class="el" href="a00119.html#gafb24a1e2588c5670df6facc537594d9d">bm::gap_operation_any_and</a> (const gap_word_t *BMRESTRICT vect1, const gap_word_t *BMRESTRICT vect2)</td></tr>
133
<tr><td class="mdescLeft"> </td><td class="mdescRight">GAP AND operation test. <a href="#gafb24a1e2588c5670df6facc537594d9d"></a><br/></td></tr>
134
<tr><td class="memItemLeft" align="right" valign="top">gap_word_t * </td><td class="memItemRight" valign="bottom"><a class="el" href="a00119.html#gaa5e07ad0256bf784ad3397acbbd23bb2">bm::gap_operation_xor</a> (const gap_word_t *BMRESTRICT vect1, const gap_word_t *BMRESTRICT vect2, gap_word_t *BMRESTRICT tmp_buf, unsigned &dsize)</td></tr>
135
<tr><td class="mdescLeft"> </td><td class="mdescRight">GAP XOR operation. <a href="#gaa5e07ad0256bf784ad3397acbbd23bb2"></a><br/></td></tr>
136
<tr><td class="memItemLeft" align="right" valign="top">unsigned </td><td class="memItemRight" valign="bottom"><a class="el" href="a00119.html#gab46833bf0d7813f868a1608f70db12de">bm::gap_operation_any_xor</a> (const gap_word_t *BMRESTRICT vect1, const gap_word_t *BMRESTRICT vect2)</td></tr>
137
<tr><td class="mdescLeft"> </td><td class="mdescRight">GAP XOR operation test. <a href="#gab46833bf0d7813f868a1608f70db12de"></a><br/></td></tr>
138
<tr><td class="memItemLeft" align="right" valign="top">gap_word_t * </td><td class="memItemRight" valign="bottom"><a class="el" href="a00119.html#gacda280af8910ae5fde37731a3a7a1226">bm::gap_operation_or</a> (const gap_word_t *BMRESTRICT vect1, const gap_word_t *BMRESTRICT vect2, gap_word_t *BMRESTRICT tmp_buf, unsigned &dsize)</td></tr>
139
<tr><td class="mdescLeft"> </td><td class="mdescRight">GAP OR operation. <a href="#gacda280af8910ae5fde37731a3a7a1226"></a><br/></td></tr>
140
<tr><td class="memItemLeft" align="right" valign="top">gap_word_t * </td><td class="memItemRight" valign="bottom"><a class="el" href="a00119.html#gabe4c83e5e162c38e297116dd1cd05ac4">bm::gap_operation_sub</a> (const gap_word_t *BMRESTRICT vect1, const gap_word_t *BMRESTRICT vect2, gap_word_t *BMRESTRICT tmp_buf, unsigned &dsize)</td></tr>
141
<tr><td class="mdescLeft"> </td><td class="mdescRight">GAP SUB (AND NOT) operation. <a href="#gabe4c83e5e162c38e297116dd1cd05ac4"></a><br/></td></tr>
142
<tr><td class="memItemLeft" align="right" valign="top">unsigned </td><td class="memItemRight" valign="bottom"><a class="el" href="a00119.html#gae0b1d4aca0ddfa58d83e4b089a4f35d9">bm::gap_operation_any_sub</a> (const gap_word_t *BMRESTRICT vect1, const gap_word_t *BMRESTRICT vect2)</td></tr>
143
<tr><td class="mdescLeft"> </td><td class="mdescRight">GAP SUB operation test. <a href="#gae0b1d4aca0ddfa58d83e4b089a4f35d9"></a><br/></td></tr>
144
<tr><td class="memTemplParams" colspan="2">template<typename T > </td></tr>
145
<tr><td class="memTemplItemLeft" align="right" valign="top">unsigned </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00119.html#gacc578010f3700940829c600c812d23b1">bm::gap_overhead</a> (const T *length, const T *length_end, const T *glevel_len)</td></tr>
146
<tr><td class="mdescLeft"> </td><td class="mdescRight">Convert bit block into an array of ints corresponding to 1 bits. <a href="#gacc578010f3700940829c600c812d23b1"></a><br/></td></tr>
147
<tr><td class="memTemplParams" colspan="2">template<typename T > </td></tr>
148
<tr><td class="memTemplItemLeft" align="right" valign="top">bool </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00119.html#ga2daff3a0ceda6fef87d3b0e892da5813">bm::improve_gap_levels</a> (const T *length, const T *length_end, T *glevel_len)</td></tr>
149
<tr><td class="mdescLeft"> </td><td class="mdescRight">Finds optimal gap blocks lengths. <a href="#ga2daff3a0ceda6fef87d3b0e892da5813"></a><br/></td></tr>
62
151
<hr/><a name="_details"></a><h2>Detailed Description</h2>
63
<p>Set algorithms </p>
152
<p>GAP functions implement different opereations on GAP compressed blocks and serve as a minimal building blocks. </p>
64
153
<hr/><h2>Function Documentation</h2>
65
<a class="anchor" id="ga819bdab57a624a08456ea79161b9c5d2"></a><!-- doxytag: member="bm::combine_and" ref="ga819bdab57a624a08456ea79161b9c5d2" args="(BV &bv, It first, It last)" -->
67
<div class="memproto">
68
<div class="memtemplate">
69
template<class BV , class It > </div>
70
<table class="memname">
72
<td class="memname">void bm::combine_and </td>
74
<td class="paramtype">BV & </td>
75
<td class="paramname"> <em>bv</em>, </td>
78
<td class="paramkey"></td>
80
<td class="paramtype">It </td>
81
<td class="paramname"> <em>first</em>, </td>
84
<td class="paramkey"></td>
86
<td class="paramtype">It </td>
87
<td class="paramname"> <em>last</em></td><td> </td>
92
<td></td><td></td><td><code> [inline]</code></td>
98
<p>AND Combine bitvector and the iterable sequence. </p>
99
<p>Algorithm combines <a class="el" href="a00043.html" title="bitvector with runtime compression of bits.">bvector</a> with sequence of integers (represents another set). When the agrument set is sorted this method can give serious increase in performance.</p>
100
<dl><dt><b>Parameters:</b></dt><dd>
101
<table border="0" cellspacing="2" cellpadding="0">
102
<tr><td valign="top"></td><td valign="top"><em>bv</em> </td><td>- destination bitvector </td></tr>
103
<tr><td valign="top"></td><td valign="top"><em>first</em> </td><td>- first element of the iterated sequence </td></tr>
104
<tr><td valign="top"></td><td valign="top"><em>last</em> </td><td>- last element of the iterated sequence</td></tr>
108
<dl class="see"><dt><b>See also:</b></dt><dd><a class="el" href="a00119.html#ga22922f71bd1eec8a5b663dc77b90cf6c" title="AND Combine bitvector and the iterable sequence.">combine_and_sorted</a> </dd></dl>
110
<p>Definition at line <a class="el" href="a00086_source.html#l01382">1382</a> of file <a class="el" href="a00086_source.html">bmalgo_impl.h</a>.</p>
112
<p>References <a class="el" href="a00086_source.html#l01105">bm::combine_or()</a>.</p>
116
<a class="anchor" id="ga22922f71bd1eec8a5b663dc77b90cf6c"></a><!-- doxytag: member="bm::combine_and_sorted" ref="ga22922f71bd1eec8a5b663dc77b90cf6c" args="(BV &bv, It first, It last)" -->
117
<div class="memitem">
118
<div class="memproto">
119
<div class="memtemplate">
120
template<class BV , class It > </div>
121
<table class="memname">
123
<td class="memname">void bm::combine_and_sorted </td>
125
<td class="paramtype">BV & </td>
126
<td class="paramname"> <em>bv</em>, </td>
129
<td class="paramkey"></td>
131
<td class="paramtype">It </td>
132
<td class="paramname"> <em>first</em>, </td>
135
<td class="paramkey"></td>
137
<td class="paramtype">It </td>
138
<td class="paramname"> <em>last</em></td><td> </td>
143
<td></td><td></td><td><code> [inline]</code></td>
149
<p>AND Combine bitvector and the iterable sequence. </p>
150
<p>Algorithm combines <a class="el" href="a00043.html" title="bitvector with runtime compression of bits.">bvector</a> with sorted sequence of integers (represents another set).</p>
151
<dl><dt><b>Parameters:</b></dt><dd>
152
<table border="0" cellspacing="2" cellpadding="0">
153
<tr><td valign="top"></td><td valign="top"><em>bv</em> </td><td>- destination bitvector </td></tr>
154
<tr><td valign="top"></td><td valign="top"><em>first</em> </td><td>- first element of the iterated sequence </td></tr>
155
<tr><td valign="top"></td><td valign="top"><em>last</em> </td><td>- last element of the iterated sequence </td></tr>
160
<p>Definition at line <a class="el" href="a00086_source.html#l01350">1350</a> of file <a class="el" href="a00086_source.html">bmalgo_impl.h</a>.</p>
162
<p>References <a class="el" href="a00089_source.html#l00047">BM_ASSERT</a>.</p>
166
<a class="anchor" id="ga54ff78528c99ae3ca443eb99ba44785b"></a><!-- doxytag: member="bm::combine_or" ref="ga54ff78528c99ae3ca443eb99ba44785b" args="(BV &bv, It first, It last)" -->
167
<div class="memitem">
168
<div class="memproto">
169
<div class="memtemplate">
170
template<class BV , class It > </div>
171
<table class="memname">
173
<td class="memname">void bm::combine_or </td>
175
<td class="paramtype">BV & </td>
176
<td class="paramname"> <em>bv</em>, </td>
179
<td class="paramkey"></td>
181
<td class="paramtype">It </td>
182
<td class="paramname"> <em>first</em>, </td>
185
<td class="paramkey"></td>
187
<td class="paramtype">It </td>
188
<td class="paramname"> <em>last</em></td><td> </td>
193
<td></td><td></td><td><code> [inline]</code></td>
199
<p>OR Combine bitvector and the iterable sequence. </p>
200
<p>Algorithm combines <a class="el" href="a00043.html" title="bitvector with runtime compression of bits.">bvector</a> with sequence of integers (represents another set). When the agrument set is sorted this method can give serious increase in performance.</p>
201
<dl><dt><b>Parameters:</b></dt><dd>
202
<table border="0" cellspacing="2" cellpadding="0">
203
<tr><td valign="top"></td><td valign="top"><em>bv</em> </td><td>- destination bitvector </td></tr>
204
<tr><td valign="top"></td><td valign="top"><em>first</em> </td><td>- first element of the iterated sequence </td></tr>
205
<tr><td valign="top"></td><td valign="top"><em>last</em> </td><td>- last element of the iterated sequence </td></tr>
210
<p>Definition at line <a class="el" href="a00086_source.html#l01105">1105</a> of file <a class="el" href="a00086_source.html">bmalgo_impl.h</a>.</p>
212
<p>References <a class="el" href="a00086_source.html#l01075">bm::block_range_scan()</a>, <a class="el" href="a00089_source.html#l00047">BM_ASSERT</a>, <a class="el" href="a00089_source.html#l00092">BMGAP_PTR</a>, <a class="el" href="a00090_source.html#l02151">bm::gap_limit()</a>, <a class="el" href="a00090_source.html#l01098">bm::gap_set_value()</a>, <a class="el" href="a00088_source.html#l00048">bm::id_max</a>, <a class="el" href="a00088_source.html#l00054">bm::set_block_mask</a>, <a class="el" href="a00088_source.html#l00053">bm::set_block_shift</a>, <a class="el" href="a00088_source.html#l00063">bm::set_word_mask</a>, and <a class="el" href="a00088_source.html#l00062">bm::set_word_shift</a>.</p>
214
<p>Referenced by <a class="el" href="a00086_source.html#l01382">bm::combine_and()</a>.</p>
218
<a class="anchor" id="gab88c5bf51484323e0139aa789d7f0b98"></a><!-- doxytag: member="bm::combine_sub" ref="gab88c5bf51484323e0139aa789d7f0b98" args="(BV &bv, It first, It last)" -->
219
<div class="memitem">
220
<div class="memproto">
221
<div class="memtemplate">
222
template<class BV , class It > </div>
223
<table class="memname">
225
<td class="memname">void bm::combine_sub </td>
227
<td class="paramtype">BV & </td>
228
<td class="paramname"> <em>bv</em>, </td>
231
<td class="paramkey"></td>
233
<td class="paramtype">It </td>
234
<td class="paramname"> <em>first</em>, </td>
237
<td class="paramkey"></td>
239
<td class="paramtype">It </td>
240
<td class="paramname"> <em>last</em></td><td> </td>
245
<td></td><td></td><td><code> [inline]</code></td>
251
<p>SUB Combine bitvector and the iterable sequence. </p>
252
<p>Algorithm combines <a class="el" href="a00043.html" title="bitvector with runtime compression of bits.">bvector</a> with sequence of integers (represents another set). When the agrument set is sorted this method can give serious increase in performance.</p>
253
<dl><dt><b>Parameters:</b></dt><dd>
254
<table border="0" cellspacing="2" cellpadding="0">
255
<tr><td valign="top"></td><td valign="top"><em>bv</em> </td><td>- destination bitvector </td></tr>
256
<tr><td valign="top"></td><td valign="top"><em>first</em> </td><td>- first element of the iterated sequence </td></tr>
257
<tr><td valign="top"></td><td valign="top"><em>last</em> </td><td>- last element of the iterated sequence </td></tr>
262
<p>Definition at line <a class="el" href="a00086_source.html#l01268">1268</a> of file <a class="el" href="a00086_source.html">bmalgo_impl.h</a>.</p>
264
<p>References <a class="el" href="a00086_source.html#l01075">bm::block_range_scan()</a>, <a class="el" href="a00089_source.html#l00047">BM_ASSERT</a>, <a class="el" href="a00089_source.html#l00092">BMGAP_PTR</a>, <a class="el" href="a00090_source.html#l02151">bm::gap_limit()</a>, <a class="el" href="a00090_source.html#l01098">bm::gap_set_value()</a>, <a class="el" href="a00090_source.html#l00454">bm::gap_test()</a>, <a class="el" href="a00088_source.html#l00048">bm::id_max</a>, <a class="el" href="a00088_source.html#l00054">bm::set_block_mask</a>, <a class="el" href="a00088_source.html#l00053">bm::set_block_shift</a>, <a class="el" href="a00088_source.html#l00063">bm::set_word_mask</a>, and <a class="el" href="a00088_source.html#l00062">bm::set_word_shift</a>.</p>
268
<a class="anchor" id="ga3cb362aee03de6a321495100ae5c8375"></a><!-- doxytag: member="bm::combine_xor" ref="ga3cb362aee03de6a321495100ae5c8375" args="(BV &bv, It first, It last)" -->
269
<div class="memitem">
270
<div class="memproto">
271
<div class="memtemplate">
272
template<class BV , class It > </div>
273
<table class="memname">
275
<td class="memname">void bm::combine_xor </td>
277
<td class="paramtype">BV & </td>
278
<td class="paramname"> <em>bv</em>, </td>
281
<td class="paramkey"></td>
283
<td class="paramtype">It </td>
284
<td class="paramname"> <em>first</em>, </td>
287
<td class="paramkey"></td>
289
<td class="paramtype">It </td>
290
<td class="paramname"> <em>last</em></td><td> </td>
295
<td></td><td></td><td><code> [inline]</code></td>
301
<p>XOR Combine bitvector and the iterable sequence. </p>
302
<p>Algorithm combines <a class="el" href="a00043.html" title="bitvector with runtime compression of bits.">bvector</a> with sequence of integers (represents another set). When the agrument set is sorted this method can give serious increase in performance.</p>
303
<dl><dt><b>Parameters:</b></dt><dd>
304
<table border="0" cellspacing="2" cellpadding="0">
305
<tr><td valign="top"></td><td valign="top"><em>bv</em> </td><td>- destination bitvector </td></tr>
306
<tr><td valign="top"></td><td valign="top"><em>first</em> </td><td>- first element of the iterated sequence </td></tr>
307
<tr><td valign="top"></td><td valign="top"><em>last</em> </td><td>- last element of the iterated sequence </td></tr>
312
<p>Definition at line <a class="el" href="a00086_source.html#l01184">1184</a> of file <a class="el" href="a00086_source.html">bmalgo_impl.h</a>.</p>
314
<p>References <a class="el" href="a00086_source.html#l01075">bm::block_range_scan()</a>, <a class="el" href="a00089_source.html#l00047">BM_ASSERT</a>, <a class="el" href="a00089_source.html#l00092">BMGAP_PTR</a>, <a class="el" href="a00090_source.html#l02151">bm::gap_limit()</a>, <a class="el" href="a00090_source.html#l01098">bm::gap_set_value()</a>, <a class="el" href="a00090_source.html#l00454">bm::gap_test()</a>, <a class="el" href="a00088_source.html#l00048">bm::id_max</a>, <a class="el" href="a00088_source.html#l00054">bm::set_block_mask</a>, <a class="el" href="a00088_source.html#l00053">bm::set_block_shift</a>, <a class="el" href="a00088_source.html#l00063">bm::set_word_mask</a>, and <a class="el" href="a00088_source.html#l00062">bm::set_word_shift</a>.</p>
318
<a class="anchor" id="gac7a59d3bc266310ec127cb3efadb0d33"></a><!-- doxytag: member="bm::count_intervals" ref="gac7a59d3bc266310ec127cb3efadb0d33" args="(const BV &bv)" -->
319
<div class="memitem">
320
<div class="memproto">
321
<div class="memtemplate">
322
template<class BV > </div>
323
<table class="memname">
325
<td class="memname"><a class="el" href="a00110.html#aa3824d882a037396370b16f2f0a8bf37">bm::id_t</a> bm::count_intervals </td>
327
<td class="paramtype">const BV & </td>
328
<td class="paramname"> <em>bv</em></td>
329
<td> ) </td>
330
<td><code> [inline]</code></td>
336
<p>Compute number of bit intervals (GAPs) in the bitvector. </p>
337
<p>Algorithm traverses bit vector and count number of uninterrupted intervals of 1s and 0s. </p>
340
00001111100000 - gives us 3 intervals
341
10001111100000 - 4 intervals
342
00000000000000 - 1 interval
343
11111111111111 - 1 interval
344
</pre> <dl class="return"><dt><b>Returns:</b></dt><dd>Number of intervals </dd></dl>
346
<p>Definition at line <a class="el" href="a00086_source.html#l01405">1405</a> of file <a class="el" href="a00086_source.html">bmalgo_impl.h</a>.</p>
348
<p>References <a class="el" href="a00090_source.html#l00557">bm::for_each_block()</a>, and <a class="el" href="a00088_source.html#l00080">bm::set_array_size</a>.</p>
352
<a class="anchor" id="gacd88ed9539553dd93419b7029e8a4584"></a><!-- doxytag: member="bm::export_array" ref="gacd88ed9539553dd93419b7029e8a4584" args="(BV &bv, It first, It last)" -->
353
<div class="memitem">
354
<div class="memproto">
355
<div class="memtemplate">
356
template<class BV , class It > </div>
357
<table class="memname">
359
<td class="memname">void bm::export_array </td>
361
<td class="paramtype">BV & </td>
362
<td class="paramname"> <em>bv</em>, </td>
365
<td class="paramkey"></td>
367
<td class="paramtype">It </td>
368
<td class="paramname"> <em>first</em>, </td>
371
<td class="paramkey"></td>
373
<td class="paramtype">It </td>
374
<td class="paramname"> <em>last</em></td><td> </td>
379
<td></td><td></td><td><code> [inline]</code></td>
385
<p>Export bitset from an array of binary data representing the bit vector. </p>
386
<p>Input array can be array of ints, chars or other native C types. Method works with iterators, which makes it compatible with STL containers and C arrays</p>
387
<dl><dt><b>Parameters:</b></dt><dd>
388
<table border="0" cellspacing="2" cellpadding="0">
389
<tr><td valign="top"></td><td valign="top"><em>bv</em> </td><td>- destination bitvector </td></tr>
390
<tr><td valign="top"></td><td valign="top"><em>first</em> </td><td>- first element of the iterated sequence </td></tr>
391
<tr><td valign="top"></td><td valign="top"><em>last</em> </td><td>- last element of the iterated sequence </td></tr>
396
<p>Definition at line <a class="el" href="a00086_source.html#l01431">1431</a> of file <a class="el" href="a00086_source.html">bmalgo_impl.h</a>.</p>
398
<p>References <a class="el" href="a00089_source.html#l00047">BM_ASSERT</a>, <a class="el" href="a00088_source.html#l00116">bm::BM_BIT</a>, <a class="el" href="a00089_source.html#l00092">BMGAP_PTR</a>, <a class="el" href="a00088_source.html#l00052">bm::set_block_size</a>, and <a class="el" href="a00088_source.html#l00083">bm::set_total_blocks</a>.</p>
403
<hr size="1"/><address style="text-align: right;"><small>Generated on Sun Nov 22 10:49:42 2009 for BitMagic by
154
<a class="anchor" id="ga80d09bb6ab244e68ab0c1fdccc17b95b"></a><!-- doxytag: member="bm::bit_convert_to_gap" ref="ga80d09bb6ab244e68ab0c1fdccc17b95b" args="(T *BMRESTRICT dest, const unsigned *BMRESTRICT src, bm::id_t bits, unsigned dest_len)" -->
155
<div class="memitem">
156
<div class="memproto">
157
<div class="memtemplate">
158
template<typename T > </div>
159
<table class="memname">
161
<td class="memname">unsigned bm::bit_convert_to_gap </td>
163
<td class="paramtype">T *BMRESTRICT </td>
164
<td class="paramname"> <em>dest</em>, </td>
167
<td class="paramkey"></td>
169
<td class="paramtype">const unsigned *BMRESTRICT </td>
170
<td class="paramname"> <em>src</em>, </td>
173
<td class="paramkey"></td>
175
<td class="paramtype"><a class="el" href="a00115.html#aa3824d882a037396370b16f2f0a8bf37">bm::id_t</a> </td>
176
<td class="paramname"> <em>bits</em>, </td>
179
<td class="paramkey"></td>
181
<td class="paramtype">unsigned </td>
182
<td class="paramname"> <em>dest_len</em></td><td> </td>
187
<td></td><td></td><td><code> [inline]</code></td>
193
<p>Converts bit block to GAP. </p>
194
<dl><dt><b>Parameters:</b></dt><dd>
195
<table border="0" cellspacing="2" cellpadding="0">
196
<tr><td valign="top"></td><td valign="top"><em>dest</em> </td><td>- Destinatio GAP buffer. </td></tr>
197
<tr><td valign="top"></td><td valign="top"><em>src</em> </td><td>- Source bitblock buffer. </td></tr>
198
<tr><td valign="top"></td><td valign="top"><em>bits</em> </td><td>- Number of bits to convert. </td></tr>
199
<tr><td valign="top"></td><td valign="top"><em>dest_len</em> </td><td>- length of the dest. buffer. </td></tr>
203
<dl class="return"><dt><b>Returns:</b></dt><dd>New length of GAP block or 0 if conversion failed (insufficicent space). </dd></dl>
205
<p>Definition at line <a class="el" href="a00093_source.html#l02301">2301</a> of file <a class="el" href="a00093_source.html">bmfunc.h</a>.</p>
207
<p>References <a class="el" href="a00092_source.html#l00050">BM_ASSERT</a>.</p>
209
<p>Referenced by <a class="el" href="a00096_source.html#l00758">bm::serializer< BV >::serialize()</a>.</p>
213
<a class="anchor" id="ga11bc26da8533752bb23756632fd30a00"></a><!-- doxytag: member="bm::for_each_gap_dbit" ref="ga11bc26da8533752bb23756632fd30a00" args="(const T *buf, F &func)" -->
214
<div class="memitem">
215
<div class="memproto">
216
<div class="memtemplate">
217
template<class T , class F > </div>
218
<table class="memname">
220
<td class="memname">void bm::for_each_gap_dbit </td>
222
<td class="paramtype">const T * </td>
223
<td class="paramname"> <em>buf</em>, </td>
226
<td class="paramkey"></td>
228
<td class="paramtype">F & </td>
229
<td class="paramname"> <em>func</em></td><td> </td>
234
<td></td><td></td><td><code> [inline]</code></td>
240
<p>Iterate gap block as delta-bits with a functor. </p>
242
<p>Definition at line <a class="el" href="a00093_source.html#l02391">2391</a> of file <a class="el" href="a00093_source.html">bmfunc.h</a>.</p>
246
<a class="anchor" id="ga12615cd62f2e5367e1bc688d00a2188f"></a><!-- doxytag: member="bm::gap_add_to_bitset" ref="ga12615cd62f2e5367e1bc688d00a2188f" args="(unsigned *dest, const T *buf)" -->
247
<div class="memitem">
248
<div class="memproto">
249
<div class="memtemplate">
250
template<typename T > </div>
251
<table class="memname">
253
<td class="memname">void bm::gap_add_to_bitset </td>
255
<td class="paramtype">unsigned * </td>
256
<td class="paramname"> <em>dest</em>, </td>
259
<td class="paramkey"></td>
261
<td class="paramtype">const T * </td>
262
<td class="paramname"> <em>buf</em></td><td> </td>
267
<td></td><td></td><td><code> [inline]</code></td>
273
<p>Adds(OR) GAP block to bitblock. </p>
274
<dl><dt><b>Parameters:</b></dt><dd>
275
<table border="0" cellspacing="2" cellpadding="0">
276
<tr><td valign="top"></td><td valign="top"><em>dest</em> </td><td>- bitblock buffer pointer. </td></tr>
277
<tr><td valign="top"></td><td valign="top"><em>buf</em> </td><td>- GAP buffer pointer. </td></tr>
282
<p>Definition at line <a class="el" href="a00093_source.html#l01530">1530</a> of file <a class="el" href="a00093_source.html">bmfunc.h</a>.</p>
284
<p>References <a class="el" href="a00092_source.html#l00050">BM_ASSERT</a>, and <a class="el" href="a00093_source.html#l01280">bm::or_bit_block()</a>.</p>
286
<p>Referenced by <a class="el" href="a00093_source.html#l01938">bm::gap_convert_to_bitset()</a>.</p>
290
<a class="anchor" id="gafe6f72a009618290eeab3cddee869543"></a><!-- doxytag: member="bm::gap_and_to_bitset" ref="gafe6f72a009618290eeab3cddee869543" args="(unsigned *dest, const T *buf)" -->
291
<div class="memitem">
292
<div class="memproto">
293
<div class="memtemplate">
294
template<typename T > </div>
295
<table class="memname">
297
<td class="memname">void bm::gap_and_to_bitset </td>
299
<td class="paramtype">unsigned * </td>
300
<td class="paramname"> <em>dest</em>, </td>
303
<td class="paramkey"></td>
305
<td class="paramtype">const T * </td>
306
<td class="paramname"> <em>buf</em></td><td> </td>
311
<td></td><td></td><td><code> [inline]</code></td>
317
<p>ANDs GAP block to bitblock. </p>
318
<dl><dt><b>Parameters:</b></dt><dd>
319
<table border="0" cellspacing="2" cellpadding="0">
320
<tr><td valign="top"></td><td valign="top"><em>dest</em> </td><td>- bitblock buffer pointer. </td></tr>
321
<tr><td valign="top"></td><td valign="top"><em>buf</em> </td><td>- GAP buffer pointer. </td></tr>
326
<p>Definition at line <a class="el" href="a00093_source.html#l01562">1562</a> of file <a class="el" href="a00093_source.html">bmfunc.h</a>.</p>
328
<p>References <a class="el" href="a00092_source.html#l00050">BM_ASSERT</a>, and <a class="el" href="a00093_source.html#l01342">bm::sub_bit_block()</a>.</p>
332
<a class="anchor" id="ga570a6f573ffb9ac9e41a688d2bdc6004"></a><!-- doxytag: member="bm::gap_bit_count" ref="ga570a6f573ffb9ac9e41a688d2bdc6004" args="(const T *buf, unsigned dsize=0)" -->
333
<div class="memitem">
334
<div class="memproto">
335
<div class="memtemplate">
336
template<typename T > </div>
337
<table class="memname">
339
<td class="memname">unsigned bm::gap_bit_count </td>
341
<td class="paramtype">const T * </td>
342
<td class="paramname"> <em>buf</em>, </td>
345
<td class="paramkey"></td>
347
<td class="paramtype">unsigned </td>
348
<td class="paramname"> <em>dsize</em> = <code>0</code></td><td> </td>
353
<td></td><td></td><td><code> [inline]</code></td>
359
<p>Calculates number of bits ON in GAP buffer. </p>
360
<dl><dt><b>Parameters:</b></dt><dd>
361
<table border="0" cellspacing="2" cellpadding="0">
362
<tr><td valign="top"></td><td valign="top"><em>buf</em> </td><td>- GAP buffer pointer. </td></tr>
363
<tr><td valign="top"></td><td valign="top"><em>dsize</em> </td><td>- buffer size </td></tr>
367
<dl class="return"><dt><b>Returns:</b></dt><dd>Number of non-zero bits. </dd></dl>
369
<p>Definition at line <a class="el" href="a00093_source.html#l00653">653</a> of file <a class="el" href="a00093_source.html">bmfunc.h</a>.</p>
371
<p>Referenced by <a class="el" href="a00089_source.html#l00114">bm::combine_count_operation_with_block()</a>, and <a class="el" href="a00096_source.html#l00653">bm::serializer< BV >::encode_gap_block()</a>.</p>
375
<a class="anchor" id="ga5e3123c3c9d3587f470abdbe6c8c3ad3"></a><!-- doxytag: member="bm::gap_buff_any_op" ref="ga5e3123c3c9d3587f470abdbe6c8c3ad3" args="(const T *BMRESTRICT vect1, unsigned vect1_mask, const T *BMRESTRICT vect2, unsigned vect2_mask, F f)" -->
376
<div class="memitem">
377
<div class="memproto">
378
<div class="memtemplate">
379
template<typename T , class F > </div>
380
<table class="memname">
382
<td class="memname">unsigned bm::gap_buff_any_op </td>
384
<td class="paramtype">const T *BMRESTRICT </td>
385
<td class="paramname"> <em>vect1</em>, </td>
388
<td class="paramkey"></td>
390
<td class="paramtype">unsigned </td>
391
<td class="paramname"> <em>vect1_mask</em>, </td>
394
<td class="paramkey"></td>
396
<td class="paramtype">const T *BMRESTRICT </td>
397
<td class="paramname"> <em>vect2</em>, </td>
400
<td class="paramkey"></td>
402
<td class="paramtype">unsigned </td>
403
<td class="paramname"> <em>vect2_mask</em>, </td>
406
<td class="paramkey"></td>
408
<td class="paramtype">F </td>
409
<td class="paramname"> <em>f</em></td><td> </td>
414
<td></td><td></td><td><code> [inline]</code></td>
420
<p>Abstract distance test operation for GAP buffers. Receives functor F as a template argument. </p>
421
<dl><dt><b>Parameters:</b></dt><dd>
422
<table border="0" cellspacing="2" cellpadding="0">
423
<tr><td valign="top"></td><td valign="top"><em>vect1</em> </td><td>- operand 1 GAP encoded buffer. </td></tr>
424
<tr><td valign="top"></td><td valign="top"><em>vect1_mask</em> </td><td>- XOR mask for starting bitflag for vector1 can be 0 or 1 (1 inverts the vector) </td></tr>
425
<tr><td valign="top"></td><td valign="top"><em>vect2</em> </td><td>- operand 2 GAP encoded buffer. </td></tr>
426
<tr><td valign="top"></td><td valign="top"><em>vect2_mask</em> </td><td>- same as vect1_mask </td></tr>
427
<tr><td valign="top"></td><td valign="top"><em>f</em> </td><td>- operation functor. </td></tr>
431
<dl class="note"><dt><b>Note:</b></dt><dd>Internal function. </dd></dl>
432
<dl class="return"><dt><b>Returns:</b></dt><dd>non zero value if operation result returns any 1 bit </dd></dl>
434
<p>Definition at line <a class="el" href="a00093_source.html#l00990">990</a> of file <a class="el" href="a00093_source.html">bmfunc.h</a>.</p>
436
<p>References <a class="el" href="a00091_source.html#l00071">bm::gap_max_bits</a>.</p>
438
<p>Referenced by <a class="el" href="a00093_source.html#l02977">bm::gap_operation_any_and()</a>, <a class="el" href="a00093_source.html#l03104">bm::gap_operation_any_sub()</a>, and <a class="el" href="a00093_source.html#l03025">bm::gap_operation_any_xor()</a>.</p>
442
<a class="anchor" id="ga3bfaebeeb4b2d479c5a9ac9d57607165"></a><!-- doxytag: member="bm::gap_calc_level" ref="ga3bfaebeeb4b2d479c5a9ac9d57607165" args="(int len, const T *glevel_len)" -->
443
<div class="memitem">
444
<div class="memproto">
445
<div class="memtemplate">
446
template<typename T > </div>
447
<table class="memname">
449
<td class="memname">int bm::gap_calc_level </td>
451
<td class="paramtype">int </td>
452
<td class="paramname"> <em>len</em>, </td>
455
<td class="paramkey"></td>
457
<td class="paramtype">const T * </td>
458
<td class="paramname"> <em>glevel_len</em></td><td> </td>
463
<td></td><td></td><td><code> [inline]</code></td>
469
<p>Calculates GAP block capacity level. </p>
470
<dl><dt><b>Parameters:</b></dt><dd>
471
<table border="0" cellspacing="2" cellpadding="0">
472
<tr><td valign="top"></td><td valign="top"><em>len</em> </td><td>- GAP buffer length. </td></tr>
473
<tr><td valign="top"></td><td valign="top"><em>glevel_len</em> </td><td>- GAP lengths table </td></tr>
477
<dl class="return"><dt><b>Returns:</b></dt><dd>GAP block capacity level. -1 if block does not fit any level. </dd></dl>
479
<p>Definition at line <a class="el" href="a00093_source.html#l02229">2229</a> of file <a class="el" href="a00093_source.html">bmfunc.h</a>.</p>
481
<p>References <a class="el" href="a00092_source.html#l00050">BM_ASSERT</a>, and <a class="el" href="a00091_source.html#l00074">bm::gap_levels</a>.</p>
483
<p>Referenced by <a class="el" href="a00096_source.html#l02899">bm::iterator_deserializer< BV, SerialIterator >::deserialize()</a>, <a class="el" href="a00096_source.html#l01232">bm::deserializer< BV, DEC >::deserialize_gap()</a>, and <a class="el" href="a00093_source.html#l04563">bm::gap_overhead()</a>.</p>
487
<a class="anchor" id="ga0419ed06e2f0b7891e7d721546f5fb45"></a><!-- doxytag: member="bm::gap_capacity" ref="ga0419ed06e2f0b7891e7d721546f5fb45" args="(const T *buf, const T *glevel_len)" -->
488
<div class="memitem">
489
<div class="memproto">
490
<div class="memtemplate">
491
template<typename T > </div>
492
<table class="memname">
494
<td class="memname">unsigned bm::gap_capacity </td>
496
<td class="paramtype">const T * </td>
497
<td class="paramname"> <em>buf</em>, </td>
500
<td class="paramkey"></td>
502
<td class="paramtype">const T * </td>
503
<td class="paramname"> <em>glevel_len</em></td><td> </td>
508
<td></td><td></td><td><code> [inline]</code></td>
514
<p>Returs GAP block capacity. </p>
515
<dl><dt><b>Parameters:</b></dt><dd>
516
<table border="0" cellspacing="2" cellpadding="0">
517
<tr><td valign="top"></td><td valign="top"><em>buf</em> </td><td>- GAP buffer pointer. </td></tr>
521
<dl class="return"><dt><b>Returns:</b></dt><dd>GAP block capacity. </dd></dl>
523
<p>Definition at line <a class="el" href="a00093_source.html#l02171">2171</a> of file <a class="el" href="a00093_source.html">bmfunc.h</a>.</p>
525
<p>Referenced by <a class="el" href="a00087_source.html#l02051">bm::bvector< Alloc, MS >::calc_stat()</a>, <a class="el" href="a00090_source.html#l00205">bm::mem_alloc< BA, PA >::free_gap_block()</a>, and <a class="el" href="a00093_source.html#l02250">bm::gap_free_elements()</a>.</p>
529
<a class="anchor" id="ga14d29338ffd1387758810b3f9e3a72c6"></a><!-- doxytag: member="bm::gap_control_sum" ref="ga14d29338ffd1387758810b3f9e3a72c6" args="(const T *buf)" -->
530
<div class="memitem">
531
<div class="memproto">
532
<div class="memtemplate">
533
template<typename T > </div>
534
<table class="memname">
536
<td class="memname">unsigned bm::gap_control_sum </td>
538
<td class="paramtype">const T * </td>
539
<td class="paramname"> <em>buf</em></td>
540
<td> ) </td>
541
<td><code> [inline]</code></td>
547
<p>Calculates sum of all words in GAP block. (For debugging purposes). </p>
548
<dl class="note"><dt><b>Note:</b></dt><dd>For debugging and testing ONLY. </dd></dl>
549
<dl><dt><b>Parameters:</b></dt><dd>
550
<table border="0" cellspacing="2" cellpadding="0">
551
<tr><td valign="top"></td><td valign="top"><em>buf</em> </td><td>- GAP buffer pointer. </td></tr>
555
<dl class="return"><dt><b>Returns:</b></dt><dd>Sum of all words. </dd></dl>
557
<p>Definition at line <a class="el" href="a00093_source.html#l01997">1997</a> of file <a class="el" href="a00093_source.html">bmfunc.h</a>.</p>
559
<p>References <a class="el" href="a00092_source.html#l00050">BM_ASSERT</a>.</p>
563
<a class="anchor" id="ga5cd7e0cfee401da1b8f702151c083b27"></a><!-- doxytag: member="bm::gap_convert_to_arr" ref="ga5cd7e0cfee401da1b8f702151c083b27" args="(D *BMRESTRICT dest, const T *BMRESTRICT buf, unsigned dest_len, bool invert=false)" -->
564
<div class="memitem">
565
<div class="memproto">
566
<div class="memtemplate">
567
template<typename D , typename T > </div>
568
<table class="memname">
570
<td class="memname">D bm::gap_convert_to_arr </td>
572
<td class="paramtype">D *BMRESTRICT </td>
573
<td class="paramname"> <em>dest</em>, </td>
576
<td class="paramkey"></td>
578
<td class="paramtype">const T *BMRESTRICT </td>
579
<td class="paramname"> <em>buf</em>, </td>
582
<td class="paramkey"></td>
584
<td class="paramtype">unsigned </td>
585
<td class="paramname"> <em>dest_len</em>, </td>
588
<td class="paramkey"></td>
590
<td class="paramtype">bool </td>
591
<td class="paramname"> <em>invert</em> = <code>false</code></td><td> </td>
596
<td></td><td></td><td><code> [inline]</code></td>
602
<p>Convert gap block into array of ints corresponding to 1 bits. </p>
604
<p>Definition at line <a class="el" href="a00093_source.html#l02446">2446</a> of file <a class="el" href="a00093_source.html">bmfunc.h</a>.</p>
606
<p>Referenced by <a class="el" href="a00096_source.html#l00653">bm::serializer< BV >::encode_gap_block()</a>.</p>
610
<a class="anchor" id="ga9bb80c42ee0ecf8f2af8250d7f5d327b"></a><!-- doxytag: member="bm::gap_convert_to_bitset" ref="ga9bb80c42ee0ecf8f2af8250d7f5d327b" args="(unsigned *dest, const T *buf, unsigned dest_len)" -->
611
<div class="memitem">
612
<div class="memproto">
613
<div class="memtemplate">
614
template<typename T > </div>
615
<table class="memname">
617
<td class="memname">void bm::gap_convert_to_bitset </td>
619
<td class="paramtype">unsigned * </td>
620
<td class="paramname"> <em>dest</em>, </td>
623
<td class="paramkey"></td>
625
<td class="paramtype">const T * </td>
626
<td class="paramname"> <em>buf</em>, </td>
629
<td class="paramkey"></td>
631
<td class="paramtype">unsigned </td>
632
<td class="paramname"> <em>dest_len</em></td><td> </td>
637
<td></td><td></td><td><code> [inline]</code></td>
643
<p>GAP block to bitblock conversion. </p>
644
<dl><dt><b>Parameters:</b></dt><dd>
645
<table border="0" cellspacing="2" cellpadding="0">
646
<tr><td valign="top"></td><td valign="top"><em>dest</em> </td><td>- bitblock buffer pointer. </td></tr>
647
<tr><td valign="top"></td><td valign="top"><em>buf</em> </td><td>- GAP buffer pointer. </td></tr>
648
<tr><td valign="top"></td><td valign="top"><em>dest_size</em> </td><td>- length of the destination buffer. </td></tr>
653
<p>Definition at line <a class="el" href="a00093_source.html#l01954">1954</a> of file <a class="el" href="a00093_source.html">bmfunc.h</a>.</p>
655
<p>References <a class="el" href="a00093_source.html#l01530">bm::gap_add_to_bitset()</a>.</p>
659
<a class="anchor" id="ga4862f4dcdcb7c0575e2e2db9e5f2a849"></a><!-- doxytag: member="bm::gap_convert_to_bitset" ref="ga4862f4dcdcb7c0575e2e2db9e5f2a849" args="(unsigned *dest, const T *buf)" -->
660
<div class="memitem">
661
<div class="memproto">
662
<div class="memtemplate">
663
template<typename T > </div>
664
<table class="memname">
666
<td class="memname">void bm::gap_convert_to_bitset </td>
668
<td class="paramtype">unsigned * </td>
669
<td class="paramname"> <em>dest</em>, </td>
672
<td class="paramkey"></td>
674
<td class="paramtype">const T * </td>
675
<td class="paramname"> <em>buf</em></td><td> </td>
680
<td></td><td></td><td><code> [inline]</code></td>
686
<p>GAP block to bitblock conversion. </p>
687
<dl><dt><b>Parameters:</b></dt><dd>
688
<table border="0" cellspacing="2" cellpadding="0">
689
<tr><td valign="top"></td><td valign="top"><em>dest</em> </td><td>- bitblock buffer pointer. </td></tr>
690
<tr><td valign="top"></td><td valign="top"><em>buf</em> </td><td>- GAP buffer pointer. </td></tr>
695
<p>Definition at line <a class="el" href="a00093_source.html#l01938">1938</a> of file <a class="el" href="a00093_source.html">bmfunc.h</a>.</p>
697
<p>References <a class="el" href="a00093_source.html#l01920">bm::bit_block_set()</a>, and <a class="el" href="a00093_source.html#l01530">bm::gap_add_to_bitset()</a>.</p>
699
<p>Referenced by <a class="el" href="a00089_source.html#l00343">bm::combine_any_operation_with_block()</a>, <a class="el" href="a00089_source.html#l00114">bm::combine_count_operation_with_block()</a>, <a class="el" href="a00087_source.html#l01921">bm::bvector< Alloc, MS >::compare()</a>, <a class="el" href="a00096_source.html#l02899">bm::iterator_deserializer< BV, SerialIterator >::deserialize()</a>, <a class="el" href="a00096_source.html#l01232">bm::deserializer< BV, DEC >::deserialize_gap()</a>, and <a class="el" href="a00093_source.html#l01975">bm::gap_convert_to_bitset_smart()</a>.</p>
703
<a class="anchor" id="ga3f01bb7c1ae7983aa8c4ba82e1e3f54c"></a><!-- doxytag: member="bm::gap_convert_to_bitset_smart" ref="ga3f01bb7c1ae7983aa8c4ba82e1e3f54c" args="(unsigned *dest, const T *buf, id_t set_max)" -->
704
<div class="memitem">
705
<div class="memproto">
706
<div class="memtemplate">
707
template<typename T > </div>
708
<table class="memname">
710
<td class="memname">unsigned* bm::gap_convert_to_bitset_smart </td>
712
<td class="paramtype">unsigned * </td>
713
<td class="paramname"> <em>dest</em>, </td>
716
<td class="paramkey"></td>
718
<td class="paramtype">const T * </td>
719
<td class="paramname"> <em>buf</em>, </td>
722
<td class="paramkey"></td>
724
<td class="paramtype">id_t </td>
725
<td class="paramname"> <em>set_max</em></td><td> </td>
730
<td></td><td></td><td><code> [inline]</code></td>
736
<p>Smart GAP block to bitblock conversion. </p>
737
<p>Checks if GAP block is ALL-ZERO or ALL-ON. In those cases returns pointer on special static bitblocks.</p>
738
<dl><dt><b>Parameters:</b></dt><dd>
739
<table border="0" cellspacing="2" cellpadding="0">
740
<tr><td valign="top"></td><td valign="top"><em>dest</em> </td><td>- bitblock buffer pointer. </td></tr>
741
<tr><td valign="top"></td><td valign="top"><em>buf</em> </td><td>- GAP buffer pointer. </td></tr>
742
<tr><td valign="top"></td><td valign="top"><em>set_max</em> </td><td>- max possible bitset length </td></tr>
747
<p>Definition at line <a class="el" href="a00093_source.html#l01975">1975</a> of file <a class="el" href="a00093_source.html">bmfunc.h</a>.</p>
749
<p>References <a class="el" href="a00092_source.html#l00060">FULL_BLOCK_ADDR</a>, and <a class="el" href="a00093_source.html#l01938">bm::gap_convert_to_bitset()</a>.</p>
753
<a class="anchor" id="gaa7df7193094353ea24b8519debf745be"></a><!-- doxytag: member="bm::gap_find_in_block" ref="gaa7df7193094353ea24b8519debf745be" args="(const T *buf, unsigned nbit, bm::id_t *prev)" -->
754
<div class="memitem">
755
<div class="memproto">
756
<div class="memtemplate">
757
template<typename T > </div>
758
<table class="memname">
760
<td class="memname">int bm::gap_find_in_block </td>
762
<td class="paramtype">const T * </td>
763
<td class="paramname"> <em>buf</em>, </td>
766
<td class="paramkey"></td>
768
<td class="paramtype">unsigned </td>
769
<td class="paramname"> <em>nbit</em>, </td>
772
<td class="paramkey"></td>
774
<td class="paramtype"><a class="el" href="a00115.html#aa3824d882a037396370b16f2f0a8bf37">bm::id_t</a> * </td>
775
<td class="paramname"> <em>prev</em></td><td> </td>
780
<td></td><td></td><td><code> [inline]</code></td>
786
<p>Searches for the next 1 bit in the GAP block. </p>
787
<dl><dt><b>Parameters:</b></dt><dd>
788
<table border="0" cellspacing="2" cellpadding="0">
789
<tr><td valign="top"></td><td valign="top"><em>buf</em> </td><td>- GAP buffer </td></tr>
790
<tr><td valign="top"></td><td valign="top"><em>nbit</em> </td><td>- bit index to start checking from. </td></tr>
791
<tr><td valign="top"></td><td valign="top"><em>prev</em> </td><td>- returns previously checked value </td></tr>
796
<p>Definition at line <a class="el" href="a00093_source.html#l01225">1225</a> of file <a class="el" href="a00093_source.html">bmfunc.h</a>.</p>
798
<p>References <a class="el" href="a00092_source.html#l00050">BM_ASSERT</a>, <a class="el" href="a00093_source.html#l00461">bm::gap_bfind()</a>, and <a class="el" href="a00091_source.html#l00071">bm::gap_max_bits</a>.</p>
802
<a class="anchor" id="gafd76869eb44fac688da5e26e0e74f41f"></a><!-- doxytag: member="bm::gap_free_elements" ref="gafd76869eb44fac688da5e26e0e74f41f" args="(const T *buf, const T *glevel_len)" -->
803
<div class="memitem">
804
<div class="memproto">
805
<div class="memtemplate">
806
template<typename T > </div>
807
<table class="memname">
809
<td class="memname">unsigned bm::gap_free_elements </td>
811
<td class="paramtype">const T * </td>
812
<td class="paramname"> <em>buf</em>, </td>
815
<td class="paramkey"></td>
817
<td class="paramtype">const T * </td>
818
<td class="paramname"> <em>glevel_len</em></td><td> </td>
823
<td></td><td></td><td><code> [inline]</code></td>
829
<p>Returns number of free elements in GAP block array. Difference between GAP block capacity on this level and actual GAP length. </p>
830
<dl><dt><b>Parameters:</b></dt><dd>
831
<table border="0" cellspacing="2" cellpadding="0">
832
<tr><td valign="top"></td><td valign="top"><em>buf</em> </td><td>- GAP buffer pointer glevel_len - GAP lengths table</td></tr>
836
<dl class="return"><dt><b>Returns:</b></dt><dd>Number of free GAP elements </dd></dl>
838
<p>Definition at line <a class="el" href="a00093_source.html#l02250">2250</a> of file <a class="el" href="a00093_source.html">bmfunc.h</a>.</p>
840
<p>References <a class="el" href="a00093_source.html#l02171">bm::gap_capacity()</a>, and <a class="el" href="a00093_source.html#l02157">bm::gap_length()</a>.</p>
844
<a class="anchor" id="ga5d49355eb9dd7947699e20f3a2a75ef5"></a><!-- doxytag: member="bm::gap_init_range_block" ref="ga5d49355eb9dd7947699e20f3a2a75ef5" args="(T *buf, unsigned from, unsigned to, unsigned value, unsigned set_max)" -->
845
<div class="memitem">
846
<div class="memproto">
847
<div class="memtemplate">
848
template<class T > </div>
849
<table class="memname">
851
<td class="memname">void bm::gap_init_range_block </td>
853
<td class="paramtype">T * </td>
854
<td class="paramname"> <em>buf</em>, </td>
857
<td class="paramkey"></td>
859
<td class="paramtype">unsigned </td>
860
<td class="paramname"> <em>from</em>, </td>
863
<td class="paramkey"></td>
865
<td class="paramtype">unsigned </td>
866
<td class="paramname"> <em>to</em>, </td>
869
<td class="paramkey"></td>
871
<td class="paramtype">unsigned </td>
872
<td class="paramname"> <em>value</em>, </td>
875
<td class="paramkey"></td>
877
<td class="paramtype">unsigned </td>
878
<td class="paramname"> <em>set_max</em></td><td> </td>
883
<td></td><td></td><td><code> [inline]</code></td>
889
<p>Init gap block so it has block in it (can be whole block). </p>
890
<dl><dt><b>Parameters:</b></dt><dd>
891
<table border="0" cellspacing="2" cellpadding="0">
892
<tr><td valign="top"></td><td valign="top"><em>buf</em> </td><td>- GAP buffer pointer. </td></tr>
893
<tr><td valign="top"></td><td valign="top"><em>from</em> </td><td>- one block start </td></tr>
894
<tr><td valign="top"></td><td valign="top"><em>to</em> </td><td>- one block end </td></tr>
895
<tr><td valign="top"></td><td valign="top"><em>value</em> </td><td>- (block value)1 or 0 </td></tr>
896
<tr><td valign="top"></td><td valign="top"><em>set_max</em> </td><td>- max possible bitset length </td></tr>
901
<p>Definition at line <a class="el" href="a00093_source.html#l02049">2049</a> of file <a class="el" href="a00093_source.html">bmfunc.h</a>.</p>
903
<p>References <a class="el" href="a00092_source.html#l00050">BM_ASSERT</a>, and <a class="el" href="a00093_source.html#l02028">bm::gap_set_all()</a>.</p>
907
<a class="anchor" id="ga3f22bfde5dfe06d6d77dc2598b8c0845"></a><!-- doxytag: member="bm::gap_invert" ref="ga3f22bfde5dfe06d6d77dc2598b8c0845" args="(T *buf)" -->
908
<div class="memitem">
909
<div class="memproto">
910
<div class="memtemplate">
911
template<typename T > </div>
912
<table class="memname">
914
<td class="memname">void bm::gap_invert </td>
916
<td class="paramtype">T * </td>
917
<td class="paramname"> <em>buf</em></td>
918
<td> ) </td>
919
<td><code> [inline]</code></td>
925
<p>Inverts all bits in the GAP buffer. </p>
926
<dl><dt><b>Parameters:</b></dt><dd>
927
<table border="0" cellspacing="2" cellpadding="0">
928
<tr><td valign="top"></td><td valign="top"><em>buf</em> </td><td>- GAP buffer pointer. </td></tr>
933
<p>Definition at line <a class="el" href="a00093_source.html#l02099">2099</a> of file <a class="el" href="a00093_source.html">bmfunc.h</a>.</p>
935
<p>Referenced by <a class="el" href="a00093_source.html#l03050">bm::gap_operation_or()</a>, and <a class="el" href="a00096_source.html#l01129">bm::deseriaizer_base< DEC >::read_gap_block()</a>.</p>
939
<a class="anchor" id="ga1427d43e91872f981c6311fa76ab5633"></a><!-- doxytag: member="bm::gap_is_all_one" ref="ga1427d43e91872f981c6311fa76ab5633" args="(const T *buf, unsigned set_max)" -->
940
<div class="memitem">
941
<div class="memproto">
942
<div class="memtemplate">
943
template<typename T > </div>
944
<table class="memname">
946
<td class="memname">bool bm::gap_is_all_one </td>
948
<td class="paramtype">const T * </td>
949
<td class="paramname"> <em>buf</em>, </td>
952
<td class="paramkey"></td>
954
<td class="paramtype">unsigned </td>
955
<td class="paramname"> <em>set_max</em></td><td> </td>
960
<td></td><td></td><td><code> [inline]</code></td>
966
<p>Checks if GAP block is all-one. </p>
967
<dl><dt><b>Parameters:</b></dt><dd>
968
<table border="0" cellspacing="2" cellpadding="0">
969
<tr><td valign="top"></td><td valign="top"><em>buf</em> </td><td>- GAP buffer pointer. </td></tr>
970
<tr><td valign="top"></td><td valign="top"><em>set_max</em> </td><td>- max possible bitset length </td></tr>
974
<dl class="return"><dt><b>Returns:</b></dt><dd>true if all-one. </dd></dl>
976
<p>Definition at line <a class="el" href="a00093_source.html#l02145">2145</a> of file <a class="el" href="a00093_source.html">bmfunc.h</a>.</p>
980
<a class="anchor" id="ga690ff7c8b16e1821a77663b7194267e7"></a><!-- doxytag: member="bm::gap_is_all_zero" ref="ga690ff7c8b16e1821a77663b7194267e7" args="(const T *buf, unsigned set_max)" -->
981
<div class="memitem">
982
<div class="memproto">
983
<div class="memtemplate">
984
template<typename T > </div>
985
<table class="memname">
987
<td class="memname">bool bm::gap_is_all_zero </td>
989
<td class="paramtype">const T * </td>
990
<td class="paramname"> <em>buf</em>, </td>
993
<td class="paramkey"></td>
995
<td class="paramtype">unsigned </td>
996
<td class="paramname"> <em>set_max</em></td><td> </td>
1001
<td></td><td></td><td><code> [inline]</code></td>
1005
<div class="memdoc">
1007
<p>Temporary inverts all bits in the GAP buffer. </p>
1008
<p>In this function const-ness of the buffer means nothing. Calling this function again restores the status of the buffer.</p>
1009
<dl><dt><b>Parameters:</b></dt><dd>
1010
<table border="0" cellspacing="2" cellpadding="0">
1011
<tr><td valign="top"></td><td valign="top"><em>buf</em> </td><td>- GAP buffer pointer. (Buffer IS changed)</td></tr>
1015
<p>Checks if GAP block is all-zero. </p>
1016
<dl><dt><b>Parameters:</b></dt><dd>
1017
<table border="0" cellspacing="2" cellpadding="0">
1018
<tr><td valign="top"></td><td valign="top"><em>buf</em> </td><td>- GAP buffer pointer. </td></tr>
1019
<tr><td valign="top"></td><td valign="top"><em>set_max</em> </td><td>- max possible bitset length </td></tr>
1023
<dl class="return"><dt><b>Returns:</b></dt><dd>true if all-zero. </dd></dl>
1025
<p>Definition at line <a class="el" href="a00093_source.html#l02131">2131</a> of file <a class="el" href="a00093_source.html">bmfunc.h</a>.</p>
1027
<p>Referenced by <a class="el" href="a00089_source.html#l00343">bm::combine_any_operation_with_block()</a>, and <a class="el" href="a00087_source.html#l01921">bm::bvector< Alloc, MS >::compare()</a>.</p>
1031
<a class="anchor" id="gad6bfb9da9950b0df8983a9faf9db5042"></a><!-- doxytag: member="bm::gap_length" ref="gad6bfb9da9950b0df8983a9faf9db5042" args="(const T *buf)" -->
1032
<div class="memitem">
1033
<div class="memproto">
1034
<div class="memtemplate">
1035
template<typename T > </div>
1036
<table class="memname">
1038
<td class="memname">unsigned bm::gap_length </td>
1040
<td class="paramtype">const T * </td>
1041
<td class="paramname"> <em>buf</em></td>
1042
<td> ) </td>
1043
<td><code> [inline]</code></td>
1047
<div class="memdoc">
1049
<p>Returs GAP block length. </p>
1050
<dl><dt><b>Parameters:</b></dt><dd>
1051
<table border="0" cellspacing="2" cellpadding="0">
1052
<tr><td valign="top"></td><td valign="top"><em>buf</em> </td><td>- GAP buffer pointer. </td></tr>
1056
<dl class="return"><dt><b>Returns:</b></dt><dd>GAP block length. </dd></dl>
1058
<p>Definition at line <a class="el" href="a00093_source.html#l02157">2157</a> of file <a class="el" href="a00093_source.html">bmfunc.h</a>.</p>
1060
<p>Referenced by <a class="el" href="a00087_source.html#l02051">bm::bvector< Alloc, MS >::calc_stat()</a>, <a class="el" href="a00096_source.html#l02899">bm::iterator_deserializer< BV, SerialIterator >::deserialize()</a>, <a class="el" href="a00096_source.html#l01232">bm::deserializer< BV, DEC >::deserialize_gap()</a>, <a class="el" href="a00096_source.html#l00653">bm::serializer< BV >::encode_gap_block()</a>, <a class="el" href="a00096_source.html#l00569">bm::serializer< BV >::gamma_gap_block()</a>, <a class="el" href="a00093_source.html#l02250">bm::gap_free_elements()</a>, and <a class="el" href="a00096_source.html#l01129">bm::deseriaizer_base< DEC >::read_gap_block()</a>.</p>
1064
<a class="anchor" id="ga1defe73aa4227a0e7204363ac6bb1ac1"></a><!-- doxytag: member="bm::gap_level" ref="ga1defe73aa4227a0e7204363ac6bb1ac1" args="(const T *buf)" -->
1065
<div class="memitem">
1066
<div class="memproto">
1067
<div class="memtemplate">
1068
template<typename T > </div>
1069
<table class="memname">
1071
<td class="memname">unsigned bm::gap_level </td>
1073
<td class="paramtype">const T * </td>
1074
<td class="paramname"> <em>buf</em></td>
1075
<td> ) </td>
1076
<td><code> [inline]</code></td>
1080
<div class="memdoc">
1082
<p>Returs GAP blocks capacity level. </p>
1083
<dl><dt><b>Parameters:</b></dt><dd>
1084
<table border="0" cellspacing="2" cellpadding="0">
1085
<tr><td valign="top"></td><td valign="top"><em>buf</em> </td><td>- GAP buffer pointer. </td></tr>
1089
<dl class="return"><dt><b>Returns:</b></dt><dd>GAP block capacity level. </dd></dl>
1091
<p>Definition at line <a class="el" href="a00093_source.html#l02199">2199</a> of file <a class="el" href="a00093_source.html">bmfunc.h</a>.</p>
1095
<a class="anchor" id="ga94a5371b5dc6a1560d95d7c2dde88815"></a><!-- doxytag: member="bm::gap_limit" ref="ga94a5371b5dc6a1560d95d7c2dde88815" args="(const T *buf, const T *glevel_len)" -->
1096
<div class="memitem">
1097
<div class="memproto">
1098
<div class="memtemplate">
1099
template<typename T > </div>
1100
<table class="memname">
1102
<td class="memname">unsigned bm::gap_limit </td>
1104
<td class="paramtype">const T * </td>
1105
<td class="paramname"> <em>buf</em>, </td>
1108
<td class="paramkey"></td>
1110
<td class="paramtype">const T * </td>
1111
<td class="paramname"> <em>glevel_len</em></td><td> </td>
1116
<td></td><td></td><td><code> [inline]</code></td>
1120
<div class="memdoc">
1122
<p>Returs GAP block capacity limit. </p>
1123
<dl><dt><b>Parameters:</b></dt><dd>
1124
<table border="0" cellspacing="2" cellpadding="0">
1125
<tr><td valign="top"></td><td valign="top"><em>buf</em> </td><td>- GAP buffer pointer. </td></tr>
1126
<tr><td valign="top"></td><td valign="top"><em>glevel_len</em> </td><td>- GAP lengths table (<a class="el" href="a00067.html" title="Default GAP lengths table.">gap_len_table</a>) </td></tr>
1130
<dl class="return"><dt><b>Returns:</b></dt><dd>GAP block limit. </dd></dl>
1132
<p>Definition at line <a class="el" href="a00093_source.html#l02186">2186</a> of file <a class="el" href="a00093_source.html">bmfunc.h</a>.</p>
1134
<p>Referenced by <a class="el" href="a00089_source.html#l01105">bm::combine_or()</a>, <a class="el" href="a00089_source.html#l01268">bm::combine_sub()</a>, <a class="el" href="a00089_source.html#l01184">bm::combine_xor()</a>, and <a class="el" href="a00096_source.html#l01232">bm::deserializer< BV, DEC >::deserialize_gap()</a>.</p>
1138
<a class="anchor" id="ga1666464d22f7fd473db9aafcf2f77a63"></a><!-- doxytag: member="bm::gap_operation_and" ref="ga1666464d22f7fd473db9aafcf2f77a63" args="(const gap_word_t *BMRESTRICT vect1, const gap_word_t *BMRESTRICT vect2, gap_word_t *BMRESTRICT tmp_buf, unsigned &dsize)" -->
1139
<div class="memitem">
1140
<div class="memproto">
1141
<table class="memname">
1143
<td class="memname">gap_word_t* bm::gap_operation_and </td>
1145
<td class="paramtype">const gap_word_t *BMRESTRICT </td>
1146
<td class="paramname"> <em>vect1</em>, </td>
1149
<td class="paramkey"></td>
1151
<td class="paramtype">const gap_word_t *BMRESTRICT </td>
1152
<td class="paramname"> <em>vect2</em>, </td>
1155
<td class="paramkey"></td>
1157
<td class="paramtype">gap_word_t *BMRESTRICT </td>
1158
<td class="paramname"> <em>tmp_buf</em>, </td>
1161
<td class="paramkey"></td>
1163
<td class="paramtype">unsigned & </td>
1164
<td class="paramname"> <em>dsize</em></td><td> </td>
1169
<td></td><td></td><td><code> [inline]</code></td>
1173
<div class="memdoc">
1175
<p>GAP AND operation. </p>
1176
<p>Function performs AND 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.</p>
1177
<dl><dt><b>Parameters:</b></dt><dd>
1178
<table border="0" cellspacing="2" cellpadding="0">
1179
<tr><td valign="top"></td><td valign="top"><em>vect1</em> </td><td>- operand 1 </td></tr>
1180
<tr><td valign="top"></td><td valign="top"><em>vect2</em> </td><td>- operand 2 </td></tr>
1181
<tr><td valign="top"></td><td valign="top"><em>tmp_buf</em> </td><td>- pointer on temporary buffer </td></tr>
1182
<tr><td valign="top"></td><td valign="top"><em>dsize</em> </td><td>- out size of the destination </td></tr>
1186
<dl class="return"><dt><b>Returns:</b></dt><dd>Result pointer (tmp_buf OR vect1) </dd></dl>
1188
<p>Definition at line <a class="el" href="a00093_source.html#l02954">2954</a> of file <a class="el" href="a00093_source.html">bmfunc.h</a>.</p>
1190
<p>References <a class="el" href="a00093_source.html#l02925">bm::and_op()</a>, and <a class="el" href="a00093_source.html#l00908">bm::gap_buff_op()</a>.</p>
1192
<p>Referenced by <a class="el" href="a00089_source.html#l00114">bm::combine_count_operation_with_block()</a>.</p>
1196
<a class="anchor" id="gafb24a1e2588c5670df6facc537594d9d"></a><!-- doxytag: member="bm::gap_operation_any_and" ref="gafb24a1e2588c5670df6facc537594d9d" args="(const gap_word_t *BMRESTRICT vect1, const gap_word_t *BMRESTRICT vect2)" -->
1197
<div class="memitem">
1198
<div class="memproto">
1199
<table class="memname">
1201
<td class="memname">unsigned bm::gap_operation_any_and </td>
1203
<td class="paramtype">const gap_word_t *BMRESTRICT </td>
1204
<td class="paramname"> <em>vect1</em>, </td>
1207
<td class="paramkey"></td>
1209
<td class="paramtype">const gap_word_t *BMRESTRICT </td>
1210
<td class="paramname"> <em>vect2</em></td><td> </td>
1215
<td></td><td></td><td><code> [inline]</code></td>
1219
<div class="memdoc">
1221
<p>GAP AND operation test. </p>
1222
<p>Function performs AND 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.</p>
1223
<dl><dt><b>Parameters:</b></dt><dd>
1224
<table border="0" cellspacing="2" cellpadding="0">
1225
<tr><td valign="top"></td><td valign="top"><em>vect1</em> </td><td>- operand 1 </td></tr>
1226
<tr><td valign="top"></td><td valign="top"><em>vect2</em> </td><td>- operand 2 </td></tr>
1230
<dl class="return"><dt><b>Returns:</b></dt><dd>non zero value if operation returns any 1 bit </dd></dl>
1232
<p>Definition at line <a class="el" href="a00093_source.html#l02977">2977</a> of file <a class="el" href="a00093_source.html">bmfunc.h</a>.</p>
1234
<p>References <a class="el" href="a00093_source.html#l02925">bm::and_op()</a>, and <a class="el" href="a00093_source.html#l00990">bm::gap_buff_any_op()</a>.</p>
1236
<p>Referenced by <a class="el" href="a00089_source.html#l00343">bm::combine_any_operation_with_block()</a>.</p>
1240
<a class="anchor" id="gae0b1d4aca0ddfa58d83e4b089a4f35d9"></a><!-- doxytag: member="bm::gap_operation_any_sub" ref="gae0b1d4aca0ddfa58d83e4b089a4f35d9" args="(const gap_word_t *BMRESTRICT vect1, const gap_word_t *BMRESTRICT vect2)" -->
1241
<div class="memitem">
1242
<div class="memproto">
1243
<table class="memname">
1245
<td class="memname">unsigned bm::gap_operation_any_sub </td>
1247
<td class="paramtype">const gap_word_t *BMRESTRICT </td>
1248
<td class="paramname"> <em>vect1</em>, </td>
1251
<td class="paramkey"></td>
1253
<td class="paramtype">const gap_word_t *BMRESTRICT </td>
1254
<td class="paramname"> <em>vect2</em></td><td> </td>
1259
<td></td><td></td><td><code> [inline]</code></td>
1263
<div class="memdoc">
1265
<p>GAP SUB operation test. </p>
1266
<p>Function performs AND 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.</p>
1267
<dl><dt><b>Parameters:</b></dt><dd>
1268
<table border="0" cellspacing="2" cellpadding="0">
1269
<tr><td valign="top"></td><td valign="top"><em>vect1</em> </td><td>- operand 1 </td></tr>
1270
<tr><td valign="top"></td><td valign="top"><em>vect2</em> </td><td>- operand 2 </td></tr>
1274
<dl class="return"><dt><b>Returns:</b></dt><dd>non zero value if operation returns any 1 bit </dd></dl>
1276
<p>Definition at line <a class="el" href="a00093_source.html#l03104">3104</a> of file <a class="el" href="a00093_source.html">bmfunc.h</a>.</p>
1278
<p>References <a class="el" href="a00093_source.html#l02925">bm::and_op()</a>, and <a class="el" href="a00093_source.html#l00990">bm::gap_buff_any_op()</a>.</p>
1280
<p>Referenced by <a class="el" href="a00089_source.html#l00343">bm::combine_any_operation_with_block()</a>.</p>
1284
<a class="anchor" id="gab46833bf0d7813f868a1608f70db12de"></a><!-- doxytag: member="bm::gap_operation_any_xor" ref="gab46833bf0d7813f868a1608f70db12de" args="(const gap_word_t *BMRESTRICT vect1, const gap_word_t *BMRESTRICT vect2)" -->
1285
<div class="memitem">
1286
<div class="memproto">
1287
<table class="memname">
1289
<td class="memname">unsigned bm::gap_operation_any_xor </td>
1291
<td class="paramtype">const gap_word_t *BMRESTRICT </td>
1292
<td class="paramname"> <em>vect1</em>, </td>
1295
<td class="paramkey"></td>
1297
<td class="paramtype">const gap_word_t *BMRESTRICT </td>
1298
<td class="paramname"> <em>vect2</em></td><td> </td>
1303
<td></td><td></td><td><code> [inline]</code></td>
1307
<div class="memdoc">
1309
<p>GAP XOR operation test. </p>
1310
<p>Function performs AND 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.</p>
1311
<dl><dt><b>Parameters:</b></dt><dd>
1312
<table border="0" cellspacing="2" cellpadding="0">
1313
<tr><td valign="top"></td><td valign="top"><em>vect1</em> </td><td>- operand 1 </td></tr>
1314
<tr><td valign="top"></td><td valign="top"><em>vect2</em> </td><td>- operand 2 </td></tr>
1318
<dl class="return"><dt><b>Returns:</b></dt><dd>non zero value if operation returns any 1 bit </dd></dl>
1320
<p>Definition at line <a class="el" href="a00093_source.html#l03025">3025</a> of file <a class="el" href="a00093_source.html">bmfunc.h</a>.</p>
1322
<p>References <a class="el" href="a00093_source.html#l00990">bm::gap_buff_any_op()</a>, and <a class="el" href="a00093_source.html#l02932">bm::xor_op()</a>.</p>
1324
<p>Referenced by <a class="el" href="a00089_source.html#l00343">bm::combine_any_operation_with_block()</a>.</p>
1328
<a class="anchor" id="gacda280af8910ae5fde37731a3a7a1226"></a><!-- doxytag: member="bm::gap_operation_or" ref="gacda280af8910ae5fde37731a3a7a1226" args="(const gap_word_t *BMRESTRICT vect1, const gap_word_t *BMRESTRICT vect2, gap_word_t *BMRESTRICT tmp_buf, unsigned &dsize)" -->
1329
<div class="memitem">
1330
<div class="memproto">
1331
<table class="memname">
1333
<td class="memname">gap_word_t* bm::gap_operation_or </td>
1335
<td class="paramtype">const gap_word_t *BMRESTRICT </td>
1336
<td class="paramname"> <em>vect1</em>, </td>
1339
<td class="paramkey"></td>
1341
<td class="paramtype">const gap_word_t *BMRESTRICT </td>
1342
<td class="paramname"> <em>vect2</em>, </td>
1345
<td class="paramkey"></td>
1347
<td class="paramtype">gap_word_t *BMRESTRICT </td>
1348
<td class="paramname"> <em>tmp_buf</em>, </td>
1351
<td class="paramkey"></td>
1353
<td class="paramtype">unsigned & </td>
1354
<td class="paramname"> <em>dsize</em></td><td> </td>
1359
<td></td><td></td><td><code> [inline]</code></td>
1363
<div class="memdoc">
1365
<p>GAP OR operation. </p>
1366
<p>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.</p>
1367
<dl><dt><b>Parameters:</b></dt><dd>
1368
<table border="0" cellspacing="2" cellpadding="0">
1369
<tr><td valign="top"></td><td valign="top"><em>vect1</em> </td><td>- operand 1 </td></tr>
1370
<tr><td valign="top"></td><td valign="top"><em>vect2</em> </td><td>- operand 2 </td></tr>
1371
<tr><td valign="top"></td><td valign="top"><em>tmp_buf</em> </td><td>- pointer on temporary buffer </td></tr>
1372
<tr><td valign="top"></td><td valign="top"><em>dsize</em> </td><td>- out destination size</td></tr>
1376
<dl class="return"><dt><b>Returns:</b></dt><dd>Result pointer (tmp_buf) </dd></dl>
1378
<p>Definition at line <a class="el" href="a00093_source.html#l03050">3050</a> of file <a class="el" href="a00093_source.html">bmfunc.h</a>.</p>
1380
<p>References <a class="el" href="a00093_source.html#l02925">bm::and_op()</a>, <a class="el" href="a00093_source.html#l00908">bm::gap_buff_op()</a>, and <a class="el" href="a00093_source.html#l02099">bm::gap_invert()</a>.</p>
1382
<p>Referenced by <a class="el" href="a00089_source.html#l00343">bm::combine_any_operation_with_block()</a>, and <a class="el" href="a00089_source.html#l00114">bm::combine_count_operation_with_block()</a>.</p>
1386
<a class="anchor" id="gabe4c83e5e162c38e297116dd1cd05ac4"></a><!-- doxytag: member="bm::gap_operation_sub" ref="gabe4c83e5e162c38e297116dd1cd05ac4" args="(const gap_word_t *BMRESTRICT vect1, const gap_word_t *BMRESTRICT vect2, gap_word_t *BMRESTRICT tmp_buf, unsigned &dsize)" -->
1387
<div class="memitem">
1388
<div class="memproto">
1389
<table class="memname">
1391
<td class="memname">gap_word_t* bm::gap_operation_sub </td>
1393
<td class="paramtype">const gap_word_t *BMRESTRICT </td>
1394
<td class="paramname"> <em>vect1</em>, </td>
1397
<td class="paramkey"></td>
1399
<td class="paramtype">const gap_word_t *BMRESTRICT </td>
1400
<td class="paramname"> <em>vect2</em>, </td>
1403
<td class="paramkey"></td>
1405
<td class="paramtype">gap_word_t *BMRESTRICT </td>
1406
<td class="paramname"> <em>tmp_buf</em>, </td>
1409
<td class="paramkey"></td>
1411
<td class="paramtype">unsigned & </td>
1412
<td class="paramname"> <em>dsize</em></td><td> </td>
1417
<td></td><td></td><td><code> [inline]</code></td>
1421
<div class="memdoc">
1423
<p>GAP SUB (AND NOT) operation. </p>
1424
<p>Function performs SUB 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.</p>
1425
<dl><dt><b>Parameters:</b></dt><dd>
1426
<table border="0" cellspacing="2" cellpadding="0">
1427
<tr><td valign="top"></td><td valign="top"><em>vect1</em> </td><td>- operand 1 </td></tr>
1428
<tr><td valign="top"></td><td valign="top"><em>vect2</em> </td><td>- operand 2 </td></tr>
1429
<tr><td valign="top"></td><td valign="top"><em>tmp_buf</em> </td><td>- pointer on temporary buffer </td></tr>
1430
<tr><td valign="top"></td><td valign="top"><em>dsize</em> </td><td>- out destination size</td></tr>
1434
<dl class="return"><dt><b>Returns:</b></dt><dd>Result pointer (tmp_buf) </dd></dl>
1436
<p>Definition at line <a class="el" href="a00093_source.html#l03080">3080</a> of file <a class="el" href="a00093_source.html">bmfunc.h</a>.</p>
1438
<p>References <a class="el" href="a00093_source.html#l02925">bm::and_op()</a>, and <a class="el" href="a00093_source.html#l00908">bm::gap_buff_op()</a>.</p>
1440
<p>Referenced by <a class="el" href="a00089_source.html#l00114">bm::combine_count_operation_with_block()</a>.</p>
1444
<a class="anchor" id="gaa5e07ad0256bf784ad3397acbbd23bb2"></a><!-- doxytag: member="bm::gap_operation_xor" ref="gaa5e07ad0256bf784ad3397acbbd23bb2" args="(const gap_word_t *BMRESTRICT vect1, const gap_word_t *BMRESTRICT vect2, gap_word_t *BMRESTRICT tmp_buf, unsigned &dsize)" -->
1445
<div class="memitem">
1446
<div class="memproto">
1447
<table class="memname">
1449
<td class="memname">gap_word_t* bm::gap_operation_xor </td>
1451
<td class="paramtype">const gap_word_t *BMRESTRICT </td>
1452
<td class="paramname"> <em>vect1</em>, </td>
1455
<td class="paramkey"></td>
1457
<td class="paramtype">const gap_word_t *BMRESTRICT </td>
1458
<td class="paramname"> <em>vect2</em>, </td>
1461
<td class="paramkey"></td>
1463
<td class="paramtype">gap_word_t *BMRESTRICT </td>
1464
<td class="paramname"> <em>tmp_buf</em>, </td>
1467
<td class="paramkey"></td>
1469
<td class="paramtype">unsigned & </td>
1470
<td class="paramname"> <em>dsize</em></td><td> </td>
1475
<td></td><td></td><td><code> [inline]</code></td>
1479
<div class="memdoc">
1481
<p>GAP XOR operation. </p>
1482
<p>Function performs XOR 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.</p>
1483
<dl><dt><b>Parameters:</b></dt><dd>
1484
<table border="0" cellspacing="2" cellpadding="0">
1485
<tr><td valign="top"></td><td valign="top"><em>vect1</em> </td><td>- operand 1 </td></tr>
1486
<tr><td valign="top"></td><td valign="top"><em>vect2</em> </td><td>- operand 2 </td></tr>
1487
<tr><td valign="top"></td><td valign="top"><em>tmp_buf</em> </td><td>- pointer on temporary buffer </td></tr>
1488
<tr><td valign="top"></td><td valign="top"><em>dsize</em> </td><td>- out destination size </td></tr>
1492
<dl class="return"><dt><b>Returns:</b></dt><dd>Result pointer (tmp_buf) </dd></dl>
1494
<p>Definition at line <a class="el" href="a00093_source.html#l03001">3001</a> of file <a class="el" href="a00093_source.html">bmfunc.h</a>.</p>
1496
<p>References <a class="el" href="a00093_source.html#l00908">bm::gap_buff_op()</a>, and <a class="el" href="a00093_source.html#l02932">bm::xor_op()</a>.</p>
1498
<p>Referenced by <a class="el" href="a00089_source.html#l00114">bm::combine_count_operation_with_block()</a>.</p>
1502
<a class="anchor" id="gacc578010f3700940829c600c812d23b1"></a><!-- doxytag: member="bm::gap_overhead" ref="gacc578010f3700940829c600c812d23b1" args="(const T *length, const T *length_end, const T *glevel_len)" -->
1503
<div class="memitem">
1504
<div class="memproto">
1505
<div class="memtemplate">
1506
template<typename T > </div>
1507
<table class="memname">
1509
<td class="memname">unsigned bm::gap_overhead </td>
1511
<td class="paramtype">const T * </td>
1512
<td class="paramname"> <em>length</em>, </td>
1515
<td class="paramkey"></td>
1517
<td class="paramtype">const T * </td>
1518
<td class="paramname"> <em>length_end</em>, </td>
1521
<td class="paramkey"></td>
1523
<td class="paramtype">const T * </td>
1524
<td class="paramname"> <em>glevel_len</em></td><td> </td>
1529
<td></td><td></td><td><code> [inline]</code></td>
1533
<div class="memdoc">
1535
<p>Convert bit block into an array of ints corresponding to 1 bits. </p>
1536
<p>OBSOLETE function</p>
1537
<p>Calculates memory overhead for number of gap blocks sharing the same memory allocation table (level lengths table). </p>
1539
<p>Definition at line <a class="el" href="a00093_source.html#l04563">4563</a> of file <a class="el" href="a00093_source.html">bmfunc.h</a>.</p>
1541
<p>References <a class="el" href="a00092_source.html#l00050">BM_ASSERT</a>, <a class="el" href="a00093_source.html#l02229">bm::gap_calc_level()</a>, and <a class="el" href="a00091_source.html#l00074">bm::gap_levels</a>.</p>
1543
<p>Referenced by <a class="el" href="a00093_source.html#l04591">bm::improve_gap_levels()</a>.</p>
1547
<a class="anchor" id="gaef53b2877ff369badd7bb25b26bb9029"></a><!-- doxytag: member="bm::gap_set_all" ref="gaef53b2877ff369badd7bb25b26bb9029" args="(T *buf, unsigned set_max, unsigned value)" -->
1548
<div class="memitem">
1549
<div class="memproto">
1550
<div class="memtemplate">
1551
template<class T > </div>
1552
<table class="memname">
1554
<td class="memname">void bm::gap_set_all </td>
1556
<td class="paramtype">T * </td>
1557
<td class="paramname"> <em>buf</em>, </td>
1560
<td class="paramkey"></td>
1562
<td class="paramtype">unsigned </td>
1563
<td class="paramname"> <em>set_max</em>, </td>
1566
<td class="paramkey"></td>
1568
<td class="paramtype">unsigned </td>
1569
<td class="paramname"> <em>value</em></td><td> </td>
1574
<td></td><td></td><td><code> [inline]</code></td>
1578
<div class="memdoc">
1580
<p>Sets all bits to 0 or 1 (GAP). </p>
1581
<dl><dt><b>Parameters:</b></dt><dd>
1582
<table border="0" cellspacing="2" cellpadding="0">
1583
<tr><td valign="top"></td><td valign="top"><em>buf</em> </td><td>- GAP buffer pointer. </td></tr>
1584
<tr><td valign="top"></td><td valign="top"><em>set_max</em> </td><td>- max possible bitset length </td></tr>
1589
<p>Definition at line <a class="el" href="a00093_source.html#l02028">2028</a> of file <a class="el" href="a00093_source.html">bmfunc.h</a>.</p>
1591
<p>References <a class="el" href="a00092_source.html#l00050">BM_ASSERT</a>.</p>
1593
<p>Referenced by <a class="el" href="a00093_source.html#l02049">bm::gap_init_range_block()</a>, and <a class="el" href="a00096_source.html#l01129">bm::deseriaizer_base< DEC >::read_gap_block()</a>.</p>
1597
<a class="anchor" id="ga69186bd13bda27e04b3e33683ff884c2"></a><!-- doxytag: member="bm::gap_set_value" ref="ga69186bd13bda27e04b3e33683ff884c2" args="(unsigned val, T *BMRESTRICT buf, unsigned pos, unsigned *BMRESTRICT is_set)" -->
1598
<div class="memitem">
1599
<div class="memproto">
1600
<div class="memtemplate">
1601
template<typename T > </div>
1602
<table class="memname">
1604
<td class="memname">unsigned bm::gap_set_value </td>
1606
<td class="paramtype">unsigned </td>
1607
<td class="paramname"> <em>val</em>, </td>
1610
<td class="paramkey"></td>
1612
<td class="paramtype">T *BMRESTRICT </td>
1613
<td class="paramname"> <em>buf</em>, </td>
1616
<td class="paramkey"></td>
1618
<td class="paramtype">unsigned </td>
1619
<td class="paramname"> <em>pos</em>, </td>
1622
<td class="paramkey"></td>
1624
<td class="paramtype">unsigned *BMRESTRICT </td>
1625
<td class="paramname"> <em>is_set</em></td><td> </td>
1630
<td></td><td></td><td><code> [inline]</code></td>
1634
<div class="memdoc">
1636
<p>Abstract distance(similarity) operation for GAP buffers. Receives functor F as a template argument. </p>
1637
<dl><dt><b>Parameters:</b></dt><dd>
1638
<table border="0" cellspacing="2" cellpadding="0">
1639
<tr><td valign="top"></td><td valign="top"><em>vect1</em> </td><td>- operand 1 GAP encoded buffer. </td></tr>
1640
<tr><td valign="top"></td><td valign="top"><em>vect2</em> </td><td>- operand 2 GAP encoded buffer. </td></tr>
1641
<tr><td valign="top"></td><td valign="top"><em>f</em> </td><td>- operation functor. </td></tr>
1645
<dl class="note"><dt><b>Note:</b></dt><dd>Internal function.</dd></dl>
1646
<p>Sets or clears bit in the GAP buffer. </p>
1647
<dl><dt><b>Parameters:</b></dt><dd>
1648
<table border="0" cellspacing="2" cellpadding="0">
1649
<tr><td valign="top"></td><td valign="top"><em>val</em> </td><td>- new bit value </td></tr>
1650
<tr><td valign="top"></td><td valign="top"><em>buf</em> </td><td>- GAP buffer. </td></tr>
1651
<tr><td valign="top"></td><td valign="top"><em>pos</em> </td><td>- Index of bit to set. </td></tr>
1652
<tr><td valign="top"></td><td valign="top"><em>is_set</em> </td><td>- (OUT) flag if bit was actually set.</td></tr>
1656
<dl class="return"><dt><b>Returns:</b></dt><dd>New GAP buffer length. </dd></dl>
1658
<p>Definition at line <a class="el" href="a00093_source.html#l01133">1133</a> of file <a class="el" href="a00093_source.html">bmfunc.h</a>.</p>
1660
<p>References <a class="el" href="a00092_source.html#l00050">BM_ASSERT</a>, <a class="el" href="a00093_source.html#l00461">bm::gap_bfind()</a>, and <a class="el" href="a00091_source.html#l00071">bm::gap_max_bits</a>.</p>
1662
<p>Referenced by <a class="el" href="a00089_source.html#l01105">bm::combine_or()</a>, <a class="el" href="a00089_source.html#l01268">bm::combine_sub()</a>, <a class="el" href="a00089_source.html#l01184">bm::combine_xor()</a>, <a class="el" href="a00096_source.html#l01232">bm::deserializer< BV, DEC >::deserialize_gap()</a>, <a class="el" href="a00096_source.html#l01129">bm::deseriaizer_base< DEC >::read_gap_block()</a>, and <a class="el" href="a00103_source.html#l00101">bm::miniset< A, N >::set()</a>.</p>
1666
<a class="anchor" id="ga08e0ae8b2fd5869aa31cfad7d47177c4"></a><!-- doxytag: member="bm::gap_sub_to_bitset" ref="ga08e0ae8b2fd5869aa31cfad7d47177c4" args="(unsigned *dest, const T *buf)" -->
1667
<div class="memitem">
1668
<div class="memproto">
1669
<div class="memtemplate">
1670
template<typename T > </div>
1671
<table class="memname">
1673
<td class="memname">void bm::gap_sub_to_bitset </td>
1675
<td class="paramtype">unsigned * </td>
1676
<td class="paramname"> <em>dest</em>, </td>
1679
<td class="paramkey"></td>
1681
<td class="paramtype">const T * </td>
1682
<td class="paramname"> <em>buf</em></td><td> </td>
1687
<td></td><td></td><td><code> [inline]</code></td>
1691
<div class="memdoc">
1693
<p>SUB (AND NOT) GAP block to bitblock. </p>
1694
<dl><dt><b>Parameters:</b></dt><dd>
1695
<table border="0" cellspacing="2" cellpadding="0">
1696
<tr><td valign="top"></td><td valign="top"><em>dest</em> </td><td>- bitblock buffer pointer. </td></tr>
1697
<tr><td valign="top"></td><td valign="top"><em>buf</em> </td><td>- GAP buffer pointer. </td></tr>
1702
<p>Definition at line <a class="el" href="a00093_source.html#l01466">1466</a> of file <a class="el" href="a00093_source.html">bmfunc.h</a>.</p>
1704
<p>References <a class="el" href="a00092_source.html#l00050">BM_ASSERT</a>, and <a class="el" href="a00093_source.html#l01342">bm::sub_bit_block()</a>.</p>
1708
<a class="anchor" id="ga866352ef5986a7d2b709795d127b666b"></a><!-- doxytag: member="bm::gap_test" ref="ga866352ef5986a7d2b709795d127b666b" args="(const T *buf, unsigned pos)" -->
1709
<div class="memitem">
1710
<div class="memproto">
1711
<div class="memtemplate">
1712
template<typename T > </div>
1713
<table class="memname">
1715
<td class="memname">unsigned bm::gap_test </td>
1717
<td class="paramtype">const T * </td>
1718
<td class="paramname"> <em>buf</em>, </td>
1721
<td class="paramkey"></td>
1723
<td class="paramtype">unsigned </td>
1724
<td class="paramname"> <em>pos</em></td><td> </td>
1729
<td></td><td></td><td><code> [inline]</code></td>
1733
<div class="memdoc">
1735
<p>Tests if bit = pos is true. </p>
1736
<dl><dt><b>Parameters:</b></dt><dd>
1737
<table border="0" cellspacing="2" cellpadding="0">
1738
<tr><td valign="top"></td><td valign="top"><em>buf</em> </td><td>- GAP buffer pointer. </td></tr>
1739
<tr><td valign="top"></td><td valign="top"><em>pos</em> </td><td>- index of the element. </td></tr>
1743
<dl class="return"><dt><b>Returns:</b></dt><dd>true if position is in "1" gap </dd></dl>
1745
<p>Definition at line <a class="el" href="a00093_source.html#l00489">489</a> of file <a class="el" href="a00093_source.html">bmfunc.h</a>.</p>
1747
<p>References <a class="el" href="a00092_source.html#l00050">BM_ASSERT</a>, and <a class="el" href="a00091_source.html#l00071">bm::gap_max_bits</a>.</p>
1749
<p>Referenced by <a class="el" href="a00089_source.html#l01268">bm::combine_sub()</a>, <a class="el" href="a00089_source.html#l01184">bm::combine_xor()</a>, <a class="el" href="a00087_source.html#l01808">bm::bvector< Alloc, MS >::get_bit()</a>, and <a class="el" href="a00103_source.html#l00090">bm::miniset< A, N >::test()</a>.</p>
1753
<a class="anchor" id="gab939656d4ea54fd3868aa236cdb20b82"></a><!-- doxytag: member="bm::gap_xor_to_bitset" ref="gab939656d4ea54fd3868aa236cdb20b82" args="(unsigned *dest, const T *buf)" -->
1754
<div class="memitem">
1755
<div class="memproto">
1756
<div class="memtemplate">
1757
template<typename T > </div>
1758
<table class="memname">
1760
<td class="memname">void bm::gap_xor_to_bitset </td>
1762
<td class="paramtype">unsigned * </td>
1763
<td class="paramname"> <em>dest</em>, </td>
1766
<td class="paramkey"></td>
1768
<td class="paramtype">const T * </td>
1769
<td class="paramname"> <em>buf</em></td><td> </td>
1774
<td></td><td></td><td><code> [inline]</code></td>
1778
<div class="memdoc">
1780
<p>XOR GAP block to bitblock. </p>
1781
<dl><dt><b>Parameters:</b></dt><dd>
1782
<table border="0" cellspacing="2" cellpadding="0">
1783
<tr><td valign="top"></td><td valign="top"><em>dest</em> </td><td>- bitblock buffer pointer. </td></tr>
1784
<tr><td valign="top"></td><td valign="top"><em>buf</em> </td><td>- GAP buffer pointer. </td></tr>
1789
<p>Definition at line <a class="el" href="a00093_source.html#l01498">1498</a> of file <a class="el" href="a00093_source.html">bmfunc.h</a>.</p>
1791
<p>References <a class="el" href="a00092_source.html#l00050">BM_ASSERT</a>, and <a class="el" href="a00093_source.html#l01404">bm::xor_bit_block()</a>.</p>
1795
<a class="anchor" id="ga406952734f1b05962941b32e37b3eb96"></a><!-- doxytag: member="bm::gapcmp" ref="ga406952734f1b05962941b32e37b3eb96" args="(const T *buf1, const T *buf2)" -->
1796
<div class="memitem">
1797
<div class="memproto">
1798
<div class="memtemplate">
1799
template<typename T > </div>
1800
<table class="memname">
1802
<td class="memname">int bm::gapcmp </td>
1804
<td class="paramtype">const T * </td>
1805
<td class="paramname"> <em>buf1</em>, </td>
1808
<td class="paramkey"></td>
1810
<td class="paramtype">const T * </td>
1811
<td class="paramname"> <em>buf2</em></td><td> </td>
1816
<td></td><td></td><td><code> [inline]</code></td>
1820
<div class="memdoc">
1822
<p>Lexicographical comparison of GAP buffers. </p>
1823
<dl><dt><b>Parameters:</b></dt><dd>
1824
<table border="0" cellspacing="2" cellpadding="0">
1825
<tr><td valign="top"></td><td valign="top"><em>buf1</em> </td><td>- First GAP buffer pointer. </td></tr>
1826
<tr><td valign="top"></td><td valign="top"><em>buf2</em> </td><td>- Second GAP buffer pointer. </td></tr>
1830
<dl class="return"><dt><b>Returns:</b></dt><dd><0 - less, =0 - equal, >0 - greater. </dd></dl>
1832
<p>Definition at line <a class="el" href="a00093_source.html#l00841">841</a> of file <a class="el" href="a00093_source.html">bmfunc.h</a>.</p>
1834
<p>Referenced by <a class="el" href="a00087_source.html#l01921">bm::bvector< Alloc, MS >::compare()</a>.</p>
1838
<a class="anchor" id="ga2daff3a0ceda6fef87d3b0e892da5813"></a><!-- doxytag: member="bm::improve_gap_levels" ref="ga2daff3a0ceda6fef87d3b0e892da5813" args="(const T *length, const T *length_end, T *glevel_len)" -->
1839
<div class="memitem">
1840
<div class="memproto">
1841
<div class="memtemplate">
1842
template<typename T > </div>
1843
<table class="memname">
1845
<td class="memname">bool bm::improve_gap_levels </td>
1847
<td class="paramtype">const T * </td>
1848
<td class="paramname"> <em>length</em>, </td>
1851
<td class="paramkey"></td>
1853
<td class="paramtype">const T * </td>
1854
<td class="paramname"> <em>length_end</em>, </td>
1857
<td class="paramkey"></td>
1859
<td class="paramtype">T * </td>
1860
<td class="paramname"> <em>glevel_len</em></td><td> </td>
1865
<td></td><td></td><td><code> [inline]</code></td>
1869
<div class="memdoc">
1871
<p>Finds optimal gap blocks lengths. </p>
1872
<dl><dt><b>Parameters:</b></dt><dd>
1873
<table border="0" cellspacing="2" cellpadding="0">
1874
<tr><td valign="top"></td><td valign="top"><em>length</em> </td><td>- first element of GAP lengths array </td></tr>
1875
<tr><td valign="top"></td><td valign="top"><em>length_end</em> </td><td>- end of the GAP lengths array </td></tr>
1876
<tr><td valign="top"></td><td valign="top"><em>glevel_len</em> </td><td>- destination GAP lengths array </td></tr>
1881
<p>Definition at line <a class="el" href="a00093_source.html#l04591">4591</a> of file <a class="el" href="a00093_source.html">bmfunc.h</a>.</p>
1883
<p>References <a class="el" href="a00092_source.html#l00050">BM_ASSERT</a>, <a class="el" href="a00091_source.html#l00074">bm::gap_levels</a>, <a class="el" href="a00091_source.html#l00070">bm::gap_max_buff_len</a>, and <a class="el" href="a00093_source.html#l04563">bm::gap_overhead()</a>.</p>
1885
<p>Referenced by <a class="el" href="a00087_source.html#l01884">bm::bvector< Alloc, MS >::optimize_gap_size()</a>.</p>
1889
<a class="anchor" id="ga501aa9bf029e7f9ea9518e7003fe5549"></a><!-- doxytag: member="bm::set_gap_level" ref="ga501aa9bf029e7f9ea9518e7003fe5549" args="(T *buf, unsigned level)" -->
1890
<div class="memitem">
1891
<div class="memproto">
1892
<div class="memtemplate">
1893
template<typename T > </div>
1894
<table class="memname">
1896
<td class="memname">void bm::set_gap_level </td>
1898
<td class="paramtype">T * </td>
1899
<td class="paramname"> <em>buf</em>, </td>
1902
<td class="paramkey"></td>
1904
<td class="paramtype">unsigned </td>
1905
<td class="paramname"> <em>level</em></td><td> </td>
1910
<td></td><td></td><td><code> [inline]</code></td>
1914
<div class="memdoc">
1916
<p>Sets GAP block capacity level. </p>
1917
<dl><dt><b>Parameters:</b></dt><dd>
1918
<table border="0" cellspacing="2" cellpadding="0">
1919
<tr><td valign="top"></td><td valign="top"><em>buf</em> </td><td>- GAP buffer pointer. </td></tr>
1920
<tr><td valign="top"></td><td valign="top"><em>level</em> </td><td>new GAP block capacity level. </td></tr>
1925
<p>Definition at line <a class="el" href="a00093_source.html#l02212">2212</a> of file <a class="el" href="a00093_source.html">bmfunc.h</a>.</p>
1927
<p>References <a class="el" href="a00092_source.html#l00050">BM_ASSERT</a>, and <a class="el" href="a00091_source.html#l00074">bm::gap_levels</a>.</p>
1929
<p>Referenced by <a class="el" href="a00096_source.html#l02899">bm::iterator_deserializer< BV, SerialIterator >::deserialize()</a>, and <a class="el" href="a00096_source.html#l01232">bm::deserializer< BV, DEC >::deserialize_gap()</a>.</p>
1934
<hr size="1"/><address style="text-align: right;"><small>Generated on Fri Jan 8 20:09:19 2010 for BitMagic by
404
1935
<a href="http://www.doxygen.org/index.html">
405
1936
<img class="footer" src="doxygen.png" alt="doxygen"/></a> 1.6.1 </small></address>