1
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
2
<html><head><meta http-equiv="Content-Type" content="text/html;charset=UTF-8">
3
<title>BitMagic: sample8.cpp Source File</title>
4
<link href="doxygen.css" rel="stylesheet" type="text/css">
5
<link href="tabs.css" rel="stylesheet" type="text/css">
7
<!-- Generated by Doxygen 1.5.5 -->
1
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
2
<html xmlns="http://www.w3.org/1999/xhtml">
4
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
5
<title>BitMagic: bvector serialization</title>
6
<link href="tabs.css" rel="stylesheet" type="text/css"/>
7
<link href="doxygen.css" rel="stylesheet" type="text/css"/>
10
<!-- Generated by Doxygen 1.6.1 -->
8
11
<div class="navigation" id="top">
11
14
<li><a href="index.html"><span>Main Page</span></a></li>
12
15
<li><a href="modules.html"><span>Modules</span></a></li>
13
16
<li><a href="namespaces.html"><span>Namespaces</span></a></li>
14
<li><a href="classes.html"><span>Data Structures</span></a></li>
15
<li class="current"><a href="files.html"><span>Files</span></a></li>
17
<li><a href="annotated.html"><span>Data Structures</span></a></li>
18
<li><a href="files.html"><span>Files</span></a></li>
16
19
<li><a href="examples.html"><span>Examples</span></a></li>
19
<h1>sample8.cpp</h1><a href="a00104.html">Go to the documentation of this file.</a><div class="fragment"><pre class="fragment"><a name="l00001"></a>00001 <span class="comment">/*</span>
20
<a name="l00002"></a>00002 <span class="comment">Copyright(c) 2002-2005 Anatoliy Kuznetsov(anatoliy_kuznetsov at yahoo.com)</span>
21
<a name="l00003"></a>00003 <span class="comment"></span>
22
<a name="l00004"></a>00004 <span class="comment">Permission is hereby granted, free of charge, to any person </span>
23
<a name="l00005"></a>00005 <span class="comment">obtaining a copy of this software and associated documentation </span>
24
<a name="l00006"></a>00006 <span class="comment">files (the "Software"), to deal in the Software without restriction, </span>
25
<a name="l00007"></a>00007 <span class="comment">including without limitation the rights to use, copy, modify, merge, </span>
26
<a name="l00008"></a>00008 <span class="comment">publish, distribute, sublicense, and/or sell copies of the Software, </span>
27
<a name="l00009"></a>00009 <span class="comment">and to permit persons to whom the Software is furnished to do so, </span>
28
<a name="l00010"></a>00010 <span class="comment">subject to the following conditions:</span>
29
<a name="l00011"></a>00011 <span class="comment"></span>
30
<a name="l00012"></a>00012 <span class="comment">The above copyright notice and this permission notice shall be included </span>
31
<a name="l00013"></a>00013 <span class="comment">in all copies or substantial portions of the Software.</span>
32
<a name="l00014"></a>00014 <span class="comment"></span>
33
<a name="l00015"></a>00015 <span class="comment">THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, </span>
34
<a name="l00016"></a>00016 <span class="comment">EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES </span>
35
<a name="l00017"></a>00017 <span class="comment">OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. </span>
36
<a name="l00018"></a>00018 <span class="comment">IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, </span>
37
<a name="l00019"></a>00019 <span class="comment">DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, </span>
38
<a name="l00020"></a>00020 <span class="comment">ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR </span>
39
<a name="l00021"></a>00021 <span class="comment">OTHER DEALINGS IN THE SOFTWARE.</span>
40
<a name="l00022"></a>00022 <span class="comment">*/</span>
41
<a name="l00023"></a>00023 <span class="comment"></span>
42
<a name="l00024"></a>00024 <span class="comment">/** \example sample8.cpp</span>
43
<a name="l00025"></a>00025 <span class="comment"></span>
44
<a name="l00026"></a>00026 <span class="comment"> Example demonstrates some STL compatability set operations using</span>
45
<a name="l00027"></a>00027 <span class="comment"> set iterators.</span>
46
<a name="l00028"></a>00028 <span class="comment"> </span>
47
<a name="l00029"></a>00029 <span class="comment"> \sa bm::bvector<>::enumerator </span>
48
<a name="l00030"></a>00030 <span class="comment"> \sa bm::bvector<>::insert_iterator</span>
49
<a name="l00031"></a>00031 <span class="comment"></span>
50
<a name="l00032"></a>00032 <span class="comment"> For more information please visit: http://bmagic.sourceforge.net</span>
51
<a name="l00033"></a>00033 <span class="comment"></span>
52
<a name="l00034"></a>00034 <span class="comment">*/</span>
53
<a name="l00035"></a>00035
54
<a name="l00036"></a>00036 <span class="preprocessor">#include <iostream></span>
55
<a name="l00037"></a>00037 <span class="preprocessor">#include <algorithm></span>
56
<a name="l00038"></a>00038 <span class="preprocessor">#include <vector></span>
57
<a name="l00039"></a>00039 <span class="preprocessor">#include <list></span>
58
<a name="l00040"></a>00040
59
<a name="l00041"></a>00041 <span class="keyword">using</span> std::vector;
60
<a name="l00042"></a>00042 <span class="keyword">using</span> std::list;
61
<a name="l00043"></a>00043
62
<a name="l00044"></a>00044 <span class="comment">// This example requires STL compatibility</span>
63
<a name="l00045"></a>00045 <span class="preprocessor">#ifdef BM_NO_STL</span>
64
<a name="l00046"></a>00046 <span class="preprocessor"></span><span class="preprocessor"># undef BM_NO_STL</span>
65
<a name="l00047"></a>00047 <span class="preprocessor"></span><span class="preprocessor">#endif</span>
66
<a name="l00048"></a>00048 <span class="preprocessor"></span>
67
<a name="l00049"></a>00049 <span class="preprocessor">#include "<a class="code" href="a00082.html">bm.h</a>"</span>
68
<a name="l00050"></a>00050
69
<a name="l00051"></a>00051 <span class="keyword">using namespace </span>std;
70
<a name="l00052"></a>00052
71
<a name="l00053"></a><a class="code" href="a00104.html#80085d7c877f4c6f36d10c67dc163845">00053</a> <span class="keywordtype">void</span> <a class="code" href="a00101.html#80085d7c877f4c6f36d10c67dc163845">Print</a>(<span class="keywordtype">unsigned</span> n)
72
<a name="l00054"></a>00054 {
73
<a name="l00055"></a>00055 cout << n << endl;;
74
<a name="l00056"></a>00056 }
75
<a name="l00057"></a>00057
76
<a name="l00058"></a>00058 <span class="comment">// Utility template function used to print container</span>
77
<a name="l00059"></a><a class="code" href="a00104.html#b7f435443f8dbf9f50e4ad0efea8b1f8">00059</a> <span class="keyword">template</span><<span class="keyword">class</span> T> <span class="keywordtype">void</span> <a class="code" href="a00104.html#b7f435443f8dbf9f50e4ad0efea8b1f8">PrintContainer</a>(T first, T last)
78
<a name="l00060"></a>00060 {
79
<a name="l00061"></a>00061 <span class="keywordflow">if</span> (first == last)
80
<a name="l00062"></a>00062 cout << <span class="stringliteral">"<EMPTY SET>"</span>;
81
<a name="l00063"></a>00063 <span class="keywordflow">else</span>
82
<a name="l00064"></a>00064 <span class="keywordflow">for</span>(;first != last; ++first)
83
<a name="l00065"></a>00065 cout << *first << <span class="stringliteral">";"</span>;
84
<a name="l00066"></a>00066 cout << endl;
85
<a name="l00067"></a>00067 }
86
<a name="l00068"></a>00068
87
<a name="l00069"></a><a class="code" href="a00104.html#840291bc02cba5474a4cb46a9b9566fe">00069</a> <span class="keywordtype">int</span> <a class="code" href="a00097.html#840291bc02cba5474a4cb46a9b9566fe">main</a>(<span class="keywordtype">void</span>)
88
<a name="l00070"></a>00070 {
89
<a name="l00071"></a>00071 <a class="code" href="a00040.html" title="bitvector with runtime compression of bits.">bm::bvector<></a> bv;
90
<a name="l00072"></a>00072
91
<a name="l00073"></a>00073 bv[10] = <span class="keyword">true</span>;
92
<a name="l00074"></a>00074 bv[100] = <span class="keyword">true</span>;
93
<a name="l00075"></a>00075 bv[10000] = <span class="keyword">true</span>;
94
<a name="l00076"></a>00076
95
<a name="l00077"></a>00077 cout << <span class="stringliteral">"Source set:"</span>;
96
<a name="l00078"></a>00078 <a class="code" href="a00104.html#b7f435443f8dbf9f50e4ad0efea8b1f8">PrintContainer</a>(bv.<a class="code" href="a00040.html#ad48c661f843e32c9893438a6f27a8f0" title="Returns enumerator pointing on the first non-zero bit.">first</a>(), bv.<a class="code" href="a00040.html#2c6e522f858fdc466765d2c0f269f590" title="Returns enumerator pointing on the next bit after the last.">end</a>());
97
<a name="l00079"></a>00079
98
<a name="l00080"></a>00080 <span class="comment">// copy all bitset information into STL vector using copy algorithm</span>
99
<a name="l00081"></a>00081 {
100
<a name="l00082"></a>00082 vector<unsigned> vect;
101
<a name="l00083"></a>00083 vect.resize(bv.<a class="code" href="a00040.html#71077c1315555301532e24d4d2b95ea2" title="Returns count of bits which are 1.">count</a>());
102
<a name="l00084"></a>00084 std::copy(bv.<a class="code" href="a00040.html#ad48c661f843e32c9893438a6f27a8f0" title="Returns enumerator pointing on the first non-zero bit.">first</a>(), bv.<a class="code" href="a00040.html#2c6e522f858fdc466765d2c0f269f590" title="Returns enumerator pointing on the next bit after the last.">end</a>(), vect.begin());
103
<a name="l00085"></a>00085 cout << <span class="stringliteral">"Vector:"</span>;
104
<a name="l00086"></a>00086 <a class="code" href="a00104.html#b7f435443f8dbf9f50e4ad0efea8b1f8">PrintContainer</a>(vect.begin(), vect.end());
105
<a name="l00087"></a>00087 }
106
<a name="l00088"></a>00088
107
<a name="l00089"></a>00089 <span class="comment">// doing the same with the help of back_inserter</span>
108
<a name="l00090"></a>00090
109
<a name="l00091"></a>00091 {
110
<a name="l00092"></a>00092 list<unsigned> lst;
111
<a name="l00093"></a>00093 std::copy(bv.<a class="code" href="a00040.html#ad48c661f843e32c9893438a6f27a8f0" title="Returns enumerator pointing on the first non-zero bit.">first</a>(), bv.<a class="code" href="a00040.html#2c6e522f858fdc466765d2c0f269f590" title="Returns enumerator pointing on the next bit after the last.">end</a>(), std::back_inserter(lst));
112
<a name="l00094"></a>00094 cout << <span class="stringliteral">"List:"</span>;
113
<a name="l00095"></a>00095 <a class="code" href="a00104.html#b7f435443f8dbf9f50e4ad0efea8b1f8">PrintContainer</a>(lst.begin(), lst.end());
114
<a name="l00096"></a>00096 }
115
<a name="l00097"></a>00097
116
<a name="l00098"></a>00098 {
117
<a name="l00099"></a>00099 vector<unsigned> vect;
118
<a name="l00100"></a>00100 vector<unsigned> res1, res2, res3;
119
<a name="l00101"></a>00101
120
<a name="l00102"></a>00102 vect.push_back(100);
121
<a name="l00103"></a>00103 vect.push_back(15);
122
<a name="l00104"></a>00104 vect.push_back(150);
123
<a name="l00105"></a>00105
124
<a name="l00106"></a>00106 cout << <span class="stringliteral">"Argument vector for set operations:"</span>;
125
<a name="l00107"></a>00107 <a class="code" href="a00104.html#b7f435443f8dbf9f50e4ad0efea8b1f8">PrintContainer</a>(vect.begin(), vect.end());
126
<a name="l00108"></a>00108
127
<a name="l00109"></a>00109 <span class="comment">// set should be ordered by < to make set algorithms possible</span>
128
<a name="l00110"></a>00110 std::sort(vect.begin(), vect.end());
129
<a name="l00111"></a>00111 cout << endl;
130
<a name="l00112"></a>00112
131
<a name="l00113"></a>00113 std::set_union(bv.<a class="code" href="a00040.html#ad48c661f843e32c9893438a6f27a8f0" title="Returns enumerator pointing on the first non-zero bit.">first</a>(), bv.<a class="code" href="a00040.html#2c6e522f858fdc466765d2c0f269f590" title="Returns enumerator pointing on the next bit after the last.">end</a>(),
132
<a name="l00114"></a>00114 vect.begin(), vect.end(),
133
<a name="l00115"></a>00115 std::back_inserter(res1)); <span class="comment">//10;15;100;150;10000</span>
134
<a name="l00116"></a>00116 cout << <span class="stringliteral">"Set union:"</span> << endl;
135
<a name="l00117"></a>00117 <a class="code" href="a00104.html#b7f435443f8dbf9f50e4ad0efea8b1f8">PrintContainer</a>(res1.begin(), res1.end());
136
<a name="l00118"></a>00118
137
<a name="l00119"></a>00119 std::set_intersection(bv.<a class="code" href="a00040.html#ad48c661f843e32c9893438a6f27a8f0" title="Returns enumerator pointing on the first non-zero bit.">first</a>(), bv.<a class="code" href="a00040.html#2c6e522f858fdc466765d2c0f269f590" title="Returns enumerator pointing on the next bit after the last.">end</a>(),
138
<a name="l00120"></a>00120 vect.begin(), vect.end(),
139
<a name="l00121"></a>00121 std::back_inserter(res2)); <span class="comment">// 100</span>
140
<a name="l00122"></a>00122 cout << <span class="stringliteral">"Set intersection:"</span> << endl;
141
<a name="l00123"></a>00123 <a class="code" href="a00104.html#b7f435443f8dbf9f50e4ad0efea8b1f8">PrintContainer</a>(res2.begin(), res2.end());
142
<a name="l00124"></a>00124
143
<a name="l00125"></a>00125 vector<unsigned>::const_iterator it1 = vect.begin();
144
<a name="l00126"></a>00126 vector<unsigned>::const_iterator it2 = vect.end();
145
<a name="l00127"></a>00127 <a class="code" href="a00040.html" title="bitvector with runtime compression of bits.">bm::bvector<>::enumerator</a> en = bv.<a class="code" href="a00040.html#ad48c661f843e32c9893438a6f27a8f0" title="Returns enumerator pointing on the first non-zero bit.">first</a>();
146
<a name="l00128"></a>00128 <a class="code" href="a00040.html" title="bitvector with runtime compression of bits.">bm::bvector<>::enumerator</a> en2= bv.<a class="code" href="a00040.html#2c6e522f858fdc466765d2c0f269f590" title="Returns enumerator pointing on the next bit after the last.">end</a>();
147
<a name="l00129"></a>00129
148
<a name="l00130"></a>00130 std::set_difference(en, en2,
149
<a name="l00131"></a>00131 it1, it2,
150
<a name="l00132"></a>00132 std::back_inserter(res3)); <span class="comment">// 10;10000</span>
151
<a name="l00133"></a>00133
152
<a name="l00134"></a>00134 cout << <span class="stringliteral">"Set diff:"</span> << endl;
153
<a name="l00135"></a>00135 <a class="code" href="a00104.html#b7f435443f8dbf9f50e4ad0efea8b1f8">PrintContainer</a>(res3.begin(), res3.end());
154
<a name="l00136"></a>00136
155
<a name="l00137"></a>00137 }
156
<a name="l00138"></a>00138
157
<a name="l00139"></a>00139 <span class="comment">// Using bvector<>::insert_iterator to set bits</span>
158
<a name="l00140"></a>00140 {
159
<a name="l00141"></a>00141 <a class="code" href="a00040.html" title="bitvector with runtime compression of bits.">bm::bvector<></a> bv1;
160
<a name="l00142"></a>00142 std::vector<unsigned> vect;
161
<a name="l00143"></a>00143
162
<a name="l00144"></a>00144 vect.push_back(300);
163
<a name="l00145"></a>00145 vect.push_back(200);
164
<a name="l00146"></a>00146 vect.push_back(275);
165
<a name="l00147"></a>00147 vect.push_back(200);
166
<a name="l00148"></a>00148
167
<a name="l00149"></a>00149 cout << endl << <span class="stringliteral">"Source vector:"</span>;
168
<a name="l00150"></a>00150 <a class="code" href="a00104.html#b7f435443f8dbf9f50e4ad0efea8b1f8">PrintContainer</a>(vect.begin(), vect.end()); <span class="comment">// 300;200;275;200;</span>
169
<a name="l00151"></a>00151
170
<a name="l00152"></a>00152 <span class="comment">// The "side effect" of this operation is that we sorted</span>
171
<a name="l00153"></a>00153 <span class="comment">// the input sequence and eliminated duplicates</span>
172
<a name="l00154"></a>00154
173
<a name="l00155"></a>00155 std::copy(vect.begin(), vect.end(), bv1.<a class="code" href="a00040.html#da0d32bbd1a135722a7790b13d866451">inserter</a>());
174
<a name="l00156"></a>00156 cout << <span class="stringliteral">"Bitset:"</span>;
175
<a name="l00157"></a>00157
176
<a name="l00158"></a>00158 <a class="code" href="a00104.html#b7f435443f8dbf9f50e4ad0efea8b1f8">PrintContainer</a>(bv1.<a class="code" href="a00040.html#ad48c661f843e32c9893438a6f27a8f0" title="Returns enumerator pointing on the first non-zero bit.">first</a>(), bv1.<a class="code" href="a00040.html#2c6e522f858fdc466765d2c0f269f590" title="Returns enumerator pointing on the next bit after the last.">end</a>()); <span class="comment">// 200;275;300</span>
177
<a name="l00159"></a>00159 }
178
<a name="l00160"></a>00160
179
<a name="l00161"></a>00161
180
<a name="l00162"></a>00162 <span class="keywordflow">return</span> 0;
181
<a name="l00163"></a>00163 }
182
<a name="l00164"></a>00164
184
<hr size="1"><address style="text-align: right;"><small>Generated on Mon Oct 12 12:16:39 2009 for BitMagic by
23
<div class="contents">
24
<h1>bvector serialization<br/>
26
[<a class="el" href="a00117.html">BitMagic C++ Library</a>]</small>
28
<p><div class="dynheader">
29
Collaboration diagram for bvector serialization:</div>
30
<div class="dynsection">
31
<center><table><tr><td><img src="a00126.png" border="0" alt="" usemap="#a00126_map"/>
32
<map name="a00126_map" id="a00126">
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
<table border="0" cellpadding="0" cellspacing="0">
37
<tr><td colspan="2"><h2>Data Structures</h2></td></tr>
38
<tr><td class="memItemLeft" align="right" valign="top">class </td><td class="memItemRight" valign="bottom"><a class="el" href="a00083.html">bm::serializer< BV ></a></td></tr>
39
<tr><td class="mdescLeft"> </td><td class="mdescRight">Bit-vector serialization class. <a href="a00083.html#_details">More...</a><br/></td></tr>
40
<tr><td class="memItemLeft" align="right" valign="top">class </td><td class="memItemRight" valign="bottom"><a class="el" href="a00058.html">bm::deseriaizer_base< DEC ></a></td></tr>
41
<tr><td class="mdescLeft"> </td><td class="mdescRight">Base deserialization class. <a href="a00058.html#_details">More...</a><br/></td></tr>
42
<tr><td class="memItemLeft" align="right" valign="top">class </td><td class="memItemRight" valign="bottom"><a class="el" href="a00059.html">bm::deserializer< BV, DEC ></a></td></tr>
43
<tr><td class="mdescLeft"> </td><td class="mdescRight">Class <a class="el" href="a00059.html" title="Class deserializer.">deserializer</a>. <a href="a00059.html#_details">More...</a><br/></td></tr>
44
<tr><td class="memItemLeft" align="right" valign="top">class </td><td class="memItemRight" valign="bottom"><a class="el" href="a00082.html">bm::serial_stream_iterator< DEC ></a></td></tr>
45
<tr><td class="mdescLeft"> </td><td class="mdescRight">Serialization stream iterator. <a href="a00082.html#_details">More...</a><br/></td></tr>
46
<tr><td class="memItemLeft" align="right" valign="top">class </td><td class="memItemRight" valign="bottom"><a class="el" href="a00076.html">bm::operation_deserializer< BV ></a></td></tr>
47
<tr><td class="mdescLeft"> </td><td class="mdescRight">Class <a class="el" href="a00059.html" title="Class deserializer.">deserializer</a>, can perform logical operation on bit-vector and serialized bit-vector. <a href="a00076.html#_details">More...</a><br/></td></tr>
48
<tr><td colspan="2"><h2>Enumerations</h2></td></tr>
49
<tr><td class="memItemLeft" align="right" valign="top">enum </td><td class="memItemRight" valign="bottom"><a class="el" href="a00126.html#ga537dfe6318f1f1fe18d86dac312be978">bm::serialization_flags</a> { <a class="el" href="a00126.html#gga537dfe6318f1f1fe18d86dac312be978acdd8c071c079589388c3ca7bd4f367c8">bm::BM_NO_BYTE_ORDER</a> = 1,
50
<a class="el" href="a00126.html#gga537dfe6318f1f1fe18d86dac312be978a5521473081d341bc32ac59538e6a8096">bm::BM_NO_GAP_LENGTH</a> = (1 << 1)
52
<tr><td class="mdescLeft"> </td><td class="mdescRight"><p>Bit mask flags for serialization algorithm. </p>
53
<a href="a00126.html#ga537dfe6318f1f1fe18d86dac312be978">More...</a><br/></td></tr>
54
<tr><td colspan="2"><h2>Functions</h2></td></tr>
55
<tr><td class="memTemplParams" colspan="2">template<class BV > </td></tr>
56
<tr><td class="memTemplItemLeft" align="right" valign="top">unsigned </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00126.html#ga5210c3bda57254ef2e8c71e23306cc88">bm::serialize</a> (const BV &bv, unsigned char *buf, <a class="el" href="a00115.html#a17fd5ba52db3ddda05e6f8dd5000a1a4">bm::word_t</a> *temp_block, unsigned serialization_flags=0)</td></tr>
57
<tr><td class="mdescLeft"> </td><td class="mdescRight">Saves bitvector into memory. <a href="#ga5210c3bda57254ef2e8c71e23306cc88"></a><br/></td></tr>
58
<tr><td class="memTemplParams" colspan="2">template<class BV > </td></tr>
59
<tr><td class="memTemplItemLeft" align="right" valign="top">unsigned </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00126.html#ga213033b5cc6add74aa4bd1d614b56192">bm::serialize</a> (BV &bv, unsigned char *buf, unsigned serialization_flags=0)</td></tr>
60
<tr><td class="mdescLeft"> </td><td class="mdescRight">Saves bitvector into memory. Allocates temporary memory block for <a class="el" href="a00044.html" title="bitvector with runtime compression of bits.">bvector</a>. <a href="#ga213033b5cc6add74aa4bd1d614b56192"></a><br/></td></tr>
61
<tr><td class="memTemplParams" colspan="2">template<class BV > </td></tr>
62
<tr><td class="memTemplItemLeft" align="right" valign="top">unsigned </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00126.html#gafbe633db8da3d867f098468269fd8d3d">bm::deserialize</a> (BV &bv, const unsigned char *buf, <a class="el" href="a00115.html#a17fd5ba52db3ddda05e6f8dd5000a1a4">bm::word_t</a> *temp_block=0)</td></tr>
63
<tr><td class="mdescLeft"> </td><td class="mdescRight">Bitvector deserialization from memory. <a href="#gafbe633db8da3d867f098468269fd8d3d"></a><br/></td></tr>
65
<hr/><a name="_details"></a><h2>Detailed Description</h2>
66
<p>bvector serialization </p>
67
<hr/><h2>Enumeration Type Documentation</h2>
68
<a class="anchor" id="ga537dfe6318f1f1fe18d86dac312be978"></a><!-- doxytag: member="bm::serialization_flags" ref="ga537dfe6318f1f1fe18d86dac312be978" args="" -->
70
<div class="memproto">
71
<table class="memname">
73
<td class="memname">enum <a class="el" href="a00126.html#ga537dfe6318f1f1fe18d86dac312be978">bm::serialization_flags</a></td>
79
<p>Bit mask flags for serialization algorithm. </p>
80
<dl><dt><b>Enumerator: </b></dt><dd><table border="0" cellspacing="2" cellpadding="0">
81
<tr><td valign="top"><em><a class="anchor" id="gga537dfe6318f1f1fe18d86dac312be978acdd8c071c079589388c3ca7bd4f367c8"></a><!-- doxytag: member="BM_NO_BYTE_ORDER" ref="gga537dfe6318f1f1fe18d86dac312be978acdd8c071c079589388c3ca7bd4f367c8" args="" -->BM_NO_BYTE_ORDER</em> </td><td>
82
<p>save no byte-order info (save some space) </p>
84
<tr><td valign="top"><em><a class="anchor" id="gga537dfe6318f1f1fe18d86dac312be978a5521473081d341bc32ac59538e6a8096"></a><!-- doxytag: member="BM_NO_GAP_LENGTH" ref="gga537dfe6318f1f1fe18d86dac312be978a5521473081d341bc32ac59538e6a8096" args="" -->BM_NO_GAP_LENGTH</em> </td><td>
85
<p>save no GAP info (save some space) </p>
91
<p>Definition at line <a class="el" href="a00096_source.html#l00981">981</a> of file <a class="el" href="a00096_source.html">bmserial.h</a>.</p>
95
<hr/><h2>Function Documentation</h2>
96
<a class="anchor" id="gafbe633db8da3d867f098468269fd8d3d"></a><!-- doxytag: member="bm::deserialize" ref="gafbe633db8da3d867f098468269fd8d3d" args="(BV &bv, const unsigned char *buf, bm::word_t *temp_block=0)" -->
98
<div class="memproto">
99
<div class="memtemplate">
100
template<class BV > </div>
101
<table class="memname">
103
<td class="memname">unsigned bm::deserialize </td>
105
<td class="paramtype">BV & </td>
106
<td class="paramname"> <em>bv</em>, </td>
109
<td class="paramkey"></td>
111
<td class="paramtype">const unsigned char * </td>
112
<td class="paramname"> <em>buf</em>, </td>
115
<td class="paramkey"></td>
117
<td class="paramtype"><a class="el" href="a00115.html#a17fd5ba52db3ddda05e6f8dd5000a1a4">bm::word_t</a> * </td>
118
<td class="paramname"> <em>temp_block</em> = <code>0</code></td><td> </td>
123
<td></td><td></td><td><code> [inline]</code></td>
129
<p>Bitvector deserialization from memory. </p>
130
<dl><dt><b>Parameters:</b></dt><dd>
131
<table border="0" cellspacing="2" cellpadding="0">
132
<tr><td valign="top"></td><td valign="top"><em>buf</em> </td><td>- pointer on memory which keeps serialized <a class="el" href="a00044.html" title="bitvector with runtime compression of bits.">bvector</a> </td></tr>
133
<tr><td valign="top"></td><td valign="top"><em>temp_block</em> </td><td>- pointer on temporary block, if NULL <a class="el" href="a00044.html" title="bitvector with runtime compression of bits.">bvector</a> allocates own. </td></tr>
137
<dl class="return"><dt><b>Returns:</b></dt><dd>Number of bytes consumed by <a class="el" href="a00059.html" title="Class deserializer.">deserializer</a>.</dd></dl>
138
<p>Function desrializes bitvector from memory block containig results of previous serialization. Function does not remove bits which are currently set. Effectively it means OR logical operation between current bitset and previously serialized one. </p>
139
<dl><dt><b>Examples: </b></dt><dd><a class="el" href="a00004.html#a21">sample4.cpp</a>.</dd>
141
<p>Definition at line <a class="el" href="a00096_source.html#l01090">1090</a> of file <a class="el" href="a00096_source.html">bmserial.h</a>.</p>
143
<p>References <a class="el" href="a00093_source.html#l00399">bm::BigEndian</a>, <a class="el" href="a00092_source.html#l00050">BM_ASSERT</a>, <a class="el" href="a00096_source.html#l00099">bm::BM_HM_NO_BO</a>, <a class="el" href="a00093_source.html#l00441">bm::globals< T >::byte_order()</a>, <a class="el" href="a00096_source.html#l01453">bm::deserializer< BV, DEC >::deserialize()</a>, <a class="el" href="a00104_source.html#l00079">bm::decoder_base::get_8()</a>, and <a class="el" href="a00093_source.html#l00400">bm::LittleEndian</a>.</p>
145
<p>Referenced by <a class="el" href="a00109_source.html#l00107">main()</a>.</p>
149
<a class="anchor" id="ga213033b5cc6add74aa4bd1d614b56192"></a><!-- doxytag: member="bm::serialize" ref="ga213033b5cc6add74aa4bd1d614b56192" args="(BV &bv, unsigned char *buf, unsigned serialization_flags=0)" -->
150
<div class="memitem">
151
<div class="memproto">
152
<div class="memtemplate">
153
template<class BV > </div>
154
<table class="memname">
156
<td class="memname">unsigned bm::serialize </td>
158
<td class="paramtype">BV & </td>
159
<td class="paramname"> <em>bv</em>, </td>
162
<td class="paramkey"></td>
164
<td class="paramtype">unsigned char * </td>
165
<td class="paramname"> <em>buf</em>, </td>
168
<td class="paramkey"></td>
170
<td class="paramtype">unsigned </td>
171
<td class="paramname"> <em>serialization_flags</em> = <code>0</code></td><td> </td>
176
<td></td><td></td><td><code> [inline]</code></td>
182
<p>Saves bitvector into memory. Allocates temporary memory block for <a class="el" href="a00044.html" title="bitvector with runtime compression of bits.">bvector</a>. </p>
184
<p>Definition at line <a class="el" href="a00096_source.html#l01054">1054</a> of file <a class="el" href="a00096_source.html">bmserial.h</a>.</p>
186
<p>References <a class="el" href="a00096_source.html#l00982">bm::BM_NO_BYTE_ORDER</a>, <a class="el" href="a00096_source.html#l00983">bm::BM_NO_GAP_LENGTH</a>, <a class="el" href="a00096_source.html#l00524">bm::serializer< BV >::byte_order_serialization()</a>, <a class="el" href="a00096_source.html#l00518">bm::serializer< BV >::gap_length_serialization()</a>, <a class="el" href="a00096_source.html#l00758">bm::serializer< BV >::serialize()</a>, and <a class="el" href="a00096_source.html#l00499">bm::serializer< BV >::set_compression_level()</a>.</p>
190
<a class="anchor" id="ga5210c3bda57254ef2e8c71e23306cc88"></a><!-- doxytag: member="bm::serialize" ref="ga5210c3bda57254ef2e8c71e23306cc88" args="(const BV &bv, unsigned char *buf, bm::word_t *temp_block, unsigned serialization_flags=0)" -->
191
<div class="memitem">
192
<div class="memproto">
193
<div class="memtemplate">
194
template<class BV > </div>
195
<table class="memname">
197
<td class="memname">unsigned bm::serialize </td>
199
<td class="paramtype">const BV & </td>
200
<td class="paramname"> <em>bv</em>, </td>
203
<td class="paramkey"></td>
205
<td class="paramtype">unsigned char * </td>
206
<td class="paramname"> <em>buf</em>, </td>
209
<td class="paramkey"></td>
211
<td class="paramtype"><a class="el" href="a00115.html#a17fd5ba52db3ddda05e6f8dd5000a1a4">bm::word_t</a> * </td>
212
<td class="paramname"> <em>temp_block</em>, </td>
215
<td class="paramkey"></td>
217
<td class="paramtype">unsigned </td>
218
<td class="paramname"> <em>serialization_flags</em> = <code>0</code></td><td> </td>
223
<td></td><td></td><td><code> [inline]</code></td>
229
<p>Saves bitvector into memory. </p>
230
<p>Function serializes content of the bitvector into memory. Serialization adaptively uses compression(variation of GAP encoding) when it is benefitial.</p>
231
<dl><dt><b>Parameters:</b></dt><dd>
232
<table border="0" cellspacing="2" cellpadding="0">
233
<tr><td valign="top"></td><td valign="top"><em>buf</em> </td><td>- pointer on target memory area. No range checking in the function. It is responsibility of programmer to allocate sufficient amount of memory using information from calc_stat function.</td></tr>
234
<tr><td valign="top"></td><td valign="top"><em>temp_block</em> </td><td>- pointer on temporary memory block. Cannot be 0; If you want to save memory across multiple bvectors allocate temporary block using allocate_tempblock and pass it to serialize. (Of course serialize does not deallocate temp_block.)</td></tr>
235
<tr><td valign="top"></td><td valign="top"><em>serialization_flags</em> </td><td>Flags controlling serilization (bit-mask) (use OR-ed serialization flags)</td></tr>
239
<dl class="return"><dt><b>Returns:</b></dt><dd>Size of serialization block. </dd></dl>
240
<dl class="see"><dt><b>See also:</b></dt><dd>calc_stat, <a class="el" href="a00126.html#ga537dfe6318f1f1fe18d86dac312be978" title="Bit mask flags for serialization algorithm.">serialization_flags</a> </dd></dl>
242
<p>Definition at line <a class="el" href="a00096_source.html#l01028">1028</a> of file <a class="el" href="a00096_source.html">bmserial.h</a>.</p>
244
<p>References <a class="el" href="a00096_source.html#l00982">bm::BM_NO_BYTE_ORDER</a>, <a class="el" href="a00096_source.html#l00983">bm::BM_NO_GAP_LENGTH</a>, <a class="el" href="a00096_source.html#l00524">bm::serializer< BV >::byte_order_serialization()</a>, <a class="el" href="a00096_source.html#l00518">bm::serializer< BV >::gap_length_serialization()</a>, <a class="el" href="a00096_source.html#l00758">bm::serializer< BV >::serialize()</a>, and <a class="el" href="a00096_source.html#l00499">bm::serializer< BV >::set_compression_level()</a>.</p>
249
<hr size="1"/><address style="text-align: right;"><small>Generated on Fri Jan 8 20:09:20 2010 for BitMagic by
185
250
<a href="http://www.doxygen.org/index.html">
186
<img src="doxygen.png" alt="doxygen" align="middle" border="0"></a> 1.5.5 </small></address>
251
<img class="footer" src="doxygen.png" alt="doxygen"/></a> 1.6.1 </small></address>