various iterator fixes

[SVN r25513]
This commit is contained in:
Aleksey Gurtovoy
2004-10-01 16:32:41 +00:00
parent 8e99727506
commit 5175a17d87
18 changed files with 410 additions and 358 deletions

View File

@@ -19,12 +19,13 @@
#include <boost/mpl/iterator_tags.hpp>
#include <boost/mpl/aux_/lambda_spec.hpp>
#include <boost/mpl/aux_/config/ctps.hpp>
#include <boost/type_traits/is_same.hpp>
#if defined(BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION)
# include <boost/type_traits/is_same.hpp>
#endif
namespace boost { namespace mpl {
namespace aux {
#if !defined(BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION)
template<
@@ -36,13 +37,6 @@ struct joint_iter
{
typedef Iterator1 base;
typedef forward_iterator_tag category;
typedef joint_iter<
typename mpl::next<base>::type
, LastIterator1
, Iterator2
> next;
typedef typename deref<base>::type type;
};
template<
@@ -53,19 +47,30 @@ struct joint_iter<LastIterator1,LastIterator1,Iterator2>
{
typedef Iterator2 base;
typedef forward_iterator_tag category;
typedef joint_iter<
LastIterator1
, LastIterator1
, typename mpl::next<base>::type
> next;
typedef typename deref<base>::type type;
};
#else
template< typename I1, typename L1, typename I2 >
struct deref< joint_iter<I1,L1,I2> >
{
typedef typename joint_iter<I1,L1,I2>::base base_;
typedef typename deref<base_>::type type;
};
template< typename I1, typename L1, typename I2 >
struct next< joint_iter<I1,L1,I2> >
{
typedef joint_iter< typename mpl::next<I1>::type,L1,I2 > type;
};
template< typename L1, typename I2 >
struct next< joint_iter<L1,L1,I2> >
{
typedef joint_iter< L1,L1,typename mpl::next<I2>::type > type;
};
#else // BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION
// forward decl. for 'joint_iter_impl'
template<
typename Iterator1
, typename LastIterator1
@@ -75,47 +80,26 @@ struct joint_iter;
template< bool > struct joint_iter_impl
{
template<
typename Iterator1
, typename LastIterator1
, typename Iterator2
>
struct result_
template< typename I1, typename L1, typename I2 > struct result_
{
typedef Iterator1 base;
typedef I1 base;
typedef forward_iterator_tag category;
typedef joint_iter<
typename mpl::next<Iterator1>::type
, LastIterator1
, Iterator2
> next;
typedef typename deref<Iterator1>::type type;
typedef joint_iter< typename mpl::next<I1>::type,L1,I2 > next;
typedef typename deref<I1>::type type;
};
};
template<> struct joint_iter_impl<true>
{
template<
typename Iterator1
, typename LastIterator1
, typename Iterator2
>
struct result_
template< typename I1, typename L1, typename I2 > struct result_
{
typedef Iterator2 base;
typedef I2 base;
typedef forward_iterator_tag category;
typedef joint_iter<
LastIterator1
, LastIterator1
, typename mpl::next<Iterator2>::type
> next;
typedef typename deref<Iterator2>::type type;
typedef joint_iter< L1,L1,typename mpl::next<I2>::type > next;
typedef typename deref<I2>::type type;
};
};
template<
typename Iterator1
, typename LastIterator1
@@ -129,9 +113,7 @@ struct joint_iter
#endif // BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION
} // namespace aux
BOOST_MPL_AUX_PASS_THROUGH_LAMBDA_SPEC(3, aux::joint_iter)
BOOST_MPL_AUX_PASS_THROUGH_LAMBDA_SPEC(3, joint_iter)
}}

View File

@@ -58,12 +58,12 @@ template<> struct reverse_fold_chunk<1>
{
typedef First iter0;
typedef State fwd_state0;
typedef typename apply2< ForwardOp, fwd_state0, typename iter0::type >::type fwd_state1;
typedef typename apply2< ForwardOp, fwd_state0, typename deref<iter0>::type >::type fwd_state1;
typedef typename next<iter0>::type iter1;
typedef fwd_state1 bkwd_state1;
typedef typename apply2< BackwardOp, bkwd_state1, typename iter0::type >::type bkwd_state0;
typedef typename apply2< BackwardOp, bkwd_state1, typename deref<iter0>::type >::type bkwd_state0;
typedef bkwd_state0 state;
typedef iter1 iterator;
};
@@ -82,15 +82,15 @@ template<> struct reverse_fold_chunk<2>
{
typedef First iter0;
typedef State fwd_state0;
typedef typename apply2< ForwardOp, fwd_state0, typename iter0::type >::type fwd_state1;
typedef typename apply2< ForwardOp, fwd_state0, typename deref<iter0>::type >::type fwd_state1;
typedef typename next<iter0>::type iter1;
typedef typename apply2< ForwardOp, fwd_state1, typename iter1::type >::type fwd_state2;
typedef typename apply2< ForwardOp, fwd_state1, typename deref<iter1>::type >::type fwd_state2;
typedef typename next<iter1>::type iter2;
typedef fwd_state2 bkwd_state2;
typedef typename apply2< BackwardOp, bkwd_state2, typename iter1::type >::type bkwd_state1;
typedef typename apply2< BackwardOp, bkwd_state1, typename iter0::type >::type bkwd_state0;
typedef typename apply2< BackwardOp, bkwd_state2, typename deref<iter1>::type >::type bkwd_state1;
typedef typename apply2< BackwardOp, bkwd_state1, typename deref<iter0>::type >::type bkwd_state0;
typedef bkwd_state0 state;
@@ -111,18 +111,18 @@ template<> struct reverse_fold_chunk<3>
{
typedef First iter0;
typedef State fwd_state0;
typedef typename apply2< ForwardOp, fwd_state0, typename iter0::type >::type fwd_state1;
typedef typename apply2< ForwardOp, fwd_state0, typename deref<iter0>::type >::type fwd_state1;
typedef typename next<iter0>::type iter1;
typedef typename apply2< ForwardOp, fwd_state1, typename iter1::type >::type fwd_state2;
typedef typename apply2< ForwardOp, fwd_state1, typename deref<iter1>::type >::type fwd_state2;
typedef typename next<iter1>::type iter2;
typedef typename apply2< ForwardOp, fwd_state2, typename iter2::type >::type fwd_state3;
typedef typename apply2< ForwardOp, fwd_state2, typename deref<iter2>::type >::type fwd_state3;
typedef typename next<iter2>::type iter3;
typedef fwd_state3 bkwd_state3;
typedef typename apply2< BackwardOp, bkwd_state3, typename iter2::type >::type bkwd_state2;
typedef typename apply2< BackwardOp, bkwd_state2, typename iter1::type >::type bkwd_state1;
typedef typename apply2< BackwardOp, bkwd_state1, typename iter0::type >::type bkwd_state0;
typedef typename apply2< BackwardOp, bkwd_state3, typename deref<iter2>::type >::type bkwd_state2;
typedef typename apply2< BackwardOp, bkwd_state2, typename deref<iter1>::type >::type bkwd_state1;
typedef typename apply2< BackwardOp, bkwd_state1, typename deref<iter0>::type >::type bkwd_state0;
typedef bkwd_state0 state;
@@ -143,21 +143,21 @@ template<> struct reverse_fold_chunk<4>
{
typedef First iter0;
typedef State fwd_state0;
typedef typename apply2< ForwardOp, fwd_state0, typename iter0::type >::type fwd_state1;
typedef typename apply2< ForwardOp, fwd_state0, typename deref<iter0>::type >::type fwd_state1;
typedef typename next<iter0>::type iter1;
typedef typename apply2< ForwardOp, fwd_state1, typename iter1::type >::type fwd_state2;
typedef typename apply2< ForwardOp, fwd_state1, typename deref<iter1>::type >::type fwd_state2;
typedef typename next<iter1>::type iter2;
typedef typename apply2< ForwardOp, fwd_state2, typename iter2::type >::type fwd_state3;
typedef typename apply2< ForwardOp, fwd_state2, typename deref<iter2>::type >::type fwd_state3;
typedef typename next<iter2>::type iter3;
typedef typename apply2< ForwardOp, fwd_state3, typename iter3::type >::type fwd_state4;
typedef typename apply2< ForwardOp, fwd_state3, typename deref<iter3>::type >::type fwd_state4;
typedef typename next<iter3>::type iter4;
typedef fwd_state4 bkwd_state4;
typedef typename apply2< BackwardOp, bkwd_state4, typename iter3::type >::type bkwd_state3;
typedef typename apply2< BackwardOp, bkwd_state3, typename iter2::type >::type bkwd_state2;
typedef typename apply2< BackwardOp, bkwd_state2, typename iter1::type >::type bkwd_state1;
typedef typename apply2< BackwardOp, bkwd_state1, typename iter0::type >::type bkwd_state0;
typedef typename apply2< BackwardOp, bkwd_state4, typename deref<iter3>::type >::type bkwd_state3;
typedef typename apply2< BackwardOp, bkwd_state3, typename deref<iter2>::type >::type bkwd_state2;
typedef typename apply2< BackwardOp, bkwd_state2, typename deref<iter1>::type >::type bkwd_state1;
typedef typename apply2< BackwardOp, bkwd_state1, typename deref<iter0>::type >::type bkwd_state0;
typedef bkwd_state0 state;
@@ -179,13 +179,13 @@ struct reverse_fold_chunk
{
typedef First iter0;
typedef State fwd_state0;
typedef typename apply2< ForwardOp, fwd_state0, typename iter0::type >::type fwd_state1;
typedef typename apply2< ForwardOp, fwd_state0, typename deref<iter0>::type >::type fwd_state1;
typedef typename next<iter0>::type iter1;
typedef typename apply2< ForwardOp, fwd_state1, typename iter1::type >::type fwd_state2;
typedef typename apply2< ForwardOp, fwd_state1, typename deref<iter1>::type >::type fwd_state2;
typedef typename next<iter1>::type iter2;
typedef typename apply2< ForwardOp, fwd_state2, typename iter2::type >::type fwd_state3;
typedef typename apply2< ForwardOp, fwd_state2, typename deref<iter2>::type >::type fwd_state3;
typedef typename next<iter2>::type iter3;
typedef typename apply2< ForwardOp, fwd_state3, typename iter3::type >::type fwd_state4;
typedef typename apply2< ForwardOp, fwd_state3, typename deref<iter3>::type >::type fwd_state4;
typedef typename next<iter3>::type iter4;
@@ -199,10 +199,10 @@ struct reverse_fold_chunk
> nested_chunk;
typedef typename nested_chunk::state bkwd_state4;
typedef typename apply2< BackwardOp, bkwd_state4, typename iter3::type >::type bkwd_state3;
typedef typename apply2< BackwardOp, bkwd_state3, typename iter2::type >::type bkwd_state2;
typedef typename apply2< BackwardOp, bkwd_state2, typename iter1::type >::type bkwd_state1;
typedef typename apply2< BackwardOp, bkwd_state1, typename iter0::type >::type bkwd_state0;
typedef typename apply2< BackwardOp, bkwd_state4, typename deref<iter3>::type >::type bkwd_state3;
typedef typename apply2< BackwardOp, bkwd_state3, typename deref<iter2>::type >::type bkwd_state2;
typedef typename apply2< BackwardOp, bkwd_state2, typename deref<iter1>::type >::type bkwd_state1;
typedef typename apply2< BackwardOp, bkwd_state1, typename deref<iter0>::type >::type bkwd_state0;
typedef bkwd_state0 state;
@@ -264,7 +264,7 @@ struct reverse_fold_step
typedef reverse_fold_chunk< -1 >::template result_<
typename next<First>::type
, Last
, typename apply2<ForwardOp,State, typename First::type>::type
, typename apply2<ForwardOp,State, typename deref<First>::type>::type
, BackwardOp
, ForwardOp
> nested_step;
@@ -272,7 +272,7 @@ struct reverse_fold_step
typedef typename apply2<
BackwardOp
, typename nested_step::state
, typename First::type
, typename deref<First>::type
>::type state;
typedef typename nested_step::iterator iterator;

View File

@@ -58,12 +58,12 @@ template<> struct reverse_fold_chunk<1>
{
typedef First iter0;
typedef State fwd_state0;
typedef typename apply2< ForwardOp, fwd_state0, typename iter0::type >::type fwd_state1;
typedef typename apply2< ForwardOp, fwd_state0, typename deref<iter0>::type >::type fwd_state1;
typedef typename next<iter0>::type iter1;
typedef fwd_state1 bkwd_state1;
typedef typename apply2< BackwardOp, bkwd_state1, typename iter0::type >::type bkwd_state0;
typedef typename apply2< BackwardOp, bkwd_state1, typename deref<iter0>::type >::type bkwd_state0;
typedef bkwd_state0 state;
typedef iter1 iterator;
};
@@ -82,15 +82,15 @@ template<> struct reverse_fold_chunk<2>
{
typedef First iter0;
typedef State fwd_state0;
typedef typename apply2< ForwardOp, fwd_state0, typename iter0::type >::type fwd_state1;
typedef typename apply2< ForwardOp, fwd_state0, typename deref<iter0>::type >::type fwd_state1;
typedef typename next<iter0>::type iter1;
typedef typename apply2< ForwardOp, fwd_state1, typename iter1::type >::type fwd_state2;
typedef typename apply2< ForwardOp, fwd_state1, typename deref<iter1>::type >::type fwd_state2;
typedef typename next<iter1>::type iter2;
typedef fwd_state2 bkwd_state2;
typedef typename apply2< BackwardOp, bkwd_state2, typename iter1::type >::type bkwd_state1;
typedef typename apply2< BackwardOp, bkwd_state1, typename iter0::type >::type bkwd_state0;
typedef typename apply2< BackwardOp, bkwd_state2, typename deref<iter1>::type >::type bkwd_state1;
typedef typename apply2< BackwardOp, bkwd_state1, typename deref<iter0>::type >::type bkwd_state0;
typedef bkwd_state0 state;
@@ -111,18 +111,18 @@ template<> struct reverse_fold_chunk<3>
{
typedef First iter0;
typedef State fwd_state0;
typedef typename apply2< ForwardOp, fwd_state0, typename iter0::type >::type fwd_state1;
typedef typename apply2< ForwardOp, fwd_state0, typename deref<iter0>::type >::type fwd_state1;
typedef typename next<iter0>::type iter1;
typedef typename apply2< ForwardOp, fwd_state1, typename iter1::type >::type fwd_state2;
typedef typename apply2< ForwardOp, fwd_state1, typename deref<iter1>::type >::type fwd_state2;
typedef typename next<iter1>::type iter2;
typedef typename apply2< ForwardOp, fwd_state2, typename iter2::type >::type fwd_state3;
typedef typename apply2< ForwardOp, fwd_state2, typename deref<iter2>::type >::type fwd_state3;
typedef typename next<iter2>::type iter3;
typedef fwd_state3 bkwd_state3;
typedef typename apply2< BackwardOp, bkwd_state3, typename iter2::type >::type bkwd_state2;
typedef typename apply2< BackwardOp, bkwd_state2, typename iter1::type >::type bkwd_state1;
typedef typename apply2< BackwardOp, bkwd_state1, typename iter0::type >::type bkwd_state0;
typedef typename apply2< BackwardOp, bkwd_state3, typename deref<iter2>::type >::type bkwd_state2;
typedef typename apply2< BackwardOp, bkwd_state2, typename deref<iter1>::type >::type bkwd_state1;
typedef typename apply2< BackwardOp, bkwd_state1, typename deref<iter0>::type >::type bkwd_state0;
typedef bkwd_state0 state;
@@ -143,21 +143,21 @@ template<> struct reverse_fold_chunk<4>
{
typedef First iter0;
typedef State fwd_state0;
typedef typename apply2< ForwardOp, fwd_state0, typename iter0::type >::type fwd_state1;
typedef typename apply2< ForwardOp, fwd_state0, typename deref<iter0>::type >::type fwd_state1;
typedef typename next<iter0>::type iter1;
typedef typename apply2< ForwardOp, fwd_state1, typename iter1::type >::type fwd_state2;
typedef typename apply2< ForwardOp, fwd_state1, typename deref<iter1>::type >::type fwd_state2;
typedef typename next<iter1>::type iter2;
typedef typename apply2< ForwardOp, fwd_state2, typename iter2::type >::type fwd_state3;
typedef typename apply2< ForwardOp, fwd_state2, typename deref<iter2>::type >::type fwd_state3;
typedef typename next<iter2>::type iter3;
typedef typename apply2< ForwardOp, fwd_state3, typename iter3::type >::type fwd_state4;
typedef typename apply2< ForwardOp, fwd_state3, typename deref<iter3>::type >::type fwd_state4;
typedef typename next<iter3>::type iter4;
typedef fwd_state4 bkwd_state4;
typedef typename apply2< BackwardOp, bkwd_state4, typename iter3::type >::type bkwd_state3;
typedef typename apply2< BackwardOp, bkwd_state3, typename iter2::type >::type bkwd_state2;
typedef typename apply2< BackwardOp, bkwd_state2, typename iter1::type >::type bkwd_state1;
typedef typename apply2< BackwardOp, bkwd_state1, typename iter0::type >::type bkwd_state0;
typedef typename apply2< BackwardOp, bkwd_state4, typename deref<iter3>::type >::type bkwd_state3;
typedef typename apply2< BackwardOp, bkwd_state3, typename deref<iter2>::type >::type bkwd_state2;
typedef typename apply2< BackwardOp, bkwd_state2, typename deref<iter1>::type >::type bkwd_state1;
typedef typename apply2< BackwardOp, bkwd_state1, typename deref<iter0>::type >::type bkwd_state0;
typedef bkwd_state0 state;
@@ -179,13 +179,13 @@ struct reverse_fold_chunk
{
typedef First iter0;
typedef State fwd_state0;
typedef typename apply2< ForwardOp, fwd_state0, typename iter0::type >::type fwd_state1;
typedef typename apply2< ForwardOp, fwd_state0, typename deref<iter0>::type >::type fwd_state1;
typedef typename next<iter0>::type iter1;
typedef typename apply2< ForwardOp, fwd_state1, typename iter1::type >::type fwd_state2;
typedef typename apply2< ForwardOp, fwd_state1, typename deref<iter1>::type >::type fwd_state2;
typedef typename next<iter1>::type iter2;
typedef typename apply2< ForwardOp, fwd_state2, typename iter2::type >::type fwd_state3;
typedef typename apply2< ForwardOp, fwd_state2, typename deref<iter2>::type >::type fwd_state3;
typedef typename next<iter2>::type iter3;
typedef typename apply2< ForwardOp, fwd_state3, typename iter3::type >::type fwd_state4;
typedef typename apply2< ForwardOp, fwd_state3, typename deref<iter3>::type >::type fwd_state4;
typedef typename next<iter3>::type iter4;
@@ -199,10 +199,10 @@ struct reverse_fold_chunk
> nested_chunk;
typedef typename nested_chunk::state bkwd_state4;
typedef typename apply2< BackwardOp, bkwd_state4, typename iter3::type >::type bkwd_state3;
typedef typename apply2< BackwardOp, bkwd_state3, typename iter2::type >::type bkwd_state2;
typedef typename apply2< BackwardOp, bkwd_state2, typename iter1::type >::type bkwd_state1;
typedef typename apply2< BackwardOp, bkwd_state1, typename iter0::type >::type bkwd_state0;
typedef typename apply2< BackwardOp, bkwd_state4, typename deref<iter3>::type >::type bkwd_state3;
typedef typename apply2< BackwardOp, bkwd_state3, typename deref<iter2>::type >::type bkwd_state2;
typedef typename apply2< BackwardOp, bkwd_state2, typename deref<iter1>::type >::type bkwd_state1;
typedef typename apply2< BackwardOp, bkwd_state1, typename deref<iter0>::type >::type bkwd_state0;
typedef bkwd_state0 state;
@@ -264,7 +264,7 @@ struct reverse_fold_step
typedef reverse_fold_chunk< -1 >::template result_<
typename next<First>::type
, Last
, typename apply2<ForwardOp,State, typename First::type>::type
, typename apply2<ForwardOp,State, typename deref<First>::type>::type
, BackwardOp
, ForwardOp
> nested_step;
@@ -272,7 +272,7 @@ struct reverse_fold_step
typedef typename apply2<
BackwardOp
, typename nested_step::state
, typename First::type
, typename deref<First>::type
>::type state;
typedef typename nested_step::iterator iterator;

View File

@@ -50,12 +50,12 @@ struct reverse_fold_impl< 1,First,Last,State,BackwardOp,ForwardOp >
{
typedef First iter0;
typedef State fwd_state0;
typedef typename apply2< ForwardOp, fwd_state0, typename iter0::type >::type fwd_state1;
typedef typename apply2< ForwardOp, fwd_state0, typename deref<iter0>::type >::type fwd_state1;
typedef typename next<iter0>::type iter1;
typedef fwd_state1 bkwd_state1;
typedef typename apply2< BackwardOp, bkwd_state1, typename iter0::type >::type bkwd_state0;
typedef typename apply2< BackwardOp, bkwd_state1, typename deref<iter0>::type >::type bkwd_state0;
typedef bkwd_state0 state;
typedef iter1 iterator;
};
@@ -71,15 +71,15 @@ struct reverse_fold_impl< 2,First,Last,State,BackwardOp,ForwardOp >
{
typedef First iter0;
typedef State fwd_state0;
typedef typename apply2< ForwardOp, fwd_state0, typename iter0::type >::type fwd_state1;
typedef typename apply2< ForwardOp, fwd_state0, typename deref<iter0>::type >::type fwd_state1;
typedef typename next<iter0>::type iter1;
typedef typename apply2< ForwardOp, fwd_state1, typename iter1::type >::type fwd_state2;
typedef typename apply2< ForwardOp, fwd_state1, typename deref<iter1>::type >::type fwd_state2;
typedef typename next<iter1>::type iter2;
typedef fwd_state2 bkwd_state2;
typedef typename apply2< BackwardOp, bkwd_state2, typename iter1::type >::type bkwd_state1;
typedef typename apply2< BackwardOp, bkwd_state1, typename iter0::type >::type bkwd_state0;
typedef typename apply2< BackwardOp, bkwd_state2, typename deref<iter1>::type >::type bkwd_state1;
typedef typename apply2< BackwardOp, bkwd_state1, typename deref<iter0>::type >::type bkwd_state0;
typedef bkwd_state0 state;
@@ -97,18 +97,18 @@ struct reverse_fold_impl< 3,First,Last,State,BackwardOp,ForwardOp >
{
typedef First iter0;
typedef State fwd_state0;
typedef typename apply2< ForwardOp, fwd_state0, typename iter0::type >::type fwd_state1;
typedef typename apply2< ForwardOp, fwd_state0, typename deref<iter0>::type >::type fwd_state1;
typedef typename next<iter0>::type iter1;
typedef typename apply2< ForwardOp, fwd_state1, typename iter1::type >::type fwd_state2;
typedef typename apply2< ForwardOp, fwd_state1, typename deref<iter1>::type >::type fwd_state2;
typedef typename next<iter1>::type iter2;
typedef typename apply2< ForwardOp, fwd_state2, typename iter2::type >::type fwd_state3;
typedef typename apply2< ForwardOp, fwd_state2, typename deref<iter2>::type >::type fwd_state3;
typedef typename next<iter2>::type iter3;
typedef fwd_state3 bkwd_state3;
typedef typename apply2< BackwardOp, bkwd_state3, typename iter2::type >::type bkwd_state2;
typedef typename apply2< BackwardOp, bkwd_state2, typename iter1::type >::type bkwd_state1;
typedef typename apply2< BackwardOp, bkwd_state1, typename iter0::type >::type bkwd_state0;
typedef typename apply2< BackwardOp, bkwd_state3, typename deref<iter2>::type >::type bkwd_state2;
typedef typename apply2< BackwardOp, bkwd_state2, typename deref<iter1>::type >::type bkwd_state1;
typedef typename apply2< BackwardOp, bkwd_state1, typename deref<iter0>::type >::type bkwd_state0;
typedef bkwd_state0 state;
@@ -126,21 +126,21 @@ struct reverse_fold_impl< 4,First,Last,State,BackwardOp,ForwardOp >
{
typedef First iter0;
typedef State fwd_state0;
typedef typename apply2< ForwardOp, fwd_state0, typename iter0::type >::type fwd_state1;
typedef typename apply2< ForwardOp, fwd_state0, typename deref<iter0>::type >::type fwd_state1;
typedef typename next<iter0>::type iter1;
typedef typename apply2< ForwardOp, fwd_state1, typename iter1::type >::type fwd_state2;
typedef typename apply2< ForwardOp, fwd_state1, typename deref<iter1>::type >::type fwd_state2;
typedef typename next<iter1>::type iter2;
typedef typename apply2< ForwardOp, fwd_state2, typename iter2::type >::type fwd_state3;
typedef typename apply2< ForwardOp, fwd_state2, typename deref<iter2>::type >::type fwd_state3;
typedef typename next<iter2>::type iter3;
typedef typename apply2< ForwardOp, fwd_state3, typename iter3::type >::type fwd_state4;
typedef typename apply2< ForwardOp, fwd_state3, typename deref<iter3>::type >::type fwd_state4;
typedef typename next<iter3>::type iter4;
typedef fwd_state4 bkwd_state4;
typedef typename apply2< BackwardOp, bkwd_state4, typename iter3::type >::type bkwd_state3;
typedef typename apply2< BackwardOp, bkwd_state3, typename iter2::type >::type bkwd_state2;
typedef typename apply2< BackwardOp, bkwd_state2, typename iter1::type >::type bkwd_state1;
typedef typename apply2< BackwardOp, bkwd_state1, typename iter0::type >::type bkwd_state0;
typedef typename apply2< BackwardOp, bkwd_state4, typename deref<iter3>::type >::type bkwd_state3;
typedef typename apply2< BackwardOp, bkwd_state3, typename deref<iter2>::type >::type bkwd_state2;
typedef typename apply2< BackwardOp, bkwd_state2, typename deref<iter1>::type >::type bkwd_state1;
typedef typename apply2< BackwardOp, bkwd_state1, typename deref<iter0>::type >::type bkwd_state0;
typedef bkwd_state0 state;
@@ -159,13 +159,13 @@ struct reverse_fold_impl
{
typedef First iter0;
typedef State fwd_state0;
typedef typename apply2< ForwardOp, fwd_state0, typename iter0::type >::type fwd_state1;
typedef typename apply2< ForwardOp, fwd_state0, typename deref<iter0>::type >::type fwd_state1;
typedef typename next<iter0>::type iter1;
typedef typename apply2< ForwardOp, fwd_state1, typename iter1::type >::type fwd_state2;
typedef typename apply2< ForwardOp, fwd_state1, typename deref<iter1>::type >::type fwd_state2;
typedef typename next<iter1>::type iter2;
typedef typename apply2< ForwardOp, fwd_state2, typename iter2::type >::type fwd_state3;
typedef typename apply2< ForwardOp, fwd_state2, typename deref<iter2>::type >::type fwd_state3;
typedef typename next<iter2>::type iter3;
typedef typename apply2< ForwardOp, fwd_state3, typename iter3::type >::type fwd_state4;
typedef typename apply2< ForwardOp, fwd_state3, typename deref<iter3>::type >::type fwd_state4;
typedef typename next<iter3>::type iter4;
@@ -179,10 +179,10 @@ struct reverse_fold_impl
> nested_chunk;
typedef typename nested_chunk::state bkwd_state4;
typedef typename apply2< BackwardOp, bkwd_state4, typename iter3::type >::type bkwd_state3;
typedef typename apply2< BackwardOp, bkwd_state3, typename iter2::type >::type bkwd_state2;
typedef typename apply2< BackwardOp, bkwd_state2, typename iter1::type >::type bkwd_state1;
typedef typename apply2< BackwardOp, bkwd_state1, typename iter0::type >::type bkwd_state0;
typedef typename apply2< BackwardOp, bkwd_state4, typename deref<iter3>::type >::type bkwd_state3;
typedef typename apply2< BackwardOp, bkwd_state3, typename deref<iter2>::type >::type bkwd_state2;
typedef typename apply2< BackwardOp, bkwd_state2, typename deref<iter1>::type >::type bkwd_state1;
typedef typename apply2< BackwardOp, bkwd_state1, typename deref<iter0>::type >::type bkwd_state0;
typedef bkwd_state0 state;
@@ -202,7 +202,7 @@ struct reverse_fold_impl< -1,First,Last,State,BackwardOp,ForwardOp >
-1
, typename next<First>::type
, Last
, typename apply2<ForwardOp,State, typename First::type>::type
, typename apply2<ForwardOp,State, typename deref<First>::type>::type
, BackwardOp
, ForwardOp
> nested_step;
@@ -210,7 +210,7 @@ struct reverse_fold_impl< -1,First,Last,State,BackwardOp,ForwardOp >
typedef typename apply2<
BackwardOp
, typename nested_step::state
, typename First::type
, typename deref<First>::type
>::type state;
typedef typename nested_step::iterator iterator;

View File

@@ -50,12 +50,12 @@ struct reverse_fold_impl< 1,First,Last,State,BackwardOp,ForwardOp >
{
typedef First iter0;
typedef State fwd_state0;
typedef typename apply2< ForwardOp, fwd_state0, typename iter0::type >::type fwd_state1;
typedef typename apply2< ForwardOp, fwd_state0, typename deref<iter0>::type >::type fwd_state1;
typedef typename next<iter0>::type iter1;
typedef fwd_state1 bkwd_state1;
typedef typename apply2< BackwardOp, bkwd_state1, typename iter0::type >::type bkwd_state0;
typedef typename apply2< BackwardOp, bkwd_state1, typename deref<iter0>::type >::type bkwd_state0;
typedef bkwd_state0 state;
typedef iter1 iterator;
};
@@ -71,15 +71,15 @@ struct reverse_fold_impl< 2,First,Last,State,BackwardOp,ForwardOp >
{
typedef First iter0;
typedef State fwd_state0;
typedef typename apply2< ForwardOp, fwd_state0, typename iter0::type >::type fwd_state1;
typedef typename apply2< ForwardOp, fwd_state0, typename deref<iter0>::type >::type fwd_state1;
typedef typename next<iter0>::type iter1;
typedef typename apply2< ForwardOp, fwd_state1, typename iter1::type >::type fwd_state2;
typedef typename apply2< ForwardOp, fwd_state1, typename deref<iter1>::type >::type fwd_state2;
typedef typename next<iter1>::type iter2;
typedef fwd_state2 bkwd_state2;
typedef typename apply2< BackwardOp, bkwd_state2, typename iter1::type >::type bkwd_state1;
typedef typename apply2< BackwardOp, bkwd_state1, typename iter0::type >::type bkwd_state0;
typedef typename apply2< BackwardOp, bkwd_state2, typename deref<iter1>::type >::type bkwd_state1;
typedef typename apply2< BackwardOp, bkwd_state1, typename deref<iter0>::type >::type bkwd_state0;
typedef bkwd_state0 state;
@@ -97,18 +97,18 @@ struct reverse_fold_impl< 3,First,Last,State,BackwardOp,ForwardOp >
{
typedef First iter0;
typedef State fwd_state0;
typedef typename apply2< ForwardOp, fwd_state0, typename iter0::type >::type fwd_state1;
typedef typename apply2< ForwardOp, fwd_state0, typename deref<iter0>::type >::type fwd_state1;
typedef typename next<iter0>::type iter1;
typedef typename apply2< ForwardOp, fwd_state1, typename iter1::type >::type fwd_state2;
typedef typename apply2< ForwardOp, fwd_state1, typename deref<iter1>::type >::type fwd_state2;
typedef typename next<iter1>::type iter2;
typedef typename apply2< ForwardOp, fwd_state2, typename iter2::type >::type fwd_state3;
typedef typename apply2< ForwardOp, fwd_state2, typename deref<iter2>::type >::type fwd_state3;
typedef typename next<iter2>::type iter3;
typedef fwd_state3 bkwd_state3;
typedef typename apply2< BackwardOp, bkwd_state3, typename iter2::type >::type bkwd_state2;
typedef typename apply2< BackwardOp, bkwd_state2, typename iter1::type >::type bkwd_state1;
typedef typename apply2< BackwardOp, bkwd_state1, typename iter0::type >::type bkwd_state0;
typedef typename apply2< BackwardOp, bkwd_state3, typename deref<iter2>::type >::type bkwd_state2;
typedef typename apply2< BackwardOp, bkwd_state2, typename deref<iter1>::type >::type bkwd_state1;
typedef typename apply2< BackwardOp, bkwd_state1, typename deref<iter0>::type >::type bkwd_state0;
typedef bkwd_state0 state;
@@ -126,21 +126,21 @@ struct reverse_fold_impl< 4,First,Last,State,BackwardOp,ForwardOp >
{
typedef First iter0;
typedef State fwd_state0;
typedef typename apply2< ForwardOp, fwd_state0, typename iter0::type >::type fwd_state1;
typedef typename apply2< ForwardOp, fwd_state0, typename deref<iter0>::type >::type fwd_state1;
typedef typename next<iter0>::type iter1;
typedef typename apply2< ForwardOp, fwd_state1, typename iter1::type >::type fwd_state2;
typedef typename apply2< ForwardOp, fwd_state1, typename deref<iter1>::type >::type fwd_state2;
typedef typename next<iter1>::type iter2;
typedef typename apply2< ForwardOp, fwd_state2, typename iter2::type >::type fwd_state3;
typedef typename apply2< ForwardOp, fwd_state2, typename deref<iter2>::type >::type fwd_state3;
typedef typename next<iter2>::type iter3;
typedef typename apply2< ForwardOp, fwd_state3, typename iter3::type >::type fwd_state4;
typedef typename apply2< ForwardOp, fwd_state3, typename deref<iter3>::type >::type fwd_state4;
typedef typename next<iter3>::type iter4;
typedef fwd_state4 bkwd_state4;
typedef typename apply2< BackwardOp, bkwd_state4, typename iter3::type >::type bkwd_state3;
typedef typename apply2< BackwardOp, bkwd_state3, typename iter2::type >::type bkwd_state2;
typedef typename apply2< BackwardOp, bkwd_state2, typename iter1::type >::type bkwd_state1;
typedef typename apply2< BackwardOp, bkwd_state1, typename iter0::type >::type bkwd_state0;
typedef typename apply2< BackwardOp, bkwd_state4, typename deref<iter3>::type >::type bkwd_state3;
typedef typename apply2< BackwardOp, bkwd_state3, typename deref<iter2>::type >::type bkwd_state2;
typedef typename apply2< BackwardOp, bkwd_state2, typename deref<iter1>::type >::type bkwd_state1;
typedef typename apply2< BackwardOp, bkwd_state1, typename deref<iter0>::type >::type bkwd_state0;
typedef bkwd_state0 state;
@@ -159,13 +159,13 @@ struct reverse_fold_impl
{
typedef First iter0;
typedef State fwd_state0;
typedef typename apply2< ForwardOp, fwd_state0, typename iter0::type >::type fwd_state1;
typedef typename apply2< ForwardOp, fwd_state0, typename deref<iter0>::type >::type fwd_state1;
typedef typename next<iter0>::type iter1;
typedef typename apply2< ForwardOp, fwd_state1, typename iter1::type >::type fwd_state2;
typedef typename apply2< ForwardOp, fwd_state1, typename deref<iter1>::type >::type fwd_state2;
typedef typename next<iter1>::type iter2;
typedef typename apply2< ForwardOp, fwd_state2, typename iter2::type >::type fwd_state3;
typedef typename apply2< ForwardOp, fwd_state2, typename deref<iter2>::type >::type fwd_state3;
typedef typename next<iter2>::type iter3;
typedef typename apply2< ForwardOp, fwd_state3, typename iter3::type >::type fwd_state4;
typedef typename apply2< ForwardOp, fwd_state3, typename deref<iter3>::type >::type fwd_state4;
typedef typename next<iter3>::type iter4;
@@ -179,10 +179,10 @@ struct reverse_fold_impl
> nested_chunk;
typedef typename nested_chunk::state bkwd_state4;
typedef typename apply2< BackwardOp, bkwd_state4, typename iter3::type >::type bkwd_state3;
typedef typename apply2< BackwardOp, bkwd_state3, typename iter2::type >::type bkwd_state2;
typedef typename apply2< BackwardOp, bkwd_state2, typename iter1::type >::type bkwd_state1;
typedef typename apply2< BackwardOp, bkwd_state1, typename iter0::type >::type bkwd_state0;
typedef typename apply2< BackwardOp, bkwd_state4, typename deref<iter3>::type >::type bkwd_state3;
typedef typename apply2< BackwardOp, bkwd_state3, typename deref<iter2>::type >::type bkwd_state2;
typedef typename apply2< BackwardOp, bkwd_state2, typename deref<iter1>::type >::type bkwd_state1;
typedef typename apply2< BackwardOp, bkwd_state1, typename deref<iter0>::type >::type bkwd_state0;
typedef bkwd_state0 state;
@@ -202,7 +202,7 @@ struct reverse_fold_impl< -1,First,Last,State,BackwardOp,ForwardOp >
-1
, typename next<First>::type
, Last
, typename apply2<ForwardOp,State, typename First::type>::type
, typename apply2<ForwardOp,State, typename deref<First>::type>::type
, BackwardOp
, ForwardOp
> nested_step;
@@ -210,7 +210,7 @@ struct reverse_fold_impl< -1,First,Last,State,BackwardOp,ForwardOp >
typedef typename apply2<
BackwardOp
, typename nested_step::state
, typename First::type
, typename deref<First>::type
>::type state;
typedef typename nested_step::iterator iterator;

View File

@@ -66,12 +66,12 @@ template<> struct reverse_fold_chunk<1>
{
typedef First iter0;
typedef State fwd_state0;
typedef typename apply2< ForwardOp, fwd_state0, typename iter0::type >::type fwd_state1;
typedef typename apply2< ForwardOp, fwd_state0, typename deref<iter0>::type >::type fwd_state1;
typedef typename next<iter0>::type iter1;
typedef fwd_state1 bkwd_state1;
typedef typename apply2< BackwardOp, bkwd_state1, typename iter0::type >::type bkwd_state0;
typedef typename apply2< BackwardOp, bkwd_state1, typename deref<iter0>::type >::type bkwd_state0;
typedef bkwd_state0 state;
typedef iter1 iterator;
};
@@ -98,15 +98,15 @@ template<> struct reverse_fold_chunk<2>
{
typedef First iter0;
typedef State fwd_state0;
typedef typename apply2< ForwardOp, fwd_state0, typename iter0::type >::type fwd_state1;
typedef typename apply2< ForwardOp, fwd_state0, typename deref<iter0>::type >::type fwd_state1;
typedef typename next<iter0>::type iter1;
typedef typename apply2< ForwardOp, fwd_state1, typename iter1::type >::type fwd_state2;
typedef typename apply2< ForwardOp, fwd_state1, typename deref<iter1>::type >::type fwd_state2;
typedef typename next<iter1>::type iter2;
typedef fwd_state2 bkwd_state2;
typedef typename apply2< BackwardOp, bkwd_state2, typename iter1::type >::type bkwd_state1;
typedef typename apply2< BackwardOp, bkwd_state1, typename iter0::type >::type bkwd_state0;
typedef typename apply2< BackwardOp, bkwd_state2, typename deref<iter1>::type >::type bkwd_state1;
typedef typename apply2< BackwardOp, bkwd_state1, typename deref<iter0>::type >::type bkwd_state0;
typedef bkwd_state0 state;
@@ -135,18 +135,18 @@ template<> struct reverse_fold_chunk<3>
{
typedef First iter0;
typedef State fwd_state0;
typedef typename apply2< ForwardOp, fwd_state0, typename iter0::type >::type fwd_state1;
typedef typename apply2< ForwardOp, fwd_state0, typename deref<iter0>::type >::type fwd_state1;
typedef typename next<iter0>::type iter1;
typedef typename apply2< ForwardOp, fwd_state1, typename iter1::type >::type fwd_state2;
typedef typename apply2< ForwardOp, fwd_state1, typename deref<iter1>::type >::type fwd_state2;
typedef typename next<iter1>::type iter2;
typedef typename apply2< ForwardOp, fwd_state2, typename iter2::type >::type fwd_state3;
typedef typename apply2< ForwardOp, fwd_state2, typename deref<iter2>::type >::type fwd_state3;
typedef typename next<iter2>::type iter3;
typedef fwd_state3 bkwd_state3;
typedef typename apply2< BackwardOp, bkwd_state3, typename iter2::type >::type bkwd_state2;
typedef typename apply2< BackwardOp, bkwd_state2, typename iter1::type >::type bkwd_state1;
typedef typename apply2< BackwardOp, bkwd_state1, typename iter0::type >::type bkwd_state0;
typedef typename apply2< BackwardOp, bkwd_state3, typename deref<iter2>::type >::type bkwd_state2;
typedef typename apply2< BackwardOp, bkwd_state2, typename deref<iter1>::type >::type bkwd_state1;
typedef typename apply2< BackwardOp, bkwd_state1, typename deref<iter0>::type >::type bkwd_state0;
typedef bkwd_state0 state;
@@ -175,21 +175,21 @@ template<> struct reverse_fold_chunk<4>
{
typedef First iter0;
typedef State fwd_state0;
typedef typename apply2< ForwardOp, fwd_state0, typename iter0::type >::type fwd_state1;
typedef typename apply2< ForwardOp, fwd_state0, typename deref<iter0>::type >::type fwd_state1;
typedef typename next<iter0>::type iter1;
typedef typename apply2< ForwardOp, fwd_state1, typename iter1::type >::type fwd_state2;
typedef typename apply2< ForwardOp, fwd_state1, typename deref<iter1>::type >::type fwd_state2;
typedef typename next<iter1>::type iter2;
typedef typename apply2< ForwardOp, fwd_state2, typename iter2::type >::type fwd_state3;
typedef typename apply2< ForwardOp, fwd_state2, typename deref<iter2>::type >::type fwd_state3;
typedef typename next<iter2>::type iter3;
typedef typename apply2< ForwardOp, fwd_state3, typename iter3::type >::type fwd_state4;
typedef typename apply2< ForwardOp, fwd_state3, typename deref<iter3>::type >::type fwd_state4;
typedef typename next<iter3>::type iter4;
typedef fwd_state4 bkwd_state4;
typedef typename apply2< BackwardOp, bkwd_state4, typename iter3::type >::type bkwd_state3;
typedef typename apply2< BackwardOp, bkwd_state3, typename iter2::type >::type bkwd_state2;
typedef typename apply2< BackwardOp, bkwd_state2, typename iter1::type >::type bkwd_state1;
typedef typename apply2< BackwardOp, bkwd_state1, typename iter0::type >::type bkwd_state0;
typedef typename apply2< BackwardOp, bkwd_state4, typename deref<iter3>::type >::type bkwd_state3;
typedef typename apply2< BackwardOp, bkwd_state3, typename deref<iter2>::type >::type bkwd_state2;
typedef typename apply2< BackwardOp, bkwd_state2, typename deref<iter1>::type >::type bkwd_state1;
typedef typename apply2< BackwardOp, bkwd_state1, typename deref<iter0>::type >::type bkwd_state0;
typedef bkwd_state0 state;
@@ -219,13 +219,13 @@ struct reverse_fold_chunk
{
typedef First iter0;
typedef State fwd_state0;
typedef typename apply2< ForwardOp, fwd_state0, typename iter0::type >::type fwd_state1;
typedef typename apply2< ForwardOp, fwd_state0, typename deref<iter0>::type >::type fwd_state1;
typedef typename next<iter0>::type iter1;
typedef typename apply2< ForwardOp, fwd_state1, typename iter1::type >::type fwd_state2;
typedef typename apply2< ForwardOp, fwd_state1, typename deref<iter1>::type >::type fwd_state2;
typedef typename next<iter1>::type iter2;
typedef typename apply2< ForwardOp, fwd_state2, typename iter2::type >::type fwd_state3;
typedef typename apply2< ForwardOp, fwd_state2, typename deref<iter2>::type >::type fwd_state3;
typedef typename next<iter2>::type iter3;
typedef typename apply2< ForwardOp, fwd_state3, typename iter3::type >::type fwd_state4;
typedef typename apply2< ForwardOp, fwd_state3, typename deref<iter3>::type >::type fwd_state4;
typedef typename next<iter3>::type iter4;
@@ -239,10 +239,10 @@ struct reverse_fold_chunk
> nested_chunk;
typedef typename nested_chunk::state bkwd_state4;
typedef typename apply2< BackwardOp, bkwd_state4, typename iter3::type >::type bkwd_state3;
typedef typename apply2< BackwardOp, bkwd_state3, typename iter2::type >::type bkwd_state2;
typedef typename apply2< BackwardOp, bkwd_state2, typename iter1::type >::type bkwd_state1;
typedef typename apply2< BackwardOp, bkwd_state1, typename iter0::type >::type bkwd_state0;
typedef typename apply2< BackwardOp, bkwd_state4, typename deref<iter3>::type >::type bkwd_state3;
typedef typename apply2< BackwardOp, bkwd_state3, typename deref<iter2>::type >::type bkwd_state2;
typedef typename apply2< BackwardOp, bkwd_state2, typename deref<iter1>::type >::type bkwd_state1;
typedef typename apply2< BackwardOp, bkwd_state1, typename deref<iter0>::type >::type bkwd_state0;
typedef bkwd_state0 state;
@@ -312,7 +312,7 @@ struct reverse_fold_step
typedef reverse_fold_chunk< -1 >::template result_<
typename next<First>::type
, Last
, typename apply2<ForwardOp,State, typename First::type>::type
, typename apply2<ForwardOp,State, typename deref<First>::type>::type
, BackwardOp
, ForwardOp
> nested_step;
@@ -320,7 +320,7 @@ struct reverse_fold_step
typedef typename apply2<
BackwardOp
, typename nested_step::state
, typename First::type
, typename deref<First>::type
>::type state;
typedef typename nested_step::iterator iterator;

View File

@@ -58,12 +58,12 @@ template<> struct reverse_fold_chunk<1>
{
typedef First iter0;
typedef State fwd_state0;
typedef typename apply2< ForwardOp, fwd_state0, typename iter0::type >::type fwd_state1;
typedef typename apply2< ForwardOp, fwd_state0, typename deref<iter0>::type >::type fwd_state1;
typedef typename next<iter0>::type iter1;
typedef fwd_state1 bkwd_state1;
typedef typename apply2< BackwardOp, bkwd_state1, typename iter0::type >::type bkwd_state0;
typedef typename apply2< BackwardOp, bkwd_state1, typename deref<iter0>::type >::type bkwd_state0;
typedef bkwd_state0 state;
typedef iter1 iterator;
};
@@ -82,15 +82,15 @@ template<> struct reverse_fold_chunk<2>
{
typedef First iter0;
typedef State fwd_state0;
typedef typename apply2< ForwardOp, fwd_state0, typename iter0::type >::type fwd_state1;
typedef typename apply2< ForwardOp, fwd_state0, typename deref<iter0>::type >::type fwd_state1;
typedef typename next<iter0>::type iter1;
typedef typename apply2< ForwardOp, fwd_state1, typename iter1::type >::type fwd_state2;
typedef typename apply2< ForwardOp, fwd_state1, typename deref<iter1>::type >::type fwd_state2;
typedef typename next<iter1>::type iter2;
typedef fwd_state2 bkwd_state2;
typedef typename apply2< BackwardOp, bkwd_state2, typename iter1::type >::type bkwd_state1;
typedef typename apply2< BackwardOp, bkwd_state1, typename iter0::type >::type bkwd_state0;
typedef typename apply2< BackwardOp, bkwd_state2, typename deref<iter1>::type >::type bkwd_state1;
typedef typename apply2< BackwardOp, bkwd_state1, typename deref<iter0>::type >::type bkwd_state0;
typedef bkwd_state0 state;
@@ -111,18 +111,18 @@ template<> struct reverse_fold_chunk<3>
{
typedef First iter0;
typedef State fwd_state0;
typedef typename apply2< ForwardOp, fwd_state0, typename iter0::type >::type fwd_state1;
typedef typename apply2< ForwardOp, fwd_state0, typename deref<iter0>::type >::type fwd_state1;
typedef typename next<iter0>::type iter1;
typedef typename apply2< ForwardOp, fwd_state1, typename iter1::type >::type fwd_state2;
typedef typename apply2< ForwardOp, fwd_state1, typename deref<iter1>::type >::type fwd_state2;
typedef typename next<iter1>::type iter2;
typedef typename apply2< ForwardOp, fwd_state2, typename iter2::type >::type fwd_state3;
typedef typename apply2< ForwardOp, fwd_state2, typename deref<iter2>::type >::type fwd_state3;
typedef typename next<iter2>::type iter3;
typedef fwd_state3 bkwd_state3;
typedef typename apply2< BackwardOp, bkwd_state3, typename iter2::type >::type bkwd_state2;
typedef typename apply2< BackwardOp, bkwd_state2, typename iter1::type >::type bkwd_state1;
typedef typename apply2< BackwardOp, bkwd_state1, typename iter0::type >::type bkwd_state0;
typedef typename apply2< BackwardOp, bkwd_state3, typename deref<iter2>::type >::type bkwd_state2;
typedef typename apply2< BackwardOp, bkwd_state2, typename deref<iter1>::type >::type bkwd_state1;
typedef typename apply2< BackwardOp, bkwd_state1, typename deref<iter0>::type >::type bkwd_state0;
typedef bkwd_state0 state;
@@ -143,21 +143,21 @@ template<> struct reverse_fold_chunk<4>
{
typedef First iter0;
typedef State fwd_state0;
typedef typename apply2< ForwardOp, fwd_state0, typename iter0::type >::type fwd_state1;
typedef typename apply2< ForwardOp, fwd_state0, typename deref<iter0>::type >::type fwd_state1;
typedef typename next<iter0>::type iter1;
typedef typename apply2< ForwardOp, fwd_state1, typename iter1::type >::type fwd_state2;
typedef typename apply2< ForwardOp, fwd_state1, typename deref<iter1>::type >::type fwd_state2;
typedef typename next<iter1>::type iter2;
typedef typename apply2< ForwardOp, fwd_state2, typename iter2::type >::type fwd_state3;
typedef typename apply2< ForwardOp, fwd_state2, typename deref<iter2>::type >::type fwd_state3;
typedef typename next<iter2>::type iter3;
typedef typename apply2< ForwardOp, fwd_state3, typename iter3::type >::type fwd_state4;
typedef typename apply2< ForwardOp, fwd_state3, typename deref<iter3>::type >::type fwd_state4;
typedef typename next<iter3>::type iter4;
typedef fwd_state4 bkwd_state4;
typedef typename apply2< BackwardOp, bkwd_state4, typename iter3::type >::type bkwd_state3;
typedef typename apply2< BackwardOp, bkwd_state3, typename iter2::type >::type bkwd_state2;
typedef typename apply2< BackwardOp, bkwd_state2, typename iter1::type >::type bkwd_state1;
typedef typename apply2< BackwardOp, bkwd_state1, typename iter0::type >::type bkwd_state0;
typedef typename apply2< BackwardOp, bkwd_state4, typename deref<iter3>::type >::type bkwd_state3;
typedef typename apply2< BackwardOp, bkwd_state3, typename deref<iter2>::type >::type bkwd_state2;
typedef typename apply2< BackwardOp, bkwd_state2, typename deref<iter1>::type >::type bkwd_state1;
typedef typename apply2< BackwardOp, bkwd_state1, typename deref<iter0>::type >::type bkwd_state0;
typedef bkwd_state0 state;
@@ -179,13 +179,13 @@ struct reverse_fold_chunk
{
typedef First iter0;
typedef State fwd_state0;
typedef typename apply2< ForwardOp, fwd_state0, typename iter0::type >::type fwd_state1;
typedef typename apply2< ForwardOp, fwd_state0, typename deref<iter0>::type >::type fwd_state1;
typedef typename next<iter0>::type iter1;
typedef typename apply2< ForwardOp, fwd_state1, typename iter1::type >::type fwd_state2;
typedef typename apply2< ForwardOp, fwd_state1, typename deref<iter1>::type >::type fwd_state2;
typedef typename next<iter1>::type iter2;
typedef typename apply2< ForwardOp, fwd_state2, typename iter2::type >::type fwd_state3;
typedef typename apply2< ForwardOp, fwd_state2, typename deref<iter2>::type >::type fwd_state3;
typedef typename next<iter2>::type iter3;
typedef typename apply2< ForwardOp, fwd_state3, typename iter3::type >::type fwd_state4;
typedef typename apply2< ForwardOp, fwd_state3, typename deref<iter3>::type >::type fwd_state4;
typedef typename next<iter3>::type iter4;
@@ -199,10 +199,10 @@ struct reverse_fold_chunk
> nested_chunk;
typedef typename nested_chunk::state bkwd_state4;
typedef typename apply2< BackwardOp, bkwd_state4, typename iter3::type >::type bkwd_state3;
typedef typename apply2< BackwardOp, bkwd_state3, typename iter2::type >::type bkwd_state2;
typedef typename apply2< BackwardOp, bkwd_state2, typename iter1::type >::type bkwd_state1;
typedef typename apply2< BackwardOp, bkwd_state1, typename iter0::type >::type bkwd_state0;
typedef typename apply2< BackwardOp, bkwd_state4, typename deref<iter3>::type >::type bkwd_state3;
typedef typename apply2< BackwardOp, bkwd_state3, typename deref<iter2>::type >::type bkwd_state2;
typedef typename apply2< BackwardOp, bkwd_state2, typename deref<iter1>::type >::type bkwd_state1;
typedef typename apply2< BackwardOp, bkwd_state1, typename deref<iter0>::type >::type bkwd_state0;
typedef bkwd_state0 state;
@@ -264,7 +264,7 @@ struct reverse_fold_step
typedef reverse_fold_chunk< -1 >::template result_<
typename next<First>::type
, Last
, typename apply2<ForwardOp,State, typename First::type>::type
, typename apply2<ForwardOp,State, typename deref<First>::type>::type
, BackwardOp
, ForwardOp
> nested_step;
@@ -272,7 +272,7 @@ struct reverse_fold_step
typedef typename apply2<
BackwardOp
, typename nested_step::state
, typename First::type
, typename deref<First>::type
>::type state;
typedef typename nested_step::iterator iterator;

View File

@@ -50,12 +50,12 @@ struct reverse_fold_impl< 1,First,Last,State,BackwardOp,ForwardOp >
{
typedef First iter0;
typedef State fwd_state0;
typedef typename apply2< ForwardOp, fwd_state0, typename iter0::type >::type fwd_state1;
typedef typename apply2< ForwardOp, fwd_state0, typename deref<iter0>::type >::type fwd_state1;
typedef typename next<iter0>::type iter1;
typedef fwd_state1 bkwd_state1;
typedef typename apply2< BackwardOp, bkwd_state1, typename iter0::type >::type bkwd_state0;
typedef typename apply2< BackwardOp, bkwd_state1, typename deref<iter0>::type >::type bkwd_state0;
typedef bkwd_state0 state;
typedef iter1 iterator;
};
@@ -71,15 +71,15 @@ struct reverse_fold_impl< 2,First,Last,State,BackwardOp,ForwardOp >
{
typedef First iter0;
typedef State fwd_state0;
typedef typename apply2< ForwardOp, fwd_state0, typename iter0::type >::type fwd_state1;
typedef typename apply2< ForwardOp, fwd_state0, typename deref<iter0>::type >::type fwd_state1;
typedef typename next<iter0>::type iter1;
typedef typename apply2< ForwardOp, fwd_state1, typename iter1::type >::type fwd_state2;
typedef typename apply2< ForwardOp, fwd_state1, typename deref<iter1>::type >::type fwd_state2;
typedef typename next<iter1>::type iter2;
typedef fwd_state2 bkwd_state2;
typedef typename apply2< BackwardOp, bkwd_state2, typename iter1::type >::type bkwd_state1;
typedef typename apply2< BackwardOp, bkwd_state1, typename iter0::type >::type bkwd_state0;
typedef typename apply2< BackwardOp, bkwd_state2, typename deref<iter1>::type >::type bkwd_state1;
typedef typename apply2< BackwardOp, bkwd_state1, typename deref<iter0>::type >::type bkwd_state0;
typedef bkwd_state0 state;
@@ -97,18 +97,18 @@ struct reverse_fold_impl< 3,First,Last,State,BackwardOp,ForwardOp >
{
typedef First iter0;
typedef State fwd_state0;
typedef typename apply2< ForwardOp, fwd_state0, typename iter0::type >::type fwd_state1;
typedef typename apply2< ForwardOp, fwd_state0, typename deref<iter0>::type >::type fwd_state1;
typedef typename next<iter0>::type iter1;
typedef typename apply2< ForwardOp, fwd_state1, typename iter1::type >::type fwd_state2;
typedef typename apply2< ForwardOp, fwd_state1, typename deref<iter1>::type >::type fwd_state2;
typedef typename next<iter1>::type iter2;
typedef typename apply2< ForwardOp, fwd_state2, typename iter2::type >::type fwd_state3;
typedef typename apply2< ForwardOp, fwd_state2, typename deref<iter2>::type >::type fwd_state3;
typedef typename next<iter2>::type iter3;
typedef fwd_state3 bkwd_state3;
typedef typename apply2< BackwardOp, bkwd_state3, typename iter2::type >::type bkwd_state2;
typedef typename apply2< BackwardOp, bkwd_state2, typename iter1::type >::type bkwd_state1;
typedef typename apply2< BackwardOp, bkwd_state1, typename iter0::type >::type bkwd_state0;
typedef typename apply2< BackwardOp, bkwd_state3, typename deref<iter2>::type >::type bkwd_state2;
typedef typename apply2< BackwardOp, bkwd_state2, typename deref<iter1>::type >::type bkwd_state1;
typedef typename apply2< BackwardOp, bkwd_state1, typename deref<iter0>::type >::type bkwd_state0;
typedef bkwd_state0 state;
@@ -126,21 +126,21 @@ struct reverse_fold_impl< 4,First,Last,State,BackwardOp,ForwardOp >
{
typedef First iter0;
typedef State fwd_state0;
typedef typename apply2< ForwardOp, fwd_state0, typename iter0::type >::type fwd_state1;
typedef typename apply2< ForwardOp, fwd_state0, typename deref<iter0>::type >::type fwd_state1;
typedef typename next<iter0>::type iter1;
typedef typename apply2< ForwardOp, fwd_state1, typename iter1::type >::type fwd_state2;
typedef typename apply2< ForwardOp, fwd_state1, typename deref<iter1>::type >::type fwd_state2;
typedef typename next<iter1>::type iter2;
typedef typename apply2< ForwardOp, fwd_state2, typename iter2::type >::type fwd_state3;
typedef typename apply2< ForwardOp, fwd_state2, typename deref<iter2>::type >::type fwd_state3;
typedef typename next<iter2>::type iter3;
typedef typename apply2< ForwardOp, fwd_state3, typename iter3::type >::type fwd_state4;
typedef typename apply2< ForwardOp, fwd_state3, typename deref<iter3>::type >::type fwd_state4;
typedef typename next<iter3>::type iter4;
typedef fwd_state4 bkwd_state4;
typedef typename apply2< BackwardOp, bkwd_state4, typename iter3::type >::type bkwd_state3;
typedef typename apply2< BackwardOp, bkwd_state3, typename iter2::type >::type bkwd_state2;
typedef typename apply2< BackwardOp, bkwd_state2, typename iter1::type >::type bkwd_state1;
typedef typename apply2< BackwardOp, bkwd_state1, typename iter0::type >::type bkwd_state0;
typedef typename apply2< BackwardOp, bkwd_state4, typename deref<iter3>::type >::type bkwd_state3;
typedef typename apply2< BackwardOp, bkwd_state3, typename deref<iter2>::type >::type bkwd_state2;
typedef typename apply2< BackwardOp, bkwd_state2, typename deref<iter1>::type >::type bkwd_state1;
typedef typename apply2< BackwardOp, bkwd_state1, typename deref<iter0>::type >::type bkwd_state0;
typedef bkwd_state0 state;
@@ -159,13 +159,13 @@ struct reverse_fold_impl
{
typedef First iter0;
typedef State fwd_state0;
typedef typename apply2< ForwardOp, fwd_state0, typename iter0::type >::type fwd_state1;
typedef typename apply2< ForwardOp, fwd_state0, typename deref<iter0>::type >::type fwd_state1;
typedef typename next<iter0>::type iter1;
typedef typename apply2< ForwardOp, fwd_state1, typename iter1::type >::type fwd_state2;
typedef typename apply2< ForwardOp, fwd_state1, typename deref<iter1>::type >::type fwd_state2;
typedef typename next<iter1>::type iter2;
typedef typename apply2< ForwardOp, fwd_state2, typename iter2::type >::type fwd_state3;
typedef typename apply2< ForwardOp, fwd_state2, typename deref<iter2>::type >::type fwd_state3;
typedef typename next<iter2>::type iter3;
typedef typename apply2< ForwardOp, fwd_state3, typename iter3::type >::type fwd_state4;
typedef typename apply2< ForwardOp, fwd_state3, typename deref<iter3>::type >::type fwd_state4;
typedef typename next<iter3>::type iter4;
@@ -179,10 +179,10 @@ struct reverse_fold_impl
> nested_chunk;
typedef typename nested_chunk::state bkwd_state4;
typedef typename apply2< BackwardOp, bkwd_state4, typename iter3::type >::type bkwd_state3;
typedef typename apply2< BackwardOp, bkwd_state3, typename iter2::type >::type bkwd_state2;
typedef typename apply2< BackwardOp, bkwd_state2, typename iter1::type >::type bkwd_state1;
typedef typename apply2< BackwardOp, bkwd_state1, typename iter0::type >::type bkwd_state0;
typedef typename apply2< BackwardOp, bkwd_state4, typename deref<iter3>::type >::type bkwd_state3;
typedef typename apply2< BackwardOp, bkwd_state3, typename deref<iter2>::type >::type bkwd_state2;
typedef typename apply2< BackwardOp, bkwd_state2, typename deref<iter1>::type >::type bkwd_state1;
typedef typename apply2< BackwardOp, bkwd_state1, typename deref<iter0>::type >::type bkwd_state0;
typedef bkwd_state0 state;
@@ -202,7 +202,7 @@ struct reverse_fold_impl< -1,First,Last,State,BackwardOp,ForwardOp >
-1
, typename next<First>::type
, Last
, typename apply2<ForwardOp,State, typename First::type>::type
, typename apply2<ForwardOp,State, typename deref<First>::type>::type
, BackwardOp
, ForwardOp
> nested_step;
@@ -210,7 +210,7 @@ struct reverse_fold_impl< -1,First,Last,State,BackwardOp,ForwardOp >
typedef typename apply2<
BackwardOp
, typename nested_step::state
, typename First::type
, typename deref<First>::type
>::type state;
typedef typename nested_step::iterator iterator;

View File

@@ -58,12 +58,12 @@ template<> struct reverse_fold_chunk<1>
{
typedef First iter0;
typedef State fwd_state0;
typedef typename apply2< ForwardOp, fwd_state0, typename iter0::type >::type fwd_state1;
typedef typename apply2< ForwardOp, fwd_state0, typename deref<iter0>::type >::type fwd_state1;
typedef typename next<iter0>::type iter1;
typedef fwd_state1 bkwd_state1;
typedef typename apply2< BackwardOp, bkwd_state1, typename iter0::type >::type bkwd_state0;
typedef typename apply2< BackwardOp, bkwd_state1, typename deref<iter0>::type >::type bkwd_state0;
typedef bkwd_state0 state;
typedef iter1 iterator;
};
@@ -82,15 +82,15 @@ template<> struct reverse_fold_chunk<2>
{
typedef First iter0;
typedef State fwd_state0;
typedef typename apply2< ForwardOp, fwd_state0, typename iter0::type >::type fwd_state1;
typedef typename apply2< ForwardOp, fwd_state0, typename deref<iter0>::type >::type fwd_state1;
typedef typename next<iter0>::type iter1;
typedef typename apply2< ForwardOp, fwd_state1, typename iter1::type >::type fwd_state2;
typedef typename apply2< ForwardOp, fwd_state1, typename deref<iter1>::type >::type fwd_state2;
typedef typename next<iter1>::type iter2;
typedef fwd_state2 bkwd_state2;
typedef typename apply2< BackwardOp, bkwd_state2, typename iter1::type >::type bkwd_state1;
typedef typename apply2< BackwardOp, bkwd_state1, typename iter0::type >::type bkwd_state0;
typedef typename apply2< BackwardOp, bkwd_state2, typename deref<iter1>::type >::type bkwd_state1;
typedef typename apply2< BackwardOp, bkwd_state1, typename deref<iter0>::type >::type bkwd_state0;
typedef bkwd_state0 state;
@@ -111,18 +111,18 @@ template<> struct reverse_fold_chunk<3>
{
typedef First iter0;
typedef State fwd_state0;
typedef typename apply2< ForwardOp, fwd_state0, typename iter0::type >::type fwd_state1;
typedef typename apply2< ForwardOp, fwd_state0, typename deref<iter0>::type >::type fwd_state1;
typedef typename next<iter0>::type iter1;
typedef typename apply2< ForwardOp, fwd_state1, typename iter1::type >::type fwd_state2;
typedef typename apply2< ForwardOp, fwd_state1, typename deref<iter1>::type >::type fwd_state2;
typedef typename next<iter1>::type iter2;
typedef typename apply2< ForwardOp, fwd_state2, typename iter2::type >::type fwd_state3;
typedef typename apply2< ForwardOp, fwd_state2, typename deref<iter2>::type >::type fwd_state3;
typedef typename next<iter2>::type iter3;
typedef fwd_state3 bkwd_state3;
typedef typename apply2< BackwardOp, bkwd_state3, typename iter2::type >::type bkwd_state2;
typedef typename apply2< BackwardOp, bkwd_state2, typename iter1::type >::type bkwd_state1;
typedef typename apply2< BackwardOp, bkwd_state1, typename iter0::type >::type bkwd_state0;
typedef typename apply2< BackwardOp, bkwd_state3, typename deref<iter2>::type >::type bkwd_state2;
typedef typename apply2< BackwardOp, bkwd_state2, typename deref<iter1>::type >::type bkwd_state1;
typedef typename apply2< BackwardOp, bkwd_state1, typename deref<iter0>::type >::type bkwd_state0;
typedef bkwd_state0 state;
@@ -143,21 +143,21 @@ template<> struct reverse_fold_chunk<4>
{
typedef First iter0;
typedef State fwd_state0;
typedef typename apply2< ForwardOp, fwd_state0, typename iter0::type >::type fwd_state1;
typedef typename apply2< ForwardOp, fwd_state0, typename deref<iter0>::type >::type fwd_state1;
typedef typename next<iter0>::type iter1;
typedef typename apply2< ForwardOp, fwd_state1, typename iter1::type >::type fwd_state2;
typedef typename apply2< ForwardOp, fwd_state1, typename deref<iter1>::type >::type fwd_state2;
typedef typename next<iter1>::type iter2;
typedef typename apply2< ForwardOp, fwd_state2, typename iter2::type >::type fwd_state3;
typedef typename apply2< ForwardOp, fwd_state2, typename deref<iter2>::type >::type fwd_state3;
typedef typename next<iter2>::type iter3;
typedef typename apply2< ForwardOp, fwd_state3, typename iter3::type >::type fwd_state4;
typedef typename apply2< ForwardOp, fwd_state3, typename deref<iter3>::type >::type fwd_state4;
typedef typename next<iter3>::type iter4;
typedef fwd_state4 bkwd_state4;
typedef typename apply2< BackwardOp, bkwd_state4, typename iter3::type >::type bkwd_state3;
typedef typename apply2< BackwardOp, bkwd_state3, typename iter2::type >::type bkwd_state2;
typedef typename apply2< BackwardOp, bkwd_state2, typename iter1::type >::type bkwd_state1;
typedef typename apply2< BackwardOp, bkwd_state1, typename iter0::type >::type bkwd_state0;
typedef typename apply2< BackwardOp, bkwd_state4, typename deref<iter3>::type >::type bkwd_state3;
typedef typename apply2< BackwardOp, bkwd_state3, typename deref<iter2>::type >::type bkwd_state2;
typedef typename apply2< BackwardOp, bkwd_state2, typename deref<iter1>::type >::type bkwd_state1;
typedef typename apply2< BackwardOp, bkwd_state1, typename deref<iter0>::type >::type bkwd_state0;
typedef bkwd_state0 state;
@@ -179,13 +179,13 @@ struct reverse_fold_chunk
{
typedef First iter0;
typedef State fwd_state0;
typedef typename apply2< ForwardOp, fwd_state0, typename iter0::type >::type fwd_state1;
typedef typename apply2< ForwardOp, fwd_state0, typename deref<iter0>::type >::type fwd_state1;
typedef typename next<iter0>::type iter1;
typedef typename apply2< ForwardOp, fwd_state1, typename iter1::type >::type fwd_state2;
typedef typename apply2< ForwardOp, fwd_state1, typename deref<iter1>::type >::type fwd_state2;
typedef typename next<iter1>::type iter2;
typedef typename apply2< ForwardOp, fwd_state2, typename iter2::type >::type fwd_state3;
typedef typename apply2< ForwardOp, fwd_state2, typename deref<iter2>::type >::type fwd_state3;
typedef typename next<iter2>::type iter3;
typedef typename apply2< ForwardOp, fwd_state3, typename iter3::type >::type fwd_state4;
typedef typename apply2< ForwardOp, fwd_state3, typename deref<iter3>::type >::type fwd_state4;
typedef typename next<iter3>::type iter4;
@@ -199,10 +199,10 @@ struct reverse_fold_chunk
> nested_chunk;
typedef typename nested_chunk::state bkwd_state4;
typedef typename apply2< BackwardOp, bkwd_state4, typename iter3::type >::type bkwd_state3;
typedef typename apply2< BackwardOp, bkwd_state3, typename iter2::type >::type bkwd_state2;
typedef typename apply2< BackwardOp, bkwd_state2, typename iter1::type >::type bkwd_state1;
typedef typename apply2< BackwardOp, bkwd_state1, typename iter0::type >::type bkwd_state0;
typedef typename apply2< BackwardOp, bkwd_state4, typename deref<iter3>::type >::type bkwd_state3;
typedef typename apply2< BackwardOp, bkwd_state3, typename deref<iter2>::type >::type bkwd_state2;
typedef typename apply2< BackwardOp, bkwd_state2, typename deref<iter1>::type >::type bkwd_state1;
typedef typename apply2< BackwardOp, bkwd_state1, typename deref<iter0>::type >::type bkwd_state0;
typedef bkwd_state0 state;
@@ -264,7 +264,7 @@ struct reverse_fold_step
typedef reverse_fold_chunk< -1 >::template result_<
typename next<First>::type
, Last
, typename apply2<ForwardOp,State, typename First::type>::type
, typename apply2<ForwardOp,State, typename deref<First>::type>::type
, BackwardOp
, ForwardOp
> nested_step;
@@ -272,7 +272,7 @@ struct reverse_fold_step
typedef typename apply2<
BackwardOp
, typename nested_step::state
, typename First::type
, typename deref<First>::type
>::type state;
typedef typename nested_step::iterator iterator;

View File

@@ -50,12 +50,12 @@ struct reverse_fold_impl< 1,First,Last,State,BackwardOp,ForwardOp >
{
typedef First iter0;
typedef State fwd_state0;
typedef typename apply2< ForwardOp, fwd_state0, typename iter0::type >::type fwd_state1;
typedef typename apply2< ForwardOp, fwd_state0, typename deref<iter0>::type >::type fwd_state1;
typedef typename next<iter0>::type iter1;
typedef fwd_state1 bkwd_state1;
typedef typename apply2< BackwardOp, bkwd_state1, typename iter0::type >::type bkwd_state0;
typedef typename apply2< BackwardOp, bkwd_state1, typename deref<iter0>::type >::type bkwd_state0;
typedef bkwd_state0 state;
typedef iter1 iterator;
};
@@ -71,15 +71,15 @@ struct reverse_fold_impl< 2,First,Last,State,BackwardOp,ForwardOp >
{
typedef First iter0;
typedef State fwd_state0;
typedef typename apply2< ForwardOp, fwd_state0, typename iter0::type >::type fwd_state1;
typedef typename apply2< ForwardOp, fwd_state0, typename deref<iter0>::type >::type fwd_state1;
typedef typename next<iter0>::type iter1;
typedef typename apply2< ForwardOp, fwd_state1, typename iter1::type >::type fwd_state2;
typedef typename apply2< ForwardOp, fwd_state1, typename deref<iter1>::type >::type fwd_state2;
typedef typename next<iter1>::type iter2;
typedef fwd_state2 bkwd_state2;
typedef typename apply2< BackwardOp, bkwd_state2, typename iter1::type >::type bkwd_state1;
typedef typename apply2< BackwardOp, bkwd_state1, typename iter0::type >::type bkwd_state0;
typedef typename apply2< BackwardOp, bkwd_state2, typename deref<iter1>::type >::type bkwd_state1;
typedef typename apply2< BackwardOp, bkwd_state1, typename deref<iter0>::type >::type bkwd_state0;
typedef bkwd_state0 state;
@@ -97,18 +97,18 @@ struct reverse_fold_impl< 3,First,Last,State,BackwardOp,ForwardOp >
{
typedef First iter0;
typedef State fwd_state0;
typedef typename apply2< ForwardOp, fwd_state0, typename iter0::type >::type fwd_state1;
typedef typename apply2< ForwardOp, fwd_state0, typename deref<iter0>::type >::type fwd_state1;
typedef typename next<iter0>::type iter1;
typedef typename apply2< ForwardOp, fwd_state1, typename iter1::type >::type fwd_state2;
typedef typename apply2< ForwardOp, fwd_state1, typename deref<iter1>::type >::type fwd_state2;
typedef typename next<iter1>::type iter2;
typedef typename apply2< ForwardOp, fwd_state2, typename iter2::type >::type fwd_state3;
typedef typename apply2< ForwardOp, fwd_state2, typename deref<iter2>::type >::type fwd_state3;
typedef typename next<iter2>::type iter3;
typedef fwd_state3 bkwd_state3;
typedef typename apply2< BackwardOp, bkwd_state3, typename iter2::type >::type bkwd_state2;
typedef typename apply2< BackwardOp, bkwd_state2, typename iter1::type >::type bkwd_state1;
typedef typename apply2< BackwardOp, bkwd_state1, typename iter0::type >::type bkwd_state0;
typedef typename apply2< BackwardOp, bkwd_state3, typename deref<iter2>::type >::type bkwd_state2;
typedef typename apply2< BackwardOp, bkwd_state2, typename deref<iter1>::type >::type bkwd_state1;
typedef typename apply2< BackwardOp, bkwd_state1, typename deref<iter0>::type >::type bkwd_state0;
typedef bkwd_state0 state;
@@ -126,21 +126,21 @@ struct reverse_fold_impl< 4,First,Last,State,BackwardOp,ForwardOp >
{
typedef First iter0;
typedef State fwd_state0;
typedef typename apply2< ForwardOp, fwd_state0, typename iter0::type >::type fwd_state1;
typedef typename apply2< ForwardOp, fwd_state0, typename deref<iter0>::type >::type fwd_state1;
typedef typename next<iter0>::type iter1;
typedef typename apply2< ForwardOp, fwd_state1, typename iter1::type >::type fwd_state2;
typedef typename apply2< ForwardOp, fwd_state1, typename deref<iter1>::type >::type fwd_state2;
typedef typename next<iter1>::type iter2;
typedef typename apply2< ForwardOp, fwd_state2, typename iter2::type >::type fwd_state3;
typedef typename apply2< ForwardOp, fwd_state2, typename deref<iter2>::type >::type fwd_state3;
typedef typename next<iter2>::type iter3;
typedef typename apply2< ForwardOp, fwd_state3, typename iter3::type >::type fwd_state4;
typedef typename apply2< ForwardOp, fwd_state3, typename deref<iter3>::type >::type fwd_state4;
typedef typename next<iter3>::type iter4;
typedef fwd_state4 bkwd_state4;
typedef typename apply2< BackwardOp, bkwd_state4, typename iter3::type >::type bkwd_state3;
typedef typename apply2< BackwardOp, bkwd_state3, typename iter2::type >::type bkwd_state2;
typedef typename apply2< BackwardOp, bkwd_state2, typename iter1::type >::type bkwd_state1;
typedef typename apply2< BackwardOp, bkwd_state1, typename iter0::type >::type bkwd_state0;
typedef typename apply2< BackwardOp, bkwd_state4, typename deref<iter3>::type >::type bkwd_state3;
typedef typename apply2< BackwardOp, bkwd_state3, typename deref<iter2>::type >::type bkwd_state2;
typedef typename apply2< BackwardOp, bkwd_state2, typename deref<iter1>::type >::type bkwd_state1;
typedef typename apply2< BackwardOp, bkwd_state1, typename deref<iter0>::type >::type bkwd_state0;
typedef bkwd_state0 state;
@@ -159,13 +159,13 @@ struct reverse_fold_impl
{
typedef First iter0;
typedef State fwd_state0;
typedef typename apply2< ForwardOp, fwd_state0, typename iter0::type >::type fwd_state1;
typedef typename apply2< ForwardOp, fwd_state0, typename deref<iter0>::type >::type fwd_state1;
typedef typename next<iter0>::type iter1;
typedef typename apply2< ForwardOp, fwd_state1, typename iter1::type >::type fwd_state2;
typedef typename apply2< ForwardOp, fwd_state1, typename deref<iter1>::type >::type fwd_state2;
typedef typename next<iter1>::type iter2;
typedef typename apply2< ForwardOp, fwd_state2, typename iter2::type >::type fwd_state3;
typedef typename apply2< ForwardOp, fwd_state2, typename deref<iter2>::type >::type fwd_state3;
typedef typename next<iter2>::type iter3;
typedef typename apply2< ForwardOp, fwd_state3, typename iter3::type >::type fwd_state4;
typedef typename apply2< ForwardOp, fwd_state3, typename deref<iter3>::type >::type fwd_state4;
typedef typename next<iter3>::type iter4;
@@ -179,10 +179,10 @@ struct reverse_fold_impl
> nested_chunk;
typedef typename nested_chunk::state bkwd_state4;
typedef typename apply2< BackwardOp, bkwd_state4, typename iter3::type >::type bkwd_state3;
typedef typename apply2< BackwardOp, bkwd_state3, typename iter2::type >::type bkwd_state2;
typedef typename apply2< BackwardOp, bkwd_state2, typename iter1::type >::type bkwd_state1;
typedef typename apply2< BackwardOp, bkwd_state1, typename iter0::type >::type bkwd_state0;
typedef typename apply2< BackwardOp, bkwd_state4, typename deref<iter3>::type >::type bkwd_state3;
typedef typename apply2< BackwardOp, bkwd_state3, typename deref<iter2>::type >::type bkwd_state2;
typedef typename apply2< BackwardOp, bkwd_state2, typename deref<iter1>::type >::type bkwd_state1;
typedef typename apply2< BackwardOp, bkwd_state1, typename deref<iter0>::type >::type bkwd_state0;
typedef bkwd_state0 state;
@@ -202,7 +202,7 @@ struct reverse_fold_impl< -1,First,Last,State,BackwardOp,ForwardOp >
-1
, typename next<First>::type
, Last
, typename apply2<ForwardOp,State, typename First::type>::type
, typename apply2<ForwardOp,State, typename deref<First>::type>::type
, BackwardOp
, ForwardOp
> nested_step;
@@ -210,7 +210,7 @@ struct reverse_fold_impl< -1,First,Last,State,BackwardOp,ForwardOp >
typedef typename apply2<
BackwardOp
, typename nested_step::state
, typename First::type
, typename deref<First>::type
>::type state;
typedef typename nested_step::iterator iterator;

View File

@@ -50,12 +50,12 @@ struct reverse_fold_impl< 1,First,Last,State,BackwardOp,ForwardOp >
{
typedef First iter0;
typedef State fwd_state0;
typedef typename apply2< ForwardOp, fwd_state0, typename iter0::type >::type fwd_state1;
typedef typename apply2< ForwardOp, fwd_state0, typename deref<iter0>::type >::type fwd_state1;
typedef typename next<iter0>::type iter1;
typedef fwd_state1 bkwd_state1;
typedef typename apply2< BackwardOp, bkwd_state1, typename iter0::type >::type bkwd_state0;
typedef typename apply2< BackwardOp, bkwd_state1, typename deref<iter0>::type >::type bkwd_state0;
typedef bkwd_state0 state;
typedef iter1 iterator;
};
@@ -71,15 +71,15 @@ struct reverse_fold_impl< 2,First,Last,State,BackwardOp,ForwardOp >
{
typedef First iter0;
typedef State fwd_state0;
typedef typename apply2< ForwardOp, fwd_state0, typename iter0::type >::type fwd_state1;
typedef typename apply2< ForwardOp, fwd_state0, typename deref<iter0>::type >::type fwd_state1;
typedef typename next<iter0>::type iter1;
typedef typename apply2< ForwardOp, fwd_state1, typename iter1::type >::type fwd_state2;
typedef typename apply2< ForwardOp, fwd_state1, typename deref<iter1>::type >::type fwd_state2;
typedef typename next<iter1>::type iter2;
typedef fwd_state2 bkwd_state2;
typedef typename apply2< BackwardOp, bkwd_state2, typename iter1::type >::type bkwd_state1;
typedef typename apply2< BackwardOp, bkwd_state1, typename iter0::type >::type bkwd_state0;
typedef typename apply2< BackwardOp, bkwd_state2, typename deref<iter1>::type >::type bkwd_state1;
typedef typename apply2< BackwardOp, bkwd_state1, typename deref<iter0>::type >::type bkwd_state0;
typedef bkwd_state0 state;
@@ -97,18 +97,18 @@ struct reverse_fold_impl< 3,First,Last,State,BackwardOp,ForwardOp >
{
typedef First iter0;
typedef State fwd_state0;
typedef typename apply2< ForwardOp, fwd_state0, typename iter0::type >::type fwd_state1;
typedef typename apply2< ForwardOp, fwd_state0, typename deref<iter0>::type >::type fwd_state1;
typedef typename next<iter0>::type iter1;
typedef typename apply2< ForwardOp, fwd_state1, typename iter1::type >::type fwd_state2;
typedef typename apply2< ForwardOp, fwd_state1, typename deref<iter1>::type >::type fwd_state2;
typedef typename next<iter1>::type iter2;
typedef typename apply2< ForwardOp, fwd_state2, typename iter2::type >::type fwd_state3;
typedef typename apply2< ForwardOp, fwd_state2, typename deref<iter2>::type >::type fwd_state3;
typedef typename next<iter2>::type iter3;
typedef fwd_state3 bkwd_state3;
typedef typename apply2< BackwardOp, bkwd_state3, typename iter2::type >::type bkwd_state2;
typedef typename apply2< BackwardOp, bkwd_state2, typename iter1::type >::type bkwd_state1;
typedef typename apply2< BackwardOp, bkwd_state1, typename iter0::type >::type bkwd_state0;
typedef typename apply2< BackwardOp, bkwd_state3, typename deref<iter2>::type >::type bkwd_state2;
typedef typename apply2< BackwardOp, bkwd_state2, typename deref<iter1>::type >::type bkwd_state1;
typedef typename apply2< BackwardOp, bkwd_state1, typename deref<iter0>::type >::type bkwd_state0;
typedef bkwd_state0 state;
@@ -126,21 +126,21 @@ struct reverse_fold_impl< 4,First,Last,State,BackwardOp,ForwardOp >
{
typedef First iter0;
typedef State fwd_state0;
typedef typename apply2< ForwardOp, fwd_state0, typename iter0::type >::type fwd_state1;
typedef typename apply2< ForwardOp, fwd_state0, typename deref<iter0>::type >::type fwd_state1;
typedef typename next<iter0>::type iter1;
typedef typename apply2< ForwardOp, fwd_state1, typename iter1::type >::type fwd_state2;
typedef typename apply2< ForwardOp, fwd_state1, typename deref<iter1>::type >::type fwd_state2;
typedef typename next<iter1>::type iter2;
typedef typename apply2< ForwardOp, fwd_state2, typename iter2::type >::type fwd_state3;
typedef typename apply2< ForwardOp, fwd_state2, typename deref<iter2>::type >::type fwd_state3;
typedef typename next<iter2>::type iter3;
typedef typename apply2< ForwardOp, fwd_state3, typename iter3::type >::type fwd_state4;
typedef typename apply2< ForwardOp, fwd_state3, typename deref<iter3>::type >::type fwd_state4;
typedef typename next<iter3>::type iter4;
typedef fwd_state4 bkwd_state4;
typedef typename apply2< BackwardOp, bkwd_state4, typename iter3::type >::type bkwd_state3;
typedef typename apply2< BackwardOp, bkwd_state3, typename iter2::type >::type bkwd_state2;
typedef typename apply2< BackwardOp, bkwd_state2, typename iter1::type >::type bkwd_state1;
typedef typename apply2< BackwardOp, bkwd_state1, typename iter0::type >::type bkwd_state0;
typedef typename apply2< BackwardOp, bkwd_state4, typename deref<iter3>::type >::type bkwd_state3;
typedef typename apply2< BackwardOp, bkwd_state3, typename deref<iter2>::type >::type bkwd_state2;
typedef typename apply2< BackwardOp, bkwd_state2, typename deref<iter1>::type >::type bkwd_state1;
typedef typename apply2< BackwardOp, bkwd_state1, typename deref<iter0>::type >::type bkwd_state0;
typedef bkwd_state0 state;
@@ -159,13 +159,13 @@ struct reverse_fold_impl
{
typedef First iter0;
typedef State fwd_state0;
typedef typename apply2< ForwardOp, fwd_state0, typename iter0::type >::type fwd_state1;
typedef typename apply2< ForwardOp, fwd_state0, typename deref<iter0>::type >::type fwd_state1;
typedef typename next<iter0>::type iter1;
typedef typename apply2< ForwardOp, fwd_state1, typename iter1::type >::type fwd_state2;
typedef typename apply2< ForwardOp, fwd_state1, typename deref<iter1>::type >::type fwd_state2;
typedef typename next<iter1>::type iter2;
typedef typename apply2< ForwardOp, fwd_state2, typename iter2::type >::type fwd_state3;
typedef typename apply2< ForwardOp, fwd_state2, typename deref<iter2>::type >::type fwd_state3;
typedef typename next<iter2>::type iter3;
typedef typename apply2< ForwardOp, fwd_state3, typename iter3::type >::type fwd_state4;
typedef typename apply2< ForwardOp, fwd_state3, typename deref<iter3>::type >::type fwd_state4;
typedef typename next<iter3>::type iter4;
@@ -179,10 +179,10 @@ struct reverse_fold_impl
> nested_chunk;
typedef typename nested_chunk::state bkwd_state4;
typedef typename apply2< BackwardOp, bkwd_state4, typename iter3::type >::type bkwd_state3;
typedef typename apply2< BackwardOp, bkwd_state3, typename iter2::type >::type bkwd_state2;
typedef typename apply2< BackwardOp, bkwd_state2, typename iter1::type >::type bkwd_state1;
typedef typename apply2< BackwardOp, bkwd_state1, typename iter0::type >::type bkwd_state0;
typedef typename apply2< BackwardOp, bkwd_state4, typename deref<iter3>::type >::type bkwd_state3;
typedef typename apply2< BackwardOp, bkwd_state3, typename deref<iter2>::type >::type bkwd_state2;
typedef typename apply2< BackwardOp, bkwd_state2, typename deref<iter1>::type >::type bkwd_state1;
typedef typename apply2< BackwardOp, bkwd_state1, typename deref<iter0>::type >::type bkwd_state0;
typedef bkwd_state0 state;
@@ -202,7 +202,7 @@ struct reverse_fold_impl< -1,First,Last,State,BackwardOp,ForwardOp >
-1
, typename next<First>::type
, Last
, typename apply2<ForwardOp,State, typename First::type>::type
, typename apply2<ForwardOp,State, typename deref<First>::type>::type
, BackwardOp
, ForwardOp
> nested_step;
@@ -210,7 +210,7 @@ struct reverse_fold_impl< -1,First,Last,State,BackwardOp,ForwardOp >
typedef typename apply2<
BackwardOp
, typename nested_step::state
, typename First::type
, typename deref<First>::type
>::type state;
typedef typename nested_step::iterator iterator;

View File

@@ -16,6 +16,7 @@
#if !defined(BOOST_MPL_PREPROCESSING_MODE)
# include <boost/mpl/next_prior.hpp>
# include <boost/mpl/deref.hpp>
# include <boost/mpl/apply.hpp>
# include <boost/mpl/aux_/config/ctps.hpp>
# if defined(BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION) \
@@ -35,7 +36,7 @@
#else
# define AUX778076_FOLD_IMPL_OP(iter) typename iter::type
# define AUX778076_FOLD_IMPL_OP(iter) typename deref<iter>::type
# define AUX778076_FOLD_IMPL_NAME_PREFIX reverse_fold
# include <boost/mpl/aux_/reverse_fold_impl_body.hpp>

View File

@@ -15,10 +15,15 @@
// $Revision$
#include <boost/mpl/assert.hpp>
#include <boost/preprocessor/cat.hpp>
#define MPL_ASSERT(pred) BOOST_MPL_ASSERT(pred)
#define MPL_ASSERT_NOT(pred) BOOST_MPL_ASSERT_NOT(pred)
#define MPL_ASSERT_MSG(c, msg, types) BOOST_MPL_ASSERT_MSG(c, msg, types)
#define MPL_ASSERT_RELATION(x, rel, y) BOOST_MPL_ASSERT_RELATION(x, rel, y)
#define MPL_ASSERT_INSTANTIATION(x) \
enum { BOOST_PP_CAT(instantiation_test, __LINE__) = sizeof( x ) } \
/**/
#endif // BOOST_MPL_AUX_TEST_ASSERT_HPP_INCLUDED

View File

@@ -54,8 +54,8 @@ struct joint_view
typedef joint_view type;
typedef aux::joint_view_tag tag;
typedef typename aux::joint_iter<first1_,last1_,first2_> begin;
typedef typename aux::joint_iter<last1_,last1_,last2_> end;
typedef joint_iter<first1_,last1_,first2_> begin;
typedef joint_iter<last1_,last1_,last2_> end;
};
BOOST_MPL_AUX_NA_SPEC(2, joint_view)

View File

@@ -16,11 +16,37 @@
#include <boost/mpl/iterator_tags.hpp>
#include <boost/mpl/next_prior.hpp>
#include <boost/mpl/deref.hpp>
#include <boost/mpl/list/aux_/item.hpp>
#include <boost/mpl/aux_/na.hpp>
#include <boost/mpl/aux_/lambda_spec.hpp>
#include <boost/mpl/aux_/config/ctps.hpp>
namespace boost { namespace mpl {
#if !defined(BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION)
template< typename Node >
struct l_iter
{
typedef aux::l_iter_tag tag;
typedef forward_iterator_tag category;
};
template< typename Node >
struct deref< l_iter<Node> >
{
typedef typename Node::item type;
};
template< typename Node >
struct next< l_iter<Node> >
{
typedef l_iter< typename Node::next > type;
};
#else // BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION
template< typename Node >
struct l_iter
{
@@ -30,13 +56,20 @@ struct l_iter
typedef l_iter< typename mpl::next<Node>::type > next;
};
#endif
template<> struct l_iter<l_end>
{
typedef aux::l_iter_tag tag;
typedef forward_iterator_tag category;
#if defined(BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION)
typedef na type;
typedef l_iter next;
#endif
};
BOOST_MPL_AUX_PASS_THROUGH_LAMBDA_SPEC(1,l_iter)
BOOST_MPL_AUX_PASS_THROUGH_LAMBDA_SPEC(1, l_iter)
}}

View File

@@ -20,6 +20,7 @@
#include <boost/mpl/advance.hpp>
#include <boost/mpl/distance.hpp>
#include <boost/mpl/next_prior.hpp>
#include <boost/mpl/deref.hpp>
#include <boost/mpl/min_max.hpp>
#include <boost/mpl/pair.hpp>
#include <boost/mpl/iterator_tags.hpp>
@@ -44,6 +45,7 @@ struct pair_iter_ops
typedef typename mpl::next<I1>::type i1_;
typedef typename mpl::next<I2>::type i2_;
typedef pair_iter<i1_,i2_,Category> next;
typedef pair< typename deref<I1>::type, typename deref<I2>::type > type;
};
};
@@ -104,11 +106,17 @@ struct pair_iter
#endif
{
typedef Category category;
typedef pair<typename I1::type, typename I2::type> type;
};
#if !defined(BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION)
template< typename I1, typename I2, typename C >
struct deref< pair_iter<I1,I2,C> >
{
typedef pair< typename deref<I1>::type, typename deref<I2>::type > type;
};
template< typename I1, typename I2, typename C >
struct next< pair_iter<I1,I2,C> >
{

View File

@@ -27,8 +27,8 @@ MPL_TEST_CASE()
typedef find<types, short>::type types_iter;
typedef find< values, integral_c<int,7> >::type values_iter;
MPL_ASSERT(( is_same<types_iter::type, short> ));
MPL_ASSERT_RELATION( values_iter::type::value, ==, 7 );
MPL_ASSERT(( is_same< deref<types_iter>::type, short> ));
MPL_ASSERT_RELATION( deref<values_iter>::type::value, ==, 7 );
typedef begin<types>::type types_first;
typedef begin<values>::type values_first;

View File

@@ -14,10 +14,12 @@
#include <boost/mpl/joint_view.hpp>
#include <boost/mpl/range_c.hpp>
#include <boost/mpl/list.hpp>
#include <boost/mpl/equal.hpp>
#include <boost/mpl/size.hpp>
#include <boost/mpl/aux_/test.hpp>
MPL_TEST_CASE()
{
typedef joint_view<
@@ -30,3 +32,24 @@ MPL_TEST_CASE()
MPL_ASSERT(( equal<numbers,answer> ));
MPL_ASSERT_RELATION( size<numbers>::value, ==, 15 );
}
template< typename View > struct test_is_empty
{
typedef typename begin<View>::type first_;
typedef typename end<View>::type last_;
MPL_ASSERT_RELATION( size<View>::value, ==, 0 );
MPL_ASSERT(( is_same< first_,last_> ));
MPL_ASSERT_INSTANTIATION( View );
MPL_ASSERT_INSTANTIATION( first_ );
MPL_ASSERT_INSTANTIATION( last_ );
};
MPL_TEST_CASE()
{
test_is_empty< joint_view< list0<>,list0<> > >();
test_is_empty< joint_view< list<>,list0<> > >();
test_is_empty< joint_view< list<>,list<> > >();
test_is_empty< joint_view< list<>, joint_view< list0<>,list0<> > > >();
}