summaryrefslogtreecommitdiff
path: root/boost/test/data/monomorphic/generate.hpp
diff options
context:
space:
mode:
Diffstat (limited to 'boost/test/data/monomorphic/generate.hpp')
-rw-r--r--boost/test/data/monomorphic/generate.hpp53
1 files changed, 23 insertions, 30 deletions
diff --git a/boost/test/data/monomorphic/generate.hpp b/boost/test/data/monomorphic/generate.hpp
index c5ff1d699b..af3b5c0bb9 100644
--- a/boost/test/data/monomorphic/generate.hpp
+++ b/boost/test/data/monomorphic/generate.hpp
@@ -1,4 +1,4 @@
-// (C) Copyright Gennadiy Rozental 2011-2014.
+// (C) Copyright Gennadiy Rozental 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)
@@ -14,7 +14,7 @@
// Boost.Test
#include <boost/test/data/config.hpp>
-#include <boost/test/data/monomorphic/dataset.hpp>
+#include <boost/test/data/monomorphic/fwd.hpp>
#include <boost/test/detail/suppress_warnings.hpp>
@@ -36,44 +36,43 @@ namespace monomorphic {
* - random_t
*
* The generator concept is the following:
- * - the type of the generated samples is given by field @c data_type
+ * - the type of the generated samples is given by field @c sample
* - the member function @c capacity should return the size of the collection being generated (potentially infinite)
* - the member function @c next should change the state of the generator to the next generated value
* - the member function @c reset should put the state of the object in the same state as right after its instanciation
*/
template<typename Generator>
-class generated_by : public monomorphic::dataset<typename Generator::data_type> {
- typedef typename Generator::data_type T;
- typedef monomorphic::dataset<T> base;
- typedef typename base::iter_ptr iter_ptr;
+class generated_by {
+public:
+ typedef typename Generator::sample sample;
+
+ enum { arity = 1 };
- struct iterator : public base::iterator {
+ struct iterator {
// Constructor
explicit iterator( Generator& gen )
- : m_gen( gen )
+ : m_gen( &gen )
{
- if(m_gen.capacity() > 0) {
- m_gen.reset();
+ if(m_gen->capacity() > 0) {
+ m_gen->reset();
++*this;
}
}
// forward iterator interface
- virtual T const& operator*() { return m_curr_sample; }
- virtual void operator++() { m_curr_sample = m_gen.next(); }
+ sample const& operator*() const { return m_curr_sample; }
+ void operator++() { m_curr_sample = m_gen->next(); }
private:
// Data members
- Generator& m_gen;
- T m_curr_sample;
+ Generator* m_gen;
+ sample m_curr_sample;
};
-public:
- enum { arity = 1 };
+
typedef Generator generator_type;
-#ifndef BOOST_NO_CXX11_RVALUE_REFERENCES
// Constructor
- explicit generated_by( Generator&& G )
+ explicit generated_by( Generator&& G )
: m_generator( std::forward<Generator>(G) )
{}
@@ -81,29 +80,23 @@ public:
generated_by( generated_by&& rhs )
: m_generator( std::forward<Generator>(rhs.m_generator) )
{}
-#else
- // Constructor
- explicit generated_by( Generator const& G )
- : m_generator( G )
- {}
-#endif
//! Size of the underlying dataset
- data::size_t size() const { return m_generator.capacity(); }
+ data::size_t size() const { return m_generator.capacity(); }
//! Iterator on the beginning of the dataset
- virtual iter_ptr begin() const { return boost::make_shared<iterator>( boost::ref(const_cast<Generator&>(m_generator)) ); }
+ iterator begin() const { return iterator( boost::ref(const_cast<Generator&>(m_generator)) ); }
private:
// Data members
- Generator m_generator;
+ Generator m_generator;
};
+//____________________________________________________________________________//
//! A generated dataset is a dataset.
template<typename Generator>
-struct is_dataset<generated_by<Generator> > : mpl::true_ {};
-
+struct is_dataset<generated_by<Generator>> : mpl::true_ {};
} // namespace monomorphic
} // namespace data