]> git.proxmox.com Git - ceph.git/blob - ceph/src/boost/libs/ptr_container/doc/tutorial_example.html
add subtree-ish sources for 12.0.3
[ceph.git] / ceph / src / boost / libs / ptr_container / doc / tutorial_example.html
1 <html>
2 <head>
3 <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
4 <title> </title>
5 <link rel="stylesheet" href="default.css" type="text/css">
6 </head>
7
8 <body>
9 <pre><span class=comment>//
10 // Boost.Pointer Container
11 //
12 // Copyright Thorsten Ottosen 2003-2005. Use, modification and
13 // distribution is subject to the Boost Software License, Version
14 // 1.0. (See accompanying file LICENSE_1_0.txt or copy at
15 // http://www.boost.org/LICENSE_1_0.txt)
16 //
17 // For more information, see http://www.boost.org/libs/ptr_container/
18 //
19
20 //
21 // This example is intended to get you started.
22 // Notice how the smart container
23 //
24 // 1. takes ownership of objects
25 // 2. transfers ownership
26 // 3. applies indirection to iterators
27 // 4. clones objects from other smart containers
28 //
29
30 //
31 // First we select which container to use.
32 //</span>
33 <span class=preprocessor>#include</span> <span class=special>&lt;</span><span class=identifier>boost</span><span class=special>/</span><span class=identifier>ptr_container</span><span class=special>/</span><span class=identifier>ptr_deque</span><span class=special>.</span><span class=identifier>hpp</span><span class=special>&gt;</span>
34
35 <span class=comment>//
36 // we need these later in the example
37 //</span>
38 <span class=preprocessor>#include</span> <span class=special>&lt;</span><span class=identifier>boost</span><span class=special>/</span><span class=identifier>assert</span><span class=special>.</span><span class=identifier>hpp</span><span class=special>&gt;</span>
39 <span class=preprocessor>#include</span> <span class=special>&lt;</span><span class=identifier>string</span><span class=special>&gt;</span>
40 <span class=preprocessor>#include</span> <span class=special>&lt;</span><span class=identifier>exception</span><span class=special>&gt;</span>
41
42
43 <span class=comment>//
44 // Then we define a small polymorphic class
45 // hierarchy.
46 //</span>
47
48 <span class=keyword>class</span> <span class=identifier>animal</span> <span class=special>:</span> <span class=identifier>boost</span><span class=special>::</span><span class=identifier>noncopyable</span>
49 <span class=special>{</span>
50 <span class=keyword>virtual</span> <span class=identifier>std</span><span class=special>::</span><span class=identifier>string</span> <span class=identifier>do_speak</span><span class=special>()</span> <span class=keyword>const</span> <span class=special>=</span> <span class=number>0</span><span class=special>;</span>
51 <span class=identifier>std</span><span class=special>::</span><span class=identifier>string</span> <span class=identifier>name_</span><span class=special>;</span>
52
53 <span class=keyword>protected</span><span class=special>:</span>
54 <span class=comment>//
55 // Animals cannot be copied...
56 //</span>
57 <span class=identifier>animal</span><span class=special>(</span> <span class=keyword>const</span> <span class=identifier>animal</span><span class=special>&amp;</span> <span class=identifier>r</span> <span class=special>)</span> <span class=special>:</span> <span class=identifier>name_</span><span class=special>(</span> <span class=identifier>r</span><span class=special>.</span><span class=identifier>name_</span> <span class=special>)</span> <span class=special>{</span> <span class=special>}</span>
58 <span class=keyword>void</span> <span class=keyword>operator</span><span class=special>=(</span> <span class=keyword>const</span> <span class=identifier>animal</span><span class=special>&amp;</span> <span class=special>);</span>
59
60 <span class=keyword>private</span><span class=special>:</span>
61 <span class=comment>//
62 // ...but due to advances in genetics, we can clone them!
63 //</span>
64
65 <span class=keyword>virtual</span> <span class=identifier>animal</span><span class=special>*</span> <span class=identifier>do_clone</span><span class=special>()</span> <span class=keyword>const</span> <span class=special>=</span> <span class=number>0</span><span class=special>;</span>
66
67 <span class=keyword>public</span><span class=special>:</span>
68 <span class=identifier>animal</span><span class=special>(</span> <span class=keyword>const</span> <span class=identifier>std</span><span class=special>::</span><span class=identifier>string</span><span class=special>&amp;</span> <span class=identifier>name</span> <span class=special>)</span> <span class=special>:</span> <span class=identifier>name_</span><span class=special>(</span><span class=identifier>name</span><span class=special>)</span> <span class=special>{</span> <span class=special>}</span>
69 <span class=keyword>virtual</span> <span class=special>~</span><span class=identifier>animal</span><span class=special>()</span> <span class=keyword>throw</span><span class=special>()</span> <span class=special>{</span> <span class=special>}</span>
70
71 <span class=identifier>std</span><span class=special>::</span><span class=identifier>string</span> <span class=identifier>speak</span><span class=special>()</span> <span class=keyword>const</span>
72 <span class=special>{</span>
73 <span class=keyword>return</span> <span class=identifier>do_speak</span><span class=special>();</span>
74 <span class=special>}</span>
75
76 <span class=identifier>std</span><span class=special>::</span><span class=identifier>string</span> <span class=identifier>name</span><span class=special>()</span> <span class=keyword>const</span>
77 <span class=special>{</span>
78 <span class=keyword>return</span> <span class=identifier>name_</span><span class=special>;</span>
79 <span class=special>}</span>
80
81 <span class=identifier>animal</span><span class=special>*</span> <span class=identifier>clone</span><span class=special>()</span> <span class=keyword>const</span>
82 <span class=special>{</span>
83 <span class=keyword>return</span> <span class=identifier>do_clone</span><span class=special>();</span>
84 <span class=special>}</span>
85 <span class=special>};</span>
86
87 <span class=comment>//
88 // An animal is still not Clonable. We need this last hook.
89 //
90 // Notice that we pass the animal by const reference
91 // and return by pointer.
92 //</span>
93
94 <span class=identifier>animal</span><span class=special>*</span> <span class=identifier>new_clone</span><span class=special>(</span> <span class=keyword>const</span> <span class=identifier>animal</span><span class=special>&amp;</span> <span class=identifier>a</span> <span class=special>)</span>
95 <span class=special>{</span>
96 <span class=keyword>return</span> <span class=identifier>a</span><span class=special>.</span><span class=identifier>clone</span><span class=special>();</span>
97 <span class=special>}</span>
98
99 <span class=comment>//
100 // We do not need to define 'delete_clone()' since
101 // since the default is to call the default 'operator delete()'.
102 //</span>
103
104 <span class=keyword>const</span> <span class=identifier>std</span><span class=special>::</span><span class=identifier>string</span> <span class=identifier>muuuh</span> <span class=special>=</span> <span class=string>&quot;Muuuh!&quot;</span><span class=special>;</span>
105 <span class=keyword>const</span> <span class=identifier>std</span><span class=special>::</span><span class=identifier>string</span> <span class=identifier>oiink</span> <span class=special>=</span> <span class=string>&quot;Oiiink&quot;</span><span class=special>;</span>
106
107 <span class=keyword>class</span> <span class=identifier>cow</span> <span class=special>:</span> <span class=keyword>public</span> <span class=identifier>animal</span>
108 <span class=special>{</span>
109 <span class=keyword>virtual</span> <span class=identifier>std</span><span class=special>::</span><span class=identifier>string</span> <span class=identifier>do_speak</span><span class=special>()</span> <span class=keyword>const</span>
110 <span class=special>{</span>
111 <span class=keyword>return</span> <span class=identifier>muuuh</span><span class=special>;</span>
112 <span class=special>}</span>
113
114 <span class=keyword>virtual</span> <span class=identifier>animal</span><span class=special>*</span> <span class=identifier>do_clone</span><span class=special>()</span> <span class=keyword>const</span>
115 <span class=special>{</span>
116 <span class=keyword>return</span> <span class=keyword>new</span> <span class=identifier>cow</span><span class=special>(</span> <span class=special>*</span><span class=keyword>this</span> <span class=special>);</span>
117 <span class=special>}</span>
118
119 <span class=keyword>public</span><span class=special>:</span>
120 <span class=identifier>cow</span><span class=special>(</span> <span class=keyword>const</span> <span class=identifier>std</span><span class=special>::</span><span class=identifier>string</span><span class=special>&amp;</span> <span class=identifier>name</span> <span class=special>)</span> <span class=special>:</span> <span class=identifier>animal</span><span class=special>(</span><span class=identifier>name</span><span class=special>)</span> <span class=special>{</span> <span class=special>}</span>
121 <span class=special>};</span>
122
123 <span class=keyword>class</span> <span class=identifier>pig</span> <span class=special>:</span> <span class=keyword>public</span> <span class=identifier>animal</span>
124 <span class=special>{</span>
125 <span class=keyword>virtual</span> <span class=identifier>std</span><span class=special>::</span><span class=identifier>string</span> <span class=identifier>do_speak</span><span class=special>()</span> <span class=keyword>const</span>
126 <span class=special>{</span>
127 <span class=keyword>return</span> <span class=identifier>oiink</span><span class=special>;</span>
128 <span class=special>}</span>
129
130 <span class=keyword>virtual</span> <span class=identifier>animal</span><span class=special>*</span> <span class=identifier>do_clone</span><span class=special>()</span> <span class=keyword>const</span>
131 <span class=special>{</span>
132 <span class=keyword>return</span> <span class=keyword>new</span> <span class=identifier>pig</span><span class=special>(</span> <span class=special>*</span><span class=keyword>this</span> <span class=special>);</span>
133 <span class=special>}</span>
134
135 <span class=keyword>public</span><span class=special>:</span>
136 <span class=identifier>pig</span><span class=special>(</span> <span class=keyword>const</span> <span class=identifier>std</span><span class=special>::</span><span class=identifier>string</span><span class=special>&amp;</span> <span class=identifier>name</span> <span class=special>)</span> <span class=special>:</span> <span class=identifier>animal</span><span class=special>(</span><span class=identifier>name</span><span class=special>)</span> <span class=special>{</span> <span class=special>}</span>
137 <span class=special>};</span>
138
139 <span class=comment>//
140 // Then we, of course, need a place to put all
141 // those animals.
142 //</span>
143
144 <span class=keyword>class</span> <span class=identifier>farm</span>
145 <span class=special>{</span>
146 <span class=comment>//
147 // This is where the smart containers are handy
148 //</span>
149 <span class=keyword>typedef</span> <span class=identifier>boost</span><span class=special>::</span><span class=identifier>ptr_deque</span><span class=special>&lt;</span><span class=identifier>animal</span><span class=special>&gt;</span> <span class=identifier>barn_type</span><span class=special>;</span>
150 <span class=identifier>barn_type</span> <span class=identifier>barn</span><span class=special>;</span>
151
152 <span class=comment>//
153 // An error type
154 //</span>
155 <span class=keyword>struct</span> <span class=identifier>farm_trouble</span> <span class=special>:</span> <span class=keyword>public</span> <span class=identifier>std</span><span class=special>::</span><span class=identifier>exception</span> <span class=special>{</span> <span class=special>};</span>
156
157 <span class=keyword>public</span><span class=special>:</span>
158 <span class=comment>//
159 // We would like to make it possible to
160 // iterate over the animals in the farm
161 //</span>
162 <span class=keyword>typedef</span> <span class=identifier>barn_type</span><span class=special>::</span><span class=identifier>iterator</span> <span class=identifier>animal_iterator</span><span class=special>;</span>
163
164 <span class=comment>//
165 // We also need to count the farm's size...
166 //</span>
167 <span class=keyword>typedef</span> <span class=identifier>barn_type</span><span class=special>::</span><span class=identifier>size_type</span> <span class=identifier>size_type</span><span class=special>;</span>
168
169 <span class=comment>//
170 // And we also want to transfer an animal
171 // safely around. The easiest way to think
172 // about '::auto_type' is to imagine a simplified
173 // 'std::auto_ptr&lt;T&gt;' ... this means you can expect
174 //
175 // T* operator-&gt;()
176 // T* release()
177 // deleting destructor
178 //
179 // but not more.
180 //</span>
181 <span class=keyword>typedef</span> <span class=identifier>barn_type</span><span class=special>::</span><span class=identifier>auto_type</span> <span class=identifier>animal_transport</span><span class=special>;</span>
182
183 <span class=comment>//
184 // Create an empty farm.
185 //</span>
186 <span class=identifier>farm</span><span class=special>()</span> <span class=special>{</span> <span class=special>}</span>
187
188 <span class=comment>//
189 // We need a constructor that can make a new
190 // farm by cloning a range of animals.
191 //</span>
192 <span class=identifier>farm</span><span class=special>(</span> <span class=identifier>animal_iterator</span> <span class=identifier>begin</span><span class=special>,</span> <span class=identifier>animal_iterator</span> <span class=identifier>end</span> <span class=special>)</span>
193 <span class=special>:</span>
194 <span class=comment>//
195 // Objects are always cloned before insertion
196 // unless we explicitly add a pointer or
197 // use 'release()'. Therefore we actually
198 // clone all animals in the range
199 //</span>
200 <span class=identifier>barn</span><span class=special>(</span> <span class=identifier>begin</span><span class=special>,</span> <span class=identifier>end</span> <span class=special>)</span> <span class=special>{</span> <span class=special>}</span>
201
202 <span class=comment>//
203 // ... so we need some other function too
204 //</span>
205
206 <span class=identifier>animal_iterator</span> <span class=identifier>begin</span><span class=special>()</span>
207 <span class=special>{</span>
208 <span class=keyword>return</span> <span class=identifier>barn</span><span class=special>.</span><span class=identifier>begin</span><span class=special>();</span>
209 <span class=special>}</span>
210
211 <span class=identifier>animal_iterator</span> <span class=identifier>end</span><span class=special>()</span>
212 <span class=special>{</span>
213 <span class=keyword>return</span> <span class=identifier>barn</span><span class=special>.</span><span class=identifier>end</span><span class=special>();</span>
214 <span class=special>}</span>
215
216 <span class=comment>//
217 // Here it is quite ok to have an 'animal*' argument.
218 // The smart container will handle all ownership
219 // issues.
220 //</span>
221 <span class=keyword>void</span> <span class=identifier>buy_animal</span><span class=special>(</span> <span class=identifier>animal</span><span class=special>*</span> <span class=identifier>a</span> <span class=special>)</span>
222 <span class=special>{</span>
223 <span class=identifier>barn</span><span class=special>.</span><span class=identifier>push_back</span><span class=special>(</span> <span class=identifier>a</span> <span class=special>);</span>
224 <span class=special>}</span>
225
226 <span class=comment>//
227 // The farm can also be in economical trouble and
228 // therefore be in the need to sell animals.
229 //</span>
230 <span class=identifier>animal_transport</span> <span class=identifier>sell_animal</span><span class=special>(</span> <span class=identifier>animal_iterator</span> <span class=identifier>to_sell</span> <span class=special>)</span>
231 <span class=special>{</span>
232 <span class=keyword>if</span><span class=special>(</span> <span class=identifier>to_sell</span> <span class=special>==</span> <span class=identifier>end</span><span class=special>()</span> <span class=special>)</span>
233 <span class=keyword>throw</span> <span class=identifier>farm_trouble</span><span class=special>();</span>
234
235 <span class=comment>//
236 // Here we remove the animal from the barn,
237 // but the animal is not deleted yet...it's
238 // up to the buyer to decide what
239 // to do with it.
240 //</span>
241 <span class=keyword>return</span> <span class=identifier>barn</span><span class=special>.</span><span class=identifier>release</span><span class=special>(</span> <span class=identifier>to_sell</span> <span class=special>);</span>
242 <span class=special>}</span>
243
244 <span class=comment>//
245 // How big a farm do we have?
246 //</span>
247 <span class=identifier>size_type</span> <span class=identifier>size</span><span class=special>()</span> <span class=keyword>const</span>
248 <span class=special>{</span>
249 <span class=keyword>return</span> <span class=identifier>barn</span><span class=special>.</span><span class=identifier>size</span><span class=special>();</span>
250 <span class=special>}</span>
251
252 <span class=comment>//
253 // If things are bad, we might choose to sell all animals :-(
254 //</span>
255 <span class=identifier>std</span><span class=special>::</span><span class=identifier>auto_ptr</span><span class=special>&lt;</span><span class=identifier>barn_type</span><span class=special>&gt;</span> <span class=identifier>sell_farm</span><span class=special>()</span>
256 <span class=special>{</span>
257 <span class=keyword>return</span> <span class=identifier>barn</span><span class=special>.</span><span class=identifier>release</span><span class=special>();</span>
258 <span class=special>}</span>
259
260 <span class=comment>//
261 // However, if things are good, we might buy somebody
262 // else's farm :-)
263 //</span>
264
265 <span class=keyword>void</span> <span class=identifier>buy_farm</span><span class=special>(</span> <span class=identifier>std</span><span class=special>::</span><span class=identifier>auto_ptr</span><span class=special>&lt;</span><span class=identifier>barn_type</span><span class=special>&gt;</span> <span class=identifier>other</span> <span class=special>)</span>
266 <span class=special>{</span>
267 <span class=comment>//
268 // This line inserts all the animals from 'other'
269 // and is guaranteed either to succeed or to have no
270 // effect
271 //</span>
272 <span class=identifier>barn</span><span class=special>.</span><span class=identifier>transfer</span><span class=special>(</span> <span class=identifier>barn</span><span class=special>.</span><span class=identifier>end</span><span class=special>(),</span> <span class=comment>// insert new animals at the end</span>
273 <span class=special>*</span><span class=identifier>other</span> <span class=special>);</span> <span class=comment>// we want to transfer all animals,
274 // so we use the whole container as argument
275 //
276 // You might think you would have to do
277 //
278 // other.release();
279 //
280 // but '*other' is empty and can go out of scope as it wants
281 //</span>
282 <span class=identifier>BOOST_ASSERT</span><span class=special>(</span> <span class=identifier>other</span><span class=special>-&gt;</span><span class=identifier>empty</span><span class=special>()</span> <span class=special>);</span>
283 <span class=special>}</span>
284
285 <span class=special>};</span> <span class=comment>// class 'farm'.</span>
286
287 <span class=keyword>int</span> <span class=identifier>main</span><span class=special>()</span>
288 <span class=special>{</span>
289 <span class=comment>//
290 // First we make a farm
291 //</span>
292 <span class=identifier>farm</span> <span class=identifier>animal_farm</span><span class=special>;</span>
293 <span class=identifier>BOOST_ASSERT</span><span class=special>(</span> <span class=identifier>animal_farm</span><span class=special>.</span><span class=identifier>size</span><span class=special>()</span> <span class=special>==</span> <span class=number>0u</span> <span class=special>);</span>
294
295 <span class=identifier>animal_farm</span><span class=special>.</span><span class=identifier>buy_animal</span><span class=special>(</span> <span class=keyword>new</span> <span class=identifier>pig</span><span class=special>(</span><span class=string>&quot;Betty&quot;</span><span class=special>)</span> <span class=special>);</span>
296 <span class=identifier>animal_farm</span><span class=special>.</span><span class=identifier>buy_animal</span><span class=special>(</span> <span class=keyword>new</span> <span class=identifier>pig</span><span class=special>(</span><span class=string>&quot;Benny&quot;</span><span class=special>)</span> <span class=special>);</span>
297 <span class=identifier>animal_farm</span><span class=special>.</span><span class=identifier>buy_animal</span><span class=special>(</span> <span class=keyword>new</span> <span class=identifier>pig</span><span class=special>(</span><span class=string>&quot;Jeltzin&quot;</span><span class=special>)</span> <span class=special>);</span>
298 <span class=identifier>animal_farm</span><span class=special>.</span><span class=identifier>buy_animal</span><span class=special>(</span> <span class=keyword>new</span> <span class=identifier>cow</span><span class=special>(</span><span class=string>&quot;Hanz&quot;</span><span class=special>)</span> <span class=special>);</span>
299 <span class=identifier>animal_farm</span><span class=special>.</span><span class=identifier>buy_animal</span><span class=special>(</span> <span class=keyword>new</span> <span class=identifier>cow</span><span class=special>(</span><span class=string>&quot;Mary&quot;</span><span class=special>)</span> <span class=special>);</span>
300 <span class=identifier>animal_farm</span><span class=special>.</span><span class=identifier>buy_animal</span><span class=special>(</span> <span class=keyword>new</span> <span class=identifier>cow</span><span class=special>(</span><span class=string>&quot;Frederik&quot;</span><span class=special>)</span> <span class=special>);</span>
301 <span class=identifier>BOOST_ASSERT</span><span class=special>(</span> <span class=identifier>animal_farm</span><span class=special>.</span><span class=identifier>size</span><span class=special>()</span> <span class=special>==</span> <span class=number>6u</span> <span class=special>);</span>
302
303 <span class=comment>//
304 // Then we make another farm...it will actually contain
305 // a clone of the other farm.
306 //</span>
307 <span class=identifier>farm</span> <span class=identifier>new_farm</span><span class=special>(</span> <span class=identifier>animal_farm</span><span class=special>.</span><span class=identifier>begin</span><span class=special>(),</span> <span class=identifier>animal_farm</span><span class=special>.</span><span class=identifier>end</span><span class=special>()</span> <span class=special>);</span>
308 <span class=identifier>BOOST_ASSERT</span><span class=special>(</span> <span class=identifier>new_farm</span><span class=special>.</span><span class=identifier>size</span><span class=special>()</span> <span class=special>==</span> <span class=number>6u</span> <span class=special>);</span>
309
310 <span class=comment>//
311 // Is it really clones in the new farm?
312 //</span>
313 <span class=identifier>BOOST_ASSERT</span><span class=special>(</span> <span class=identifier>new_farm</span><span class=special>.</span><span class=identifier>begin</span><span class=special>()-&gt;</span><span class=identifier>name</span><span class=special>()</span> <span class=special>==</span> <span class=string>&quot;Betty&quot;</span> <span class=special>);</span>
314
315 <span class=comment>//
316 // Then we search for an animal, Mary (the Crown Princess of Denmark),
317 // because we would like to buy her ...
318 //</span>
319 <span class=keyword>typedef</span> <span class=identifier>farm</span><span class=special>::</span><span class=identifier>animal_iterator</span> <span class=identifier>iterator</span><span class=special>;</span>
320 <span class=identifier>iterator</span> <span class=identifier>to_sell</span><span class=special>;</span>
321 <span class=keyword>for</span><span class=special>(</span> <span class=identifier>iterator</span> <span class=identifier>i</span> <span class=special>=</span> <span class=identifier>animal_farm</span><span class=special>.</span><span class=identifier>begin</span><span class=special>(),</span>
322 <span class=identifier>end</span> <span class=special>=</span> <span class=identifier>animal_farm</span><span class=special>.</span><span class=identifier>end</span><span class=special>();</span>
323 <span class=identifier>i</span> <span class=special>!=</span> <span class=identifier>end</span><span class=special>;</span> <span class=special>++</span><span class=identifier>i</span> <span class=special>)</span>
324 <span class=special>{</span>
325 <span class=keyword>if</span><span class=special>(</span> <span class=identifier>i</span><span class=special>-&gt;</span><span class=identifier>name</span><span class=special>()</span> <span class=special>==</span> <span class=string>&quot;Mary&quot;</span> <span class=special>)</span>
326 <span class=special>{</span>
327 <span class=identifier>to_sell</span> <span class=special>=</span> <span class=identifier>i</span><span class=special>;</span>
328 <span class=keyword>break</span><span class=special>;</span>
329 <span class=special>}</span>
330 <span class=special>}</span>
331
332 <span class=identifier>farm</span><span class=special>::</span><span class=identifier>animal_transport</span> <span class=identifier>mary</span> <span class=special>=</span> <span class=identifier>animal_farm</span><span class=special>.</span><span class=identifier>sell_animal</span><span class=special>(</span> <span class=identifier>to_sell</span> <span class=special>);</span>
333
334
335 <span class=keyword>if</span><span class=special>(</span> <span class=identifier>mary</span><span class=special>-&gt;</span><span class=identifier>speak</span><span class=special>()</span> <span class=special>==</span> <span class=identifier>muuuh</span> <span class=special>)</span>
336 <span class=comment>//
337 // Great, Mary is a cow, and she may live longer
338 //</span>
339 <span class=identifier>new_farm</span><span class=special>.</span><span class=identifier>buy_animal</span><span class=special>(</span> <span class=identifier>mary</span><span class=special>.</span><span class=identifier>release</span><span class=special>()</span> <span class=special>);</span>
340 <span class=keyword>else</span>
341 <span class=comment>//
342 // Then the animal would be destroyed (!)
343 // when we go out of scope.
344 //</span>
345 <span class=special>;</span>
346
347 <span class=comment>//
348 // Now we can observe some changes to the two farms...
349 //</span>
350 <span class=identifier>BOOST_ASSERT</span><span class=special>(</span> <span class=identifier>animal_farm</span><span class=special>.</span><span class=identifier>size</span><span class=special>()</span> <span class=special>==</span> <span class=number>5u</span> <span class=special>);</span>
351 <span class=identifier>BOOST_ASSERT</span><span class=special>(</span> <span class=identifier>new_farm</span><span class=special>.</span><span class=identifier>size</span><span class=special>()</span> <span class=special>==</span> <span class=number>7u</span> <span class=special>);</span>
352
353 <span class=comment>//
354 // The new farm has however underestimated how much
355 // it cost to feed Mary and its owner is forced to sell the farm...
356 //</span>
357 <span class=identifier>animal_farm</span><span class=special>.</span><span class=identifier>buy_farm</span><span class=special>(</span> <span class=identifier>new_farm</span><span class=special>.</span><span class=identifier>sell_farm</span><span class=special>()</span> <span class=special>);</span>
358
359 <span class=identifier>BOOST_ASSERT</span><span class=special>(</span> <span class=identifier>new_farm</span><span class=special>.</span><span class=identifier>size</span><span class=special>()</span> <span class=special>==</span> <span class=number>0u</span> <span class=special>);</span>
360 <span class=identifier>BOOST_ASSERT</span><span class=special>(</span> <span class=identifier>animal_farm</span><span class=special>.</span><span class=identifier>size</span><span class=special>()</span> <span class=special>==</span> <span class=number>12u</span> <span class=special>);</span>
361 <span class=special>}</span>
362 </pre>
363 </body>
364
365 </html>