69
69
<span class="comment">// If you do not disable bits in pointer the second template parameter of bvector</span>
70
70
<span class="comment">// is simply ignored and portion of this example is becoming irrelevant.</span>
71
71
<span class="preprocessor">#define BM_DISBALE_BIT_IN_PTR</span>
72
<span class="preprocessor"></span><span class="preprocessor">#include "<a class="code" href="a00087.html">bm.h</a>"</span>
72
<span class="preprocessor"></span><span class="preprocessor">#include "<a class="code" href="a00088.html">bm.h</a>"</span>
74
74
<span class="keyword">using namespace </span>std;
80
80
<a name="_a2"></a><a class="code" href="a00075.html" title="Template class implements memory saving set functionality.">bm::miniset<bm::block_allocator, bm::set_total_blocks></a> > <a class="code" href="a00044.html" title="bitvector with runtime compression of bits.">bvect</a>;
83
<span class="keyword">const</span> <span class="keywordtype">unsigned</span> <a name="a3"></a><a class="code" href="a00112.html#a2508b4033cfced61642ad9358d67dd2a">setscount</a> = 10000;
84
<span class="keyword">const</span> <span class="keywordtype">unsigned</span> <a name="a4"></a><a class="code" href="a00112.html#a0be29ed34efa43589f6c14e4e9f5dbc4">randombits</a> = 150;
85
<span class="keyword">const</span> <span class="keywordtype">unsigned</span> <a name="a5"></a><a class="code" href="a00112.html#a1b239e2f0f190ff4df0b359f8b601644">maxbit</a> = 100000000;
83
<span class="keyword">const</span> <span class="keywordtype">unsigned</span> <a name="a3"></a><a class="code" href="a00113.html#a2508b4033cfced61642ad9358d67dd2a">setscount</a> = 10000;
84
<span class="keyword">const</span> <span class="keywordtype">unsigned</span> <a name="a4"></a><a class="code" href="a00113.html#a0be29ed34efa43589f6c14e4e9f5dbc4">randombits</a> = 150;
85
<span class="keyword">const</span> <span class="keywordtype">unsigned</span> <a name="a5"></a><a class="code" href="a00113.html#a1b239e2f0f190ff4df0b359f8b601644">maxbit</a> = 100000000;
87
<a class="code" href="a00044.html" title="bitvector with runtime compression of bits.">bvect</a>* <a name="a6"></a><a class="code" href="a00112.html#aef9a3bedb74930ffc25d49f7ac4ba1eb">bitsets</a>[<a class="code" href="a00112.html#a2508b4033cfced61642ad9358d67dd2a">setscount</a>];
87
<a class="code" href="a00044.html" title="bitvector with runtime compression of bits.">bvect</a>* <a name="a6"></a><a class="code" href="a00113.html#aef9a3bedb74930ffc25d49f7ac4ba1eb">bitsets</a>[<a class="code" href="a00113.html#a2508b4033cfced61642ad9358d67dd2a">setscount</a>];
89
89
<span class="comment">// ---------------------------------------------------------</span>
91
<span class="keywordtype">void</span> <a name="a7"></a><a class="code" href="a00112.html#adb34fb3c04bbc949324b069298b6ad60">CreateSets</a>()
91
<span class="keywordtype">void</span> <a name="a7"></a><a class="code" href="a00113.html#adb34fb3c04bbc949324b069298b6ad60">CreateSets</a>()
93
93
<span class="keywordtype">unsigned</span> mu = 0;
94
<span class="keywordflow">for</span> (<span class="keywordtype">unsigned</span> i = 0; i < <a class="code" href="a00112.html#a2508b4033cfced61642ad9358d67dd2a">setscount</a>; ++i)
94
<span class="keywordflow">for</span> (<span class="keywordtype">unsigned</span> i = 0; i < <a class="code" href="a00113.html#a2508b4033cfced61642ad9358d67dd2a">setscount</a>; ++i)
96
96
<span class="keywordflow">if</span> ((i % 100) == 0) { cout << <span class="stringliteral">"."</span>; cout.flush(); }
97
97
<span class="comment">// create bitvector using in GAP mode using an alternative</span>
98
98
<span class="comment">// GAP levels table (minimalistic).</span>
100
<span class="keyword">new</span> <a name="a8"></a><a class="code" href="a00111.html#ac07bb102df543a0c581493c5f35b2129">bvect</a>(<a name="a9"></a><a class="code" href="a00118.html#ggad0b87b3b7292383a864d27feaf1c9effa7fe09d1d7c62a813db922c396c0cbc9c" title="GAP compression is ON.">bm::BM_GAP</a>, <a name="_a10"></a><a class="code" href="a00068.html" title="Alternative GAP lengths table. Good for for memory saver mode and very sparse bitsets...">bm::gap_len_table_min<true>::_len</a>, <a class="code" href="a00112.html#a1b239e2f0f190ff4df0b359f8b601644">maxbit</a>);
100
<span class="keyword">new</span> <a name="a8"></a><a class="code" href="a00112.html#ac07bb102df543a0c581493c5f35b2129">bvect</a>(<a name="a9"></a><a class="code" href="a00119.html#ggad0b87b3b7292383a864d27feaf1c9effa7fe09d1d7c62a813db922c396c0cbc9c" title="GAP compression is ON.">bm::BM_GAP</a>, <a name="_a10"></a><a class="code" href="a00068.html" title="Alternative GAP lengths table. Good for for memory saver mode and very sparse bitsets...">bm::gap_len_table_min<true>::_len</a>, <a class="code" href="a00113.html#a1b239e2f0f190ff4df0b359f8b601644">maxbit</a>);
101
101
<a class="code" href="a00044.html" title="bitvector with runtime compression of bits.">bvect</a>& bv = *bitsets[i];
102
<a name="_a11"></a><a class="code" href="a00085.html" title="Statistical information about bitset&#39;s memory allocation details.">bvect::statistics</a> st;
102
<a name="_a11"></a><a class="code" href="a00086.html" title="Statistical information about bitset&#39;s memory allocation details.">bvect::statistics</a> st;
103
103
bv.<a name="a12"></a><a class="code" href="a00044.html#a1eaaac76a97b9eb1d3c11f21cf9385ac" title="Calculates bitvector statistics.">calc_stat</a>(&st);
104
104
mu += st.<a name="a13"></a><a class="code" href="a00043.html#ad3b2190eb4afe24ecd56323cbc0a7666" title="Memory used by bitvector including temp and service blocks.">memory_used</a>;
110
110
<span class="comment">// ---------------------------------------------------------</span>
112
<span class="keywordtype">void</span> <a name="a14"></a><a class="code" href="a00112.html#a8b36b27c3c40d9e559c078673a3a4dc9">FillSets</a>()
112
<span class="keywordtype">void</span> <a name="a14"></a><a class="code" href="a00113.html#a8b36b27c3c40d9e559c078673a3a4dc9">FillSets</a>()
114
114
<span class="keywordtype">unsigned</span> mu, bit_blocks, gap_blocks;
115
115
cout << <span class="stringliteral">"Filling sets..."</span>;
116
116
mu = bit_blocks = gap_blocks = 0;
117
<span class="keywordflow">for</span> (<span class="keywordtype">unsigned</span> i = 0; i < <a class="code" href="a00112.html#a2508b4033cfced61642ad9358d67dd2a">setscount</a>; ++i)
117
<span class="keywordflow">for</span> (<span class="keywordtype">unsigned</span> i = 0; i < <a class="code" href="a00113.html#a2508b4033cfced61642ad9358d67dd2a">setscount</a>; ++i)
119
119
<span class="keywordflow">if</span> ((i % 100) == 0) { cout << <span class="stringliteral">"."</span>; cout.flush(); }
120
120
<span class="keywordflow">if</span> ((i % 3) == 0) <span class="keywordflow">continue</span>;
121
121
<a class="code" href="a00044.html" title="bitvector with runtime compression of bits.">bvect</a>& bv = *bitsets[i];
122
122
<span class="keywordtype">unsigned</span> bn = 0;
123
<span class="keywordflow">for</span> (<span class="keywordtype">unsigned</span> j = 0; j < <a class="code" href="a00112.html#a0be29ed34efa43589f6c14e4e9f5dbc4">randombits</a>; j+=3)
123
<span class="keywordflow">for</span> (<span class="keywordtype">unsigned</span> j = 0; j < <a class="code" href="a00113.html#a0be29ed34efa43589f6c14e4e9f5dbc4">randombits</a>; j+=3)
125
bn += (<a class="code" href="a00112.html#a1b239e2f0f190ff4df0b359f8b601644">maxbit</a> / randombits) + rand() % 10;
126
<span class="keywordflow">if</span> (bn > <a class="code" href="a00112.html#a1b239e2f0f190ff4df0b359f8b601644">maxbit</a>) bn = rand() % <a class="code" href="a00112.html#a1b239e2f0f190ff4df0b359f8b601644">maxbit</a>;
125
bn += (<a class="code" href="a00113.html#a1b239e2f0f190ff4df0b359f8b601644">maxbit</a> / randombits) + rand() % 10;
126
<span class="keywordflow">if</span> (bn > <a class="code" href="a00113.html#a1b239e2f0f190ff4df0b359f8b601644">maxbit</a>) bn = rand() % <a class="code" href="a00113.html#a1b239e2f0f190ff4df0b359f8b601644">maxbit</a>;
128
128
bv[bn] = <span class="keyword">true</span>;
129
129
bv[bn+1] = <span class="keyword">true</span>;
130
130
bv[bn+2] = <span class="keyword">true</span>;
132
<a class="code" href="a00085.html" title="Statistical information about bitset&#39;s memory allocation details.">bvect::statistics</a> st;
132
<a class="code" href="a00086.html" title="Statistical information about bitset&#39;s memory allocation details.">bvect::statistics</a> st;
133
133
bv.<a class="code" href="a00044.html#a1eaaac76a97b9eb1d3c11f21cf9385ac" title="Calculates bitvector statistics.">calc_stat</a>(&st);
134
134
mu += st.<a class="code" href="a00043.html#ad3b2190eb4afe24ecd56323cbc0a7666" title="Memory used by bitvector including temp and service blocks.">memory_used</a>;
135
135
bit_blocks += st.<a name="a15"></a><a class="code" href="a00043.html#a4ec8ba190b4ba31c431c008402881c62" title="Number of bit blocks.">bit_blocks</a>;
144
144
<span class="comment">// ---------------------------------------------------------</span>
146
<span class="keywordtype">void</span> <a name="a17"></a><a class="code" href="a00112.html#a5cb27a7766b9e7c1ea79b2741714b404">EnumerateSets</a>()
146
<span class="keywordtype">void</span> <a name="a17"></a><a class="code" href="a00113.html#a5cb27a7766b9e7c1ea79b2741714b404">EnumerateSets</a>()
148
148
cout << <span class="stringliteral">"Enumerating sets..."</span>;
149
149
<span class="keywordtype">unsigned</span> bitcnt = 0;
166
166
<span class="comment">// ---------------------------------------------------------</span>
168
<span class="keywordtype">void</span> <a name="a21"></a><a class="code" href="a00112.html#aa777f579687be6096cdbb8b2d70baf6e">DestroySets</a>()
168
<span class="keywordtype">void</span> <a name="a21"></a><a class="code" href="a00113.html#aa777f579687be6096cdbb8b2d70baf6e">DestroySets</a>()
170
170
<span class="keywordflow">for</span> (<span class="keywordtype">unsigned</span> i = 0; i < setscount; ++i)
176
176
<span class="comment">// ---------------------------------------------------------</span>
178
<span class="keywordtype">void</span> <a name="a22"></a><a class="code" href="a00112.html#a1bdd608971ec7ea3d5c76cf21c7d92e7">OrSets</a>()
178
<span class="keywordtype">void</span> <a name="a22"></a><a class="code" href="a00113.html#a1bdd608971ec7ea3d5c76cf21c7d92e7">OrSets</a>()
180
180
<a class="code" href="a00044.html" title="bitvector with runtime compression of bits.">bvect</a> res;
181
181
cout << <span class="stringliteral">"Calculating Or..."</span>;
196
<span class="keywordtype">int</span> <a name="a24"></a><a class="code" href="a00105.html#a840291bc02cba5474a4cb46a9b9566fe">main</a>(<span class="keywordtype">void</span>)
196
<span class="keywordtype">int</span> <a name="a24"></a><a class="code" href="a00106.html#a840291bc02cba5474a4cb46a9b9566fe">main</a>(<span class="keywordtype">void</span>)
198
198
time_t start_time = time(0);
200
<a class="code" href="a00112.html#adb34fb3c04bbc949324b069298b6ad60">CreateSets</a>();
201
<a class="code" href="a00112.html#a8b36b27c3c40d9e559c078673a3a4dc9">FillSets</a>();
202
<a class="code" href="a00112.html#a5cb27a7766b9e7c1ea79b2741714b404">EnumerateSets</a>();
203
<a class="code" href="a00112.html#a1bdd608971ec7ea3d5c76cf21c7d92e7">OrSets</a>();
200
<a class="code" href="a00113.html#adb34fb3c04bbc949324b069298b6ad60">CreateSets</a>();
201
<a class="code" href="a00113.html#a8b36b27c3c40d9e559c078673a3a4dc9">FillSets</a>();
202
<a class="code" href="a00113.html#a5cb27a7766b9e7c1ea79b2741714b404">EnumerateSets</a>();
203
<a class="code" href="a00113.html#a1bdd608971ec7ea3d5c76cf21c7d92e7">OrSets</a>();
205
205
time_t end_time = time(0);
206
206
<span class="keywordtype">unsigned</span> elapsed = unsigned(end_time - start_time);
214
214
cout << <span class="stringliteral">"Time = "</span> << (end_time - start_time) << endl;
215
215
cout << <span class="stringliteral">"Operations per second:"</span> << ops << endl;
217
<a class="code" href="a00112.html#aa777f579687be6096cdbb8b2d70baf6e">DestroySets</a>();
217
<a class="code" href="a00113.html#aa777f579687be6096cdbb8b2d70baf6e">DestroySets</a>();
219
219
<span class="keywordflow">return</span> 0;
223
223
</pre></div> </div>
224
<hr size="1"/><address style="text-align: right;"><small>Generated on Fri Jan 8 20:09:19 2010 for BitMagic by
224
<hr size="1"/><address style="text-align: right;"><small>Generated on Tue Mar 23 20:47:54 2010 for BitMagic by
225
225
<a href="http://www.doxygen.org/index.html">
226
226
<img class="footer" src="doxygen.png" alt="doxygen"/></a> 1.6.1 </small></address>