123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372 |
- <html>
- <head>
- <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
- <title> </title>
- <link rel="stylesheet" href="default.css" type="text/css">
- </head>
- <body>
- <pre><span class=comment>//
- // Boost.Pointer Container
- //
- // Copyright Thorsten Ottosen 2003-2005. Use, modification and
- // distribution is subject to the Boost Software License, Version
- // 1.0. (See accompanying file LICENSE_1_0.txt or copy at
- // http://www.boost.org/LICENSE_1_0.txt)
- //
- // For more information, see http://www.boost.org/libs/ptr_container/
- //
- //
- // This example is intended to get you started.
- // Notice how the smart container
- //
- // 1. takes ownership of objects
- // 2. transfers ownership
- // 3. applies indirection to iterators
- // 4. clones objects from other smart containers
- //
- //
- // First we select which container to use.
- //</span>
- <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>
- <span class=comment>//
- // we need these later in the example
- //</span>
- <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>
- <span class=preprocessor>#include</span> <span class=special><</span><span class=identifier>string</span><span class=special>></span>
- <span class=preprocessor>#include</span> <span class=special><</span><span class=identifier>exception</span><span class=special>></span>
- <span class=comment>//
- // Then we define a small polymorphic class
- // hierarchy.
- //</span>
- <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>
- <span class=special>{</span>
- <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>
- <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>protected</span><span class=special>:</span>
- <span class=comment>//
- // Animals cannot be copied...
- //</span>
- <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>
- <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>
- <span class=keyword>private</span><span class=special>:</span>
- <span class=comment>//
- // ...but due to advances in genetics, we can clone them!
- //</span>
- <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>
-
- <span class=keyword>public</span><span class=special>:</span>
- <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>
- <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>
-
- <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>
- <span class=special>{</span>
- <span class=keyword>return</span> <span class=identifier>do_speak</span><span class=special>();</span>
- <span class=special>}</span>
- <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>
- <span class=special>{</span>
- <span class=keyword>return</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>clone</span><span class=special>()</span> <span class=keyword>const</span>
- <span class=special>{</span>
- <span class=keyword>return</span> <span class=identifier>do_clone</span><span class=special>();</span>
- <span class=special>}</span>
- <span class=special>};</span>
- <span class=comment>//
- // An animal is still not Clonable. We need this last hook.
- //
- // Notice that we pass the animal by const reference
- // and return by pointer.
- //</span>
- <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>
- <span class=special>{</span>
- <span class=keyword>return</span> <span class=identifier>a</span><span class=special>.</span><span class=identifier>clone</span><span class=special>();</span>
- <span class=special>}</span>
- <span class=comment>//
- // We do not need to define 'delete_clone()' since
- // since the default is to call the default 'operator delete()'.
- //</span>
- <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>
- <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>
- <span class=keyword>class</span> <span class=identifier>cow</span> <span class=special>:</span> <span class=keyword>public</span> <span class=identifier>animal</span>
- <span class=special>{</span>
- <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=keyword>return</span> <span class=identifier>muuuh</span><span class=special>;</span>
- <span class=special>}</span>
- <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=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>
- <span class=special>}</span>
- <span class=keyword>public</span><span class=special>:</span>
- <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>
- <span class=special>};</span>
- <span class=keyword>class</span> <span class=identifier>pig</span> <span class=special>:</span> <span class=keyword>public</span> <span class=identifier>animal</span>
- <span class=special>{</span>
- <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=keyword>return</span> <span class=identifier>oiink</span><span class=special>;</span>
- <span class=special>}</span>
- <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=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>
- <span class=special>}</span>
-
- <span class=keyword>public</span><span class=special>:</span>
- <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>
- <span class=special>};</span>
- <span class=comment>//
- // Then we, of course, need a place to put all
- // those animals.
- //</span>
- <span class=keyword>class</span> <span class=identifier>farm</span>
- <span class=special>{</span>
- <span class=comment>//
- // This is where the smart containers are handy
- //</span>
- <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>
- <span class=identifier>barn_type</span> <span class=identifier>barn</span><span class=special>;</span>
- <span class=comment>//
- // A convenience typedef for the compiler-appropriate
- // smart pointer used to manage barns
- //</span>
- <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>
- <span class=comment>//
- // An error type
- //</span>
- <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>
- <span class=keyword>public</span><span class=special>:</span>
- <span class=comment>//
- // We would like to make it possible to
- // iterate over the animals in the farm
- //</span>
- <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>
- <span class=comment>//
- // We also need to count the farm's size...
- //</span>
- <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>
-
- <span class=comment>//
- // And we also want to transfer an animal
- // safely around. The easiest way to think
- // about '::auto_type' is to imagine a simplified
- // 'std::auto_ptr<T>' ... this means you can expect
- //
- // T* operator->()
- // T* release()
- // deleting destructor
- //
- // but not more.
- //</span>
- <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>
- <span class=comment>//
- // Create an empty farm.
- //</span>
- <span class=identifier>farm</span><span class=special>()</span> <span class=special>{</span> <span class=special>}</span>
-
- <span class=comment>//
- // We need a constructor that can make a new
- // farm by cloning a range of animals.
- //</span>
- <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>
- <span class=special>:</span>
- <span class=comment>//
- // Objects are always cloned before insertion
- // unless we explicitly add a pointer or
- // use 'release()'. Therefore we actually
- // clone all animals in the range
- //</span>
- <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>
-
- <span class=comment>//
- // ... so we need some other function too
- //</span>
- <span class=identifier>animal_iterator</span> <span class=identifier>begin</span><span class=special>()</span>
- <span class=special>{</span>
- <span class=keyword>return</span> <span class=identifier>barn</span><span class=special>.</span><span class=identifier>begin</span><span class=special>();</span>
- <span class=special>}</span>
- <span class=identifier>animal_iterator</span> <span class=identifier>end</span><span class=special>()</span>
- <span class=special>{</span>
- <span class=keyword>return</span> <span class=identifier>barn</span><span class=special>.</span><span class=identifier>end</span><span class=special>();</span>
- <span class=special>}</span>
-
- <span class=comment>//
- // Here it is quite ok to have an 'animal*' argument.
- // The smart container will handle all ownership
- // issues.
- //</span>
- <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>
- <span class=special>{</span>
- <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>
- <span class=special>}</span>
- <span class=comment>//
- // The farm can also be in economical trouble and
- // therefore be in the need to sell animals.
- //</span>
- <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>
- <span class=special>{</span>
- <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>
- <span class=keyword>throw</span> <span class=identifier>farm_trouble</span><span class=special>();</span>
- <span class=comment>//
- // Here we remove the animal from the barn,
- // but the animal is not deleted yet...it's
- // up to the buyer to decide what
- // to do with it.
- //</span>
- <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>
- <span class=special>}</span>
- <span class=comment>//
- // How big a farm do we have?
- //</span>
- <span class=identifier>size_type</span> <span class=identifier>size</span><span class=special>()</span> <span class=keyword>const</span>
- <span class=special>{</span>
- <span class=keyword>return</span> <span class=identifier>barn</span><span class=special>.</span><span class=identifier>size</span><span class=special>();</span>
- <span class=special>}</span>
- <span class=comment>//
- // If things are bad, we might choose to sell all animals :-(
- //</span>
- <span class=identifier>raii_ptr</span> <span class=identifier>sell_farm</span><span class=special>()</span>
- <span class=special>{</span>
- <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=special>}</span>
- <span class=comment>//
- // However, if things are good, we might buy somebody
- // else's farm :-)
- //</span>
- <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>
- <span class=special>{</span>
- <span class=comment>//
- // This line inserts all the animals from 'other'
- // and is guaranteed either to succeed or to have no
- // effect
- //</span>
- <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>
- <span class=special>*</span><span class=identifier>other</span> <span class=special>);</span> <span class=comment>// we want to transfer all animals,
- // so we use the whole container as argument
- //
- // You might think you would have to do
- //
- // other.release();
- //
- // but '*other' is empty and can go out of scope as it wants
- //</span>
- <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>
- <span class=special>}</span>
-
- <span class=special>};</span> <span class=comment>// class 'farm'.</span>
- <span class=keyword>int</span> <span class=identifier>main</span><span class=special>()</span>
- <span class=special>{</span>
- <span class=comment>//
- // First we make a farm
- //</span>
- <span class=identifier>farm</span> <span class=identifier>animal_farm</span><span class=special>;</span>
- <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>
-
- <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>
- <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>
- <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>
- <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>
- <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>
- <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>
- <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>
- <span class=comment>//
- // Then we make another farm...it will actually contain
- // a clone of the other farm.
- //</span>
- <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>
- <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>
- <span class=comment>//
- // Is it really clones in the new farm?
- //</span>
- <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>
-
- <span class=comment>//
- // Then we search for an animal, Mary (the Crown Princess of Denmark),
- // because we would like to buy her ...
- //</span>
- <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>
- <span class=identifier>iterator</span> <span class=identifier>to_sell</span><span class=special>;</span>
- <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>
- <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>
- <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>
- <span class=special>{</span>
- <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>
- <span class=special>{</span>
- <span class=identifier>to_sell</span> <span class=special>=</span> <span class=identifier>i</span><span class=special>;</span>
- <span class=keyword>break</span><span class=special>;</span>
- <span class=special>}</span>
- <span class=special>}</span>
- <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>
- <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>
- <span class=comment>//
- // Great, Mary is a cow, and she may live longer
- //</span>
- <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>
- <span class=keyword>else</span>
- <span class=comment>//
- // Then the animal would be destroyed (!)
- // when we go out of scope.
- //</span>
- <span class=special>;</span>
- <span class=comment>//
- // Now we can observe some changes to the two farms...
- //</span>
- <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>
- <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>
- <span class=comment>//
- // The new farm has however underestimated how much
- // it cost to feed Mary and its owner is forced to sell the farm...
- //</span>
- <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>
- <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>
- <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>
- <span class=special>}</span>
- </pre>
- </body>
- </html>
|