123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111 |
- #ifndef BOOST_TEST_DATA_MONOMORPHIC_GENERATE_HPP_112011GER
- #define BOOST_TEST_DATA_MONOMORPHIC_GENERATE_HPP_112011GER
- #include <boost/test/data/config.hpp>
- #include <boost/test/data/monomorphic/fwd.hpp>
- #include <boost/core/ref.hpp>
- #include <boost/test/detail/suppress_warnings.hpp>
- namespace boost {
- namespace unit_test {
- namespace data {
- namespace monomorphic {
- template<typename Generator>
- class generated_by {
- public:
- typedef typename Generator::sample sample;
- static const int arity = 1;
- struct iterator {
-
- explicit iterator( Generator& gen )
- : m_gen( &gen )
- {
- if(m_gen->capacity() > 0) {
- m_gen->reset();
- ++*this;
- }
- }
-
- sample const& operator*() const { return m_curr_sample; }
- void operator++() { m_curr_sample = m_gen->next(); }
- private:
-
- Generator* m_gen;
- sample m_curr_sample;
- };
- typedef Generator generator_type;
-
- explicit generated_by( Generator&& G )
- : m_generator( std::forward<Generator>(G) )
- {}
-
- generated_by( generated_by&& rhs )
- : m_generator( std::forward<Generator>(rhs.m_generator) )
- {}
-
- data::size_t size() const { return m_generator.capacity(); }
-
- iterator begin() const { return iterator( boost::ref(const_cast<Generator&>(m_generator)) ); }
- private:
-
- Generator m_generator;
- };
- template<typename Generator>
- struct is_dataset<generated_by<Generator>> : mpl::true_ {};
- }
- }
- }
- }
- #include <boost/test/detail/enable_warnings.hpp>
- #endif
|