--- /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