Chris@16: // (C) Copyright Jens Maurer 2001. Chris@16: // Distributed under the Boost Software License, Version 1.0. (See Chris@16: // accompanying file LICENSE_1_0.txt or copy at Chris@16: // http://www.boost.org/LICENSE_1_0.txt) Chris@16: // Chris@16: // Revision History: Chris@16: Chris@16: // 15 Nov 2001 Jens Maurer Chris@16: // created. Chris@16: Chris@16: // See http://www.boost.org/libs/utility/iterator_adaptors.htm for documentation. Chris@16: Chris@16: #ifndef BOOST_ITERATOR_ADAPTOR_GENERATOR_ITERATOR_HPP Chris@16: #define BOOST_ITERATOR_ADAPTOR_GENERATOR_ITERATOR_HPP Chris@16: Chris@16: #include Chris@16: #include Chris@16: Chris@16: namespace boost { Chris@101: namespace iterators { Chris@16: Chris@16: template Chris@16: class generator_iterator Chris@16: : public iterator_facade< Chris@16: generator_iterator Chris@16: , typename Generator::result_type Chris@16: , single_pass_traversal_tag Chris@16: , typename Generator::result_type const& Chris@16: > Chris@16: { Chris@16: typedef iterator_facade< Chris@16: generator_iterator Chris@16: , typename Generator::result_type Chris@16: , single_pass_traversal_tag Chris@16: , typename Generator::result_type const& Chris@16: > super_t; Chris@101: Chris@16: public: Chris@16: generator_iterator() {} Chris@16: generator_iterator(Generator* g) : m_g(g), m_value((*m_g)()) {} Chris@16: Chris@16: void increment() Chris@16: { Chris@16: m_value = (*m_g)(); Chris@16: } Chris@16: Chris@16: const typename Generator::result_type& Chris@16: dereference() const Chris@16: { Chris@16: return m_value; Chris@16: } Chris@16: Chris@16: bool equal(generator_iterator const& y) const Chris@16: { Chris@16: return this->m_g == y.m_g && this->m_value == y.m_value; Chris@16: } Chris@16: Chris@16: private: Chris@16: Generator* m_g; Chris@16: typename Generator::result_type m_value; Chris@16: }; Chris@16: Chris@16: template Chris@16: struct generator_iterator_generator Chris@16: { Chris@16: typedef generator_iterator type; Chris@16: }; Chris@16: Chris@16: template Chris@16: inline generator_iterator Chris@16: make_generator_iterator(Generator & gen) Chris@16: { Chris@16: typedef generator_iterator result_t; Chris@16: return result_t(&gen); Chris@16: } Chris@16: Chris@101: } // namespace iterators Chris@101: Chris@101: using iterators::generator_iterator; Chris@101: using iterators::generator_iterator_generator; Chris@101: using iterators::make_generator_iterator; Chris@101: Chris@16: } // namespace boost Chris@16: Chris@16: #endif // BOOST_ITERATOR_ADAPTOR_GENERATOR_ITERATOR_HPP