summaryrefslogtreecommitdiff
path: root/boost/test/data/monomorphic/grid.hpp
diff options
context:
space:
mode:
Diffstat (limited to 'boost/test/data/monomorphic/grid.hpp')
-rw-r--r--boost/test/data/monomorphic/grid.hpp71
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;