Chris@16: // (C) Copyright Ronald Garcia 2002. Permission to copy, use, modify, sell and Chris@16: // distribute this software is granted provided this copyright notice appears Chris@16: // in all copies. This software is provided "as is" without express or implied Chris@16: // warranty, and with no claim as to its suitability for any purpose. Chris@16: Chris@16: // See http://www.boost.org/libs/utility/shared_container_iterator.html for documentation. Chris@16: Chris@16: #ifndef SHARED_CONTAINER_ITERATOR_RG08102002_HPP Chris@16: #define SHARED_CONTAINER_ITERATOR_RG08102002_HPP Chris@16: Chris@16: #include "boost/iterator_adaptors.hpp" Chris@16: #include "boost/shared_ptr.hpp" Chris@16: #include Chris@16: Chris@16: namespace boost { Chris@101: namespace iterators { Chris@16: Chris@16: template Chris@16: class shared_container_iterator : public iterator_adaptor< Chris@16: shared_container_iterator, Chris@16: typename Container::iterator> { Chris@16: Chris@16: typedef iterator_adaptor< Chris@16: shared_container_iterator, Chris@16: typename Container::iterator> super_t; Chris@16: Chris@16: typedef typename Container::iterator iterator_t; Chris@16: typedef boost::shared_ptr container_ref_t; Chris@16: Chris@16: container_ref_t container_ref; Chris@16: public: Chris@16: shared_container_iterator() { } Chris@16: Chris@16: shared_container_iterator(iterator_t const& x,container_ref_t const& c) : Chris@16: super_t(x), container_ref(c) { } Chris@16: Chris@16: Chris@16: }; Chris@16: Chris@16: template Chris@101: inline shared_container_iterator Chris@16: make_shared_container_iterator(typename Container::iterator iter, Chris@16: boost::shared_ptr const& container) { Chris@16: typedef shared_container_iterator iterator; Chris@16: return iterator(iter,container); Chris@16: } Chris@16: Chris@16: Chris@16: Chris@16: template Chris@101: inline std::pair< Chris@16: shared_container_iterator, Chris@16: shared_container_iterator > Chris@16: make_shared_container_range(boost::shared_ptr const& container) { Chris@16: return Chris@16: std::make_pair( Chris@16: make_shared_container_iterator(container->begin(),container), Chris@16: make_shared_container_iterator(container->end(),container)); Chris@16: } Chris@16: Chris@101: } // namespace iterators Chris@101: Chris@101: using iterators::shared_container_iterator; Chris@101: using iterators::make_shared_container_iterator; Chris@101: using iterators::make_shared_container_range; Chris@16: Chris@16: } // namespace boost Chris@101: Chris@16: #endif // SHARED_CONTAINER_ITERATOR_RG08102002_HPP