| 
									
										
										
										
											2004-01-12 20:58:22 +00:00
										 |  |  | // Copyright David Abrahams 2004. 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)
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | #include "node_iterator3.hpp"
 | 
					
						
							|  |  |  | #include <string>
 | 
					
						
							|  |  |  | #include <memory>
 | 
					
						
							|  |  |  | #include <iostream>
 | 
					
						
							|  |  |  | #include <algorithm>
 | 
					
						
							|  |  |  | #include <boost/mem_fn.hpp>
 | 
					
						
							|  |  |  | #include <cassert>
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | int main() | 
					
						
							|  |  |  | { | 
					
						
							| 
									
										
										
										
											2017-08-26 15:04:47 -04:00
										 |  |  | 
 | 
					
						
							|  |  |  | #if defined(BOOST_NO_CXX11_SMART_PTR)
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2004-01-12 20:58:22 +00:00
										 |  |  |     std::auto_ptr<node<int> > nodes(new node<int>(42)); | 
					
						
							| 
									
										
										
										
											2017-08-26 15:04:47 -04:00
										 |  |  |      | 
					
						
							|  |  |  | #else
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     std::unique_ptr<node<int> > nodes(new node<int>(42)); | 
					
						
							|  |  |  |      | 
					
						
							|  |  |  | #endif
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2004-01-12 20:58:22 +00:00
										 |  |  |     nodes->append(new node<std::string>(" is greater than ")); | 
					
						
							|  |  |  |     nodes->append(new node<int>(13)); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     // Check interoperability
 | 
					
						
							|  |  |  |     assert(node_iterator(nodes.get()) == node_const_iterator(nodes.get())); | 
					
						
							|  |  |  |     assert(node_const_iterator(nodes.get()) == node_iterator(nodes.get())); | 
					
						
							|  |  |  |      | 
					
						
							|  |  |  |     assert(node_iterator(nodes.get()) != node_const_iterator()); | 
					
						
							|  |  |  |     assert(node_const_iterator(nodes.get()) != node_iterator()); | 
					
						
							|  |  |  |      | 
					
						
							|  |  |  |     std::copy( | 
					
						
							|  |  |  |         node_iterator(nodes.get()), node_iterator() | 
					
						
							|  |  |  |       , std::ostream_iterator<node_base>(std::cout, " ") | 
					
						
							|  |  |  |     ); | 
					
						
							|  |  |  |     std::cout << std::endl; | 
					
						
							|  |  |  |      | 
					
						
							|  |  |  |     std::for_each( | 
					
						
							|  |  |  |         node_iterator(nodes.get()), node_iterator() | 
					
						
							|  |  |  |       , boost::mem_fn(&node_base::double_me) | 
					
						
							|  |  |  |     ); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     std::copy( | 
					
						
							|  |  |  |         node_const_iterator(nodes.get()), node_const_iterator() | 
					
						
							|  |  |  |       , std::ostream_iterator<node_base>(std::cout, "/") | 
					
						
							|  |  |  |     ); | 
					
						
							|  |  |  |     std::cout << std::endl; | 
					
						
							|  |  |  |     return 0; | 
					
						
							|  |  |  | } |