You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and dots ('.'), can be up to 35 characters long. Letters must be lowercase.
45 lines
1.3 KiB
45 lines
1.3 KiB
/* 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
|
|
|