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><</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>></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><</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>></span> 39<span class=preprocessor>#include</span> <span class=special><</span><span class=identifier>string</span><span class=special>></span> 40<span class=preprocessor>#include</span> <span class=special><</span><span class=identifier>exception</span><span class=special>></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>&</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>&</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>&</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>&</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>"Muuuh!"</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>"Oiiink"</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>&</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>&</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><</span><span class=identifier>animal</span><span class=special>></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><</span><span class=identifier>barn_type</span><span class=special>></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<T>' ... this means you can expect 180 // 181 // T* operator->() 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>-></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>"Betty"</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>"Benny"</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>"Jeltzin"</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>"Hanz"</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>"Mary"</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>"Frederik"</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>()-></span><span class=identifier>name</span><span class=special>()</span> <span class=special>==</span> <span class=string>"Betty"</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>-></span><span class=identifier>name</span><span class=special>()</span> <span class=special>==</span> <span class=string>"Mary"</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>-></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