diff --git a/include/boost/shared_container_iterator.hpp b/include/boost/shared_container_iterator.hpp new file mode 100644 index 0000000..cf8d736 --- /dev/null +++ b/include/boost/shared_container_iterator.hpp @@ -0,0 +1,58 @@ +// (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. + + +#ifndef SHARED_CONTAINER_ITERATOR_RG08102002_HPP +#define SHARED_CONTAINER_ITERATOR_RG08102002_HPP + +#include "boost/iterator_adaptors.hpp" +#include "boost/shared_ptr.hpp" +#include + +namespace boost { + +template +struct shared_container_iterator_policies : + public boost::default_iterator_policies { + 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; +}; + +template +typename shared_container_iterator_generator::type +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)); +} + +template +std::pair< + typename shared_container_iterator_generator::type, + typename shared_container_iterator_generator::type> +make_shared_container_range(boost::shared_ptr const& container) { + return + std::make_pair( + make_shared_container_iterator(container->begin(),container), + make_shared_container_iterator(container->end(),container)); +} + + +} // namespace boost +#endif // SHARED_CONTAINER_ITERATOR_RG08102002_HPP