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