ossrv_pub/boost_apis/boost/random/detail/iterator_mixin.hpp
changeset 0 e4d67989cc36
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/ossrv_pub/boost_apis/boost/random/detail/iterator_mixin.hpp	Tue Feb 02 02:01:42 2010 +0200
@@ -0,0 +1,45 @@
+/* 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