diff options
Diffstat (limited to 'boost/test/data/monomorphic/grid.hpp')
-rw-r--r-- | boost/test/data/monomorphic/grid.hpp | 71 |
1 files changed, 12 insertions, 59 deletions
diff --git a/boost/test/data/monomorphic/grid.hpp b/boost/test/data/monomorphic/grid.hpp index 6af906c62c..3e1b36abad 100644 --- a/boost/test/data/monomorphic/grid.hpp +++ b/boost/test/data/monomorphic/grid.hpp @@ -19,8 +19,8 @@ #if !defined(BOOST_TEST_NO_GRID_COMPOSITION_AVAILABLE) || defined(BOOST_TEST_DOXYGEN_DOC__) -#include <boost/test/data/traits.hpp> #include <boost/test/data/monomorphic/fwd.hpp> +#include <boost/test/data/monomorphic/sample_merge.hpp> #include <boost/test/detail/suppress_warnings.hpp> @@ -31,53 +31,6 @@ namespace unit_test { namespace data { namespace monomorphic { -namespace ds_detail { - -// !! ?? variadic template implementation; use forward_as_tuple? -template<typename T1, typename T2> -struct grid_traits { - typedef std::tuple<T1,T2> type; - typedef typename data::traits<type>::ref_type ref_type; - - static ref_type - tuple_merge(T1 const& a1, T2 const& a2) - { - return ref_type(a1,a2); - } -}; - -//____________________________________________________________________________// - -template<typename T1, typename T2,typename T3> -struct grid_traits<T1,std::tuple<T2,T3>> { - typedef std::tuple<T1,T2,T3> type; - typedef typename data::traits<type>::ref_type ref_type; - - static ref_type - tuple_merge(T1 const& a1, std::tuple<T2 const&,T3 const&> const& a2) - { - return ref_type(a1,get<0>(a2),get<1>(a2)); - } -}; - -//____________________________________________________________________________// - -template<typename T1, typename T2,typename T3> -struct grid_traits<std::tuple<T1,T2>,T3> { - typedef std::tuple<T1,T2,T3> type; - typedef typename data::traits<type>::ref_type ref_type; - - static ref_type - tuple_merge(std::tuple<T1 const&,T2 const&> const& a1, T3 const& a2) - { - return ref_type(get<0>(a1),get<1>(a1),a2); - } -}; - -//____________________________________________________________________________// - -} // namespace ds_detail - // ************************************************************************** // // ************** grid ************** // // ************************************************************************** // @@ -88,21 +41,15 @@ struct grid_traits<std::tuple<T1,T2>,T3> { //! The arity of the resulting dataset is the sum of the arity of its operands. template<typename DataSet1, typename DataSet2> class grid { - typedef typename boost::decay<DataSet1>::type dataset1_decay; - typedef typename boost::decay<DataSet2>::type dataset2_decay; - - typedef typename dataset1_decay::iterator dataset1_iter; - typedef typename dataset2_decay::iterator dataset2_iter; + typedef typename boost::decay<DataSet1>::type dataset1_decay; + typedef typename boost::decay<DataSet2>::type dataset2_decay; - typedef typename dataset1_decay::sample sample1; - typedef typename dataset2_decay::sample sample2; + typedef typename dataset1_decay::iterator dataset1_iter; + typedef typename dataset2_decay::iterator dataset2_iter; public: - typedef typename ds_detail::grid_traits<sample1,sample2>::type sample; struct iterator { - typedef typename data::traits<sample>::ref_type ref_type; - // Constructor explicit iterator( dataset1_iter iter1, DataSet2 const& ds2 ) : m_iter1( std::move( iter1 ) ) @@ -111,8 +58,14 @@ public: , m_ds2_pos( 0 ) {} + using iterator_sample = decltype( + sample_merge( *std::declval<dataset1_iter>(), + *std::declval<dataset2_iter>()) ); + // forward iterator interface - ref_type operator*() const { return ds_detail::grid_traits<sample1,sample2>::tuple_merge( *m_iter1, *m_iter2 ); } + auto operator*() const -> iterator_sample { + return sample_merge( *m_iter1, *m_iter2 ); + } void operator++() { ++m_ds2_pos; |