diff options
Diffstat (limited to 'boost/test/data/monomorphic/generate.hpp')
-rw-r--r-- | boost/test/data/monomorphic/generate.hpp | 53 |
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 |