| 
									
										
										
										
											2002-09-05 14:05:29 +00:00
										 |  |  | // (C) Copyright Ronald Garcia 2002. Permission to copy, use, modify, sell and
 | 
					
						
							|  |  |  | // distribute this software is granted provided this copyright notice appears
 | 
					
						
							|  |  |  | // in all copies. This software is provided "as is" without express or implied
 | 
					
						
							|  |  |  | // warranty, and with no claim as to its suitability for any purpose.
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2002-12-27 16:51:53 +00:00
										 |  |  | // See http://www.boost.org/libs/utility/shared_container_iterator.html for documentation.
 | 
					
						
							| 
									
										
										
										
											2002-09-05 14:05:29 +00:00
										 |  |  | 
 | 
					
						
							|  |  |  | #ifndef SHARED_CONTAINER_ITERATOR_RG08102002_HPP
 | 
					
						
							|  |  |  | #define SHARED_CONTAINER_ITERATOR_RG08102002_HPP
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | #include "boost/iterator_adaptors.hpp"
 | 
					
						
							|  |  |  | #include "boost/shared_ptr.hpp"
 | 
					
						
							|  |  |  | #include <utility>
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | namespace boost { | 
					
						
							| 
									
										
										
										
											2014-07-03 00:22:45 +04:00
										 |  |  | namespace iterators { | 
					
						
							| 
									
										
										
										
											2002-09-05 14:05:29 +00:00
										 |  |  | 
 | 
					
						
							|  |  |  | template <typename Container> | 
					
						
							| 
									
										
										
										
											2003-08-11 16:29:47 +00:00
										 |  |  | class shared_container_iterator : public iterator_adaptor< | 
					
						
							|  |  |  |                                     shared_container_iterator<Container>, | 
					
						
							|  |  |  |                                     typename Container::iterator> { | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   typedef iterator_adaptor< | 
					
						
							|  |  |  |     shared_container_iterator<Container>, | 
					
						
							|  |  |  |     typename Container::iterator> super_t; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   typedef typename Container::iterator iterator_t; | 
					
						
							| 
									
										
										
										
											2002-09-05 14:05:29 +00:00
										 |  |  |   typedef boost::shared_ptr<Container> container_ref_t; | 
					
						
							| 
									
										
										
										
											2003-08-11 16:29:47 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2002-09-05 14:05:29 +00:00
										 |  |  |   container_ref_t container_ref; | 
					
						
							| 
									
										
										
										
											2003-08-11 16:29:47 +00:00
										 |  |  | public: | 
					
						
							|  |  |  |   shared_container_iterator() { } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   shared_container_iterator(iterator_t const& x,container_ref_t const& c) : | 
					
						
							|  |  |  |     super_t(x), container_ref(c) { } | 
					
						
							| 
									
										
										
										
											2002-09-05 14:05:29 +00:00
										 |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | }; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | template <typename Container> | 
					
						
							| 
									
										
										
										
											2014-07-03 00:22:45 +04:00
										 |  |  | inline shared_container_iterator<Container> | 
					
						
							| 
									
										
										
										
											2002-09-05 14:05:29 +00:00
										 |  |  | make_shared_container_iterator(typename Container::iterator iter, | 
					
						
							| 
									
										
										
										
											2003-12-26 23:26:49 +00:00
										 |  |  |                                boost::shared_ptr<Container> const& container) { | 
					
						
							| 
									
										
										
										
											2003-08-11 16:29:47 +00:00
										 |  |  |   typedef shared_container_iterator<Container> iterator; | 
					
						
							|  |  |  |   return iterator(iter,container); | 
					
						
							| 
									
										
										
										
											2002-09-05 14:05:29 +00:00
										 |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2003-08-11 16:29:47 +00:00
										 |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2002-09-05 14:05:29 +00:00
										 |  |  | template <typename Container> | 
					
						
							| 
									
										
										
										
											2014-07-03 00:22:45 +04:00
										 |  |  | inline std::pair< | 
					
						
							| 
									
										
										
										
											2003-08-11 16:29:47 +00:00
										 |  |  |   shared_container_iterator<Container>, | 
					
						
							|  |  |  |   shared_container_iterator<Container> > | 
					
						
							| 
									
										
										
										
											2002-09-05 14:05:29 +00:00
										 |  |  | make_shared_container_range(boost::shared_ptr<Container> const& container) { | 
					
						
							|  |  |  |   return | 
					
						
							|  |  |  |     std::make_pair( | 
					
						
							|  |  |  |       make_shared_container_iterator(container->begin(),container), | 
					
						
							|  |  |  |       make_shared_container_iterator(container->end(),container)); | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2014-07-03 00:22:45 +04:00
										 |  |  | } // namespace iterators
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | using iterators::shared_container_iterator; | 
					
						
							|  |  |  | using iterators::make_shared_container_iterator; | 
					
						
							|  |  |  | using iterators::make_shared_container_range; | 
					
						
							| 
									
										
										
										
											2002-09-05 14:05:29 +00:00
										 |  |  | 
 | 
					
						
							|  |  |  | } // namespace boost
 | 
					
						
							| 
									
										
										
										
											2014-07-03 00:22:45 +04:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2002-09-05 14:05:29 +00:00
										 |  |  | #endif  // SHARED_CONTAINER_ITERATOR_RG08102002_HPP
 |