| /* boost random/detail/iterator_mixin.hpp header file |
| * |
| * Copyright Jens Maurer 2000-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) |
| * |
| * See http://www.boost.org for most recent version including documentation. |
| * |
| * Revision history |
| */ |
| |
| #ifndef BOOST_ITERATOR_MIXIN_HPP |
| #define BOOST_ITERATOR_MIXIN_HPP |
| |
| #include <boost/operators.hpp> |
| |
| namespace boost { |
| |
| // must be in boost namespace, otherwise the inline friend trick fails |
| template<class Generator, class ResultType> |
| class generator_iterator_mixin_adapter |
| : incrementable<Generator>, equality_comparable<Generator> |
| { |
| public: |
| typedef std::input_iterator_tag iterator_category; |
| typedef ResultType value_type; |
| typedef std::ptrdiff_t difference_type; |
| typedef const value_type * pointer; |
| typedef const value_type & reference; |
| Generator& operator++() { v = cast()(); return cast(); } |
| const value_type& operator*() const { return v; } |
| |
| protected: |
| // instantiate from derived classes only |
| generator_iterator_mixin_adapter() { } |
| void iterator_init() { operator++(); } |
| private: |
| Generator & cast() { return static_cast<Generator&>(*this); } |
| value_type v; |
| }; |
| |
| } // namespace boost |
| |
| #endif // BOOST_ITERATOR_MIXIN_HPP |