• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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    // A convenience typedef for the compiler-appropriate
154    // smart pointer used to manage barns
155    //</span>
156    <span class=keyword>typedef</span> <span class=identifier><a href="compatible_smart_ptr.html"><em>compatible-smart-ptr</em></a></span><span class=special>&lt;</span><span class=identifier>barn_type</span><span class=special>&gt;</span> <span class=identifier>raii_ptr</span><span class=special>;</span>
157
158    <span class=comment>//
159    // An error type
160    //</span>
161    <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>
162
163<span class=keyword>public</span><span class=special>:</span>
164    <span class=comment>//
165    // We would like to make it possible to
166    // iterate over the animals in the farm
167    //</span>
168    <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>
169
170    <span class=comment>//
171    // We also need to count the farm's size...
172    //</span>
173    <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>
174
175    <span class=comment>//
176    // And we also want to transfer an animal
177    // safely around. The easiest way to think
178    // about '::auto_type' is to imagine a simplified
179    // 'std::auto_ptr&lt;T&gt;' ... this means you can expect
180    //
181    //   T* operator-&gt;()
182    //   T* release()
183    //   deleting destructor
184    //
185    // but not more.
186    //</span>
187    <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>
188
189    <span class=comment>//
190    // Create an empty farm.
191    //</span>
192    <span class=identifier>farm</span><span class=special>()</span>                                                 <span class=special>{</span> <span class=special>}</span>
193
194    <span class=comment>//
195    // We need a constructor that can make a new
196    // farm by cloning a range of animals.
197    //</span>
198    <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>
199     <span class=special>:</span>
200        <span class=comment>//
201        // Objects are always cloned before insertion
202        // unless we explicitly add a pointer or
203        // use 'release()'. Therefore we actually
204        // clone all animals in the range
205        //</span>
206        <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>
207
208    <span class=comment>//
209    // ... so we need some other function too
210    //</span>
211
212    <span class=identifier>animal_iterator</span> <span class=identifier>begin</span><span class=special>()</span>
213    <span class=special>{</span>
214        <span class=keyword>return</span> <span class=identifier>barn</span><span class=special>.</span><span class=identifier>begin</span><span class=special>();</span>
215    <span class=special>}</span>
216
217    <span class=identifier>animal_iterator</span> <span class=identifier>end</span><span class=special>()</span>
218    <span class=special>{</span>
219        <span class=keyword>return</span> <span class=identifier>barn</span><span class=special>.</span><span class=identifier>end</span><span class=special>();</span>
220    <span class=special>}</span>
221
222    <span class=comment>//
223    // Here it is quite ok to have an 'animal*' argument.
224    // The smart container will handle all ownership
225    // issues.
226    //</span>
227    <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>
228    <span class=special>{</span>
229        <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>
230    <span class=special>}</span>
231
232    <span class=comment>//
233    // The farm can also be in economical trouble and
234    // therefore be in the need to sell animals.
235    //</span>
236    <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>
237    <span class=special>{</span>
238        <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>
239            <span class=keyword>throw</span> <span class=identifier>farm_trouble</span><span class=special>();</span>
240
241        <span class=comment>//
242        // Here we remove the animal from the barn,
243        // but the animal is not deleted yet...it's
244        // up to the buyer to decide what
245        // to do with it.
246        //</span>
247        <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>
248    <span class=special>}</span>
249
250    <span class=comment>//
251    // How big a farm do we have?
252    //</span>
253    <span class=identifier>size_type</span> <span class=identifier>size</span><span class=special>()</span> <span class=keyword>const</span>
254    <span class=special>{</span>
255        <span class=keyword>return</span> <span class=identifier>barn</span><span class=special>.</span><span class=identifier>size</span><span class=special>();</span>
256    <span class=special>}</span>
257
258    <span class=comment>//
259    // If things are bad, we might choose to sell all animals :-(
260      //</span>
261
262    <span class=identifier>raii_ptr</span> <span class=identifier>sell_farm</span><span class=special>()</span>
263    <span class=special>{</span>
264        <span class=keyword>return</span> <span class=identifier>barn</span><span class=special>.</span><span class=identifier>release</span><span class=special>();</span>
265    <span class=special>}</span>
266
267    <span class=comment>//
268    // However, if things are good, we might buy somebody
269    // else's farm :-)
270    //</span>
271
272    <span class=keyword>void</span> <span class=identifier>buy_farm</span><span class=special>(</span> <span class=identifier>raii_ptr</span> <span class=identifier>other</span> <span class=special>)</span>
273    <span class=special>{</span>
274        <span class=comment>//
275        // This line inserts all the animals from 'other'
276        // and is guaranteed either to succeed or to have no
277        // effect
278        //</span>
279        <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>
280                         <span class=special>*</span><span class=identifier>other</span> <span class=special>);</span>     <span class=comment>// we want to transfer all animals,
281                                       // so we use the whole container as argument
282        //
283        // You might think you would have to do
284        //
285        // other.release();
286        //
287        // but '*other' is empty and can go out of scope as it wants
288        //</span>
289        <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>
290    <span class=special>}</span>
291
292<span class=special>};</span> <span class=comment>// class 'farm'.</span>
293
294<span class=keyword>int</span> <span class=identifier>main</span><span class=special>()</span>
295<span class=special>{</span>
296    <span class=comment>//
297    // First we make a farm
298    //</span>
299    <span class=identifier>farm</span> <span class=identifier>animal_farm</span><span class=special>;</span>
300    <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>
301
302    <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>
303    <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>
304    <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>
305    <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>
306    <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>
307    <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>
308    <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>
309
310    <span class=comment>//
311    // Then we make another farm...it will actually contain
312    // a clone of the other farm.
313    //</span>
314    <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>
315    <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>
316
317    <span class=comment>//
318    // Is it really clones in the new farm?
319    //</span>
320    <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>
321
322    <span class=comment>//
323    // Then we search for an animal, Mary (the Crown Princess of Denmark),
324    // because we would like to buy her ...
325    //</span>
326    <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>
327    <span class=identifier>iterator</span> <span class=identifier>to_sell</span><span class=special>;</span>
328    <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>
329                  <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>
330         <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>
331    <span class=special>{</span>
332        <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>
333        <span class=special>{</span>
334            <span class=identifier>to_sell</span> <span class=special>=</span> <span class=identifier>i</span><span class=special>;</span>
335            <span class=keyword>break</span><span class=special>;</span>
336        <span class=special>}</span>
337    <span class=special>}</span>
338
339    <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>
340
341
342    <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>
343        <span class=comment>//
344        // Great, Mary is a cow, and she may live longer
345        //</span>
346        <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>
347    <span class=keyword>else</span>
348        <span class=comment>//
349        // Then the animal would be destroyed (!)
350        // when we go out of scope.
351        //</span>
352        <span class=special>;</span>
353
354    <span class=comment>//
355    // Now we can observe some changes to the two farms...
356    //</span>
357    <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>
358    <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>
359
360    <span class=comment>//
361    // The new farm has however underestimated how much
362    // it cost to feed Mary and its owner is forced to sell the farm...
363    //</span>
364    <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>
365
366    <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>
367    <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>
368<span class=special>}</span>
369</pre>
370</body>
371
372</html>
373