diff --git a/include/boost/shared_container_iterator.hpp b/include/boost/shared_container_iterator.hpp index 95cf6c1..e21d8da 100644 --- a/include/boost/shared_container_iterator.hpp +++ b/include/boost/shared_container_iterator.hpp @@ -15,38 +15,41 @@ namespace boost { template -struct shared_container_iterator_policies : - public boost::default_iterator_policies { +class shared_container_iterator : public iterator_adaptor< + shared_container_iterator, + typename Container::iterator> { + + typedef iterator_adaptor< + shared_container_iterator, + typename Container::iterator> super_t; + + typedef typename Container::iterator iterator_t; typedef boost::shared_ptr container_ref_t; + container_ref_t container_ref; - shared_container_iterator_policies(container_ref_t const& c) : - container_ref(c) { } - shared_container_iterator_policies() { } -}; - - -template -class shared_container_iterator_generator { - typedef typename Container::iterator iterator; - typedef shared_container_iterator_policies policy; public: - typedef boost::iterator_adaptor type; + shared_container_iterator() { } + + shared_container_iterator(iterator_t const& x,container_ref_t const& c) : + super_t(x), container_ref(c) { } + + }; template -typename shared_container_iterator_generator::type +shared_container_iterator make_shared_container_iterator(typename Container::iterator iter, boost::shared_ptr const& container) { - typedef typename shared_container_iterator_generator::type - iterator; - typedef shared_container_iterator_policies policy; - return iterator(iter,policy(container)); + typedef shared_container_iterator iterator; + return iterator(iter,container); } + + template std::pair< - typename shared_container_iterator_generator::type, - typename shared_container_iterator_generator::type> + shared_container_iterator, + shared_container_iterator > make_shared_container_range(boost::shared_ptr const& container) { return std::make_pair(