1.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000
1.2 +++ b/epoc32/include/stdapis/boost/mpl/aux_/fold_impl.hpp Wed Mar 31 12:27:01 2010 +0100
1.3 @@ -0,0 +1,180 @@
1.4 +
1.5 +// Copyright Aleksey Gurtovoy 2000-2004
1.6 +//
1.7 +// Distributed under the Boost Software License, Version 1.0.
1.8 +// (See accompanying file LICENSE_1_0.txt or copy at
1.9 +// http://www.boost.org/LICENSE_1_0.txt)
1.10 +//
1.11 +
1.12 +// Preprocessed version of "boost/mpl/aux_/fold_impl.hpp" header
1.13 +// -- DO NOT modify by hand!
1.14 +
1.15 +namespace boost { namespace mpl { namespace aux {
1.16 +
1.17 +/// forward declaration
1.18 +
1.19 +template<
1.20 + int N
1.21 + , typename First
1.22 + , typename Last
1.23 + , typename State
1.24 + , typename ForwardOp
1.25 + >
1.26 +struct fold_impl;
1.27 +
1.28 +template<
1.29 + typename First
1.30 + , typename Last
1.31 + , typename State
1.32 + , typename ForwardOp
1.33 + >
1.34 +struct fold_impl< 0,First,Last,State,ForwardOp >
1.35 +{
1.36 + typedef First iter0;
1.37 + typedef State state0;
1.38 + typedef state0 state;
1.39 + typedef iter0 iterator;
1.40 +};
1.41 +
1.42 +template<
1.43 + typename First
1.44 + , typename Last
1.45 + , typename State
1.46 + , typename ForwardOp
1.47 + >
1.48 +struct fold_impl< 1,First,Last,State,ForwardOp >
1.49 +{
1.50 + typedef First iter0;
1.51 + typedef State state0;
1.52 + typedef typename apply2< ForwardOp, state0, typename deref<iter0>::type >::type state1;
1.53 + typedef typename mpl::next<iter0>::type iter1;
1.54 +
1.55 +
1.56 + typedef state1 state;
1.57 + typedef iter1 iterator;
1.58 +};
1.59 +
1.60 +template<
1.61 + typename First
1.62 + , typename Last
1.63 + , typename State
1.64 + , typename ForwardOp
1.65 + >
1.66 +struct fold_impl< 2,First,Last,State,ForwardOp >
1.67 +{
1.68 + typedef First iter0;
1.69 + typedef State state0;
1.70 + typedef typename apply2< ForwardOp, state0, typename deref<iter0>::type >::type state1;
1.71 + typedef typename mpl::next<iter0>::type iter1;
1.72 + typedef typename apply2< ForwardOp, state1, typename deref<iter1>::type >::type state2;
1.73 + typedef typename mpl::next<iter1>::type iter2;
1.74 +
1.75 +
1.76 + typedef state2 state;
1.77 + typedef iter2 iterator;
1.78 +};
1.79 +
1.80 +template<
1.81 + typename First
1.82 + , typename Last
1.83 + , typename State
1.84 + , typename ForwardOp
1.85 + >
1.86 +struct fold_impl< 3,First,Last,State,ForwardOp >
1.87 +{
1.88 + typedef First iter0;
1.89 + typedef State state0;
1.90 + typedef typename apply2< ForwardOp, state0, typename deref<iter0>::type >::type state1;
1.91 + typedef typename mpl::next<iter0>::type iter1;
1.92 + typedef typename apply2< ForwardOp, state1, typename deref<iter1>::type >::type state2;
1.93 + typedef typename mpl::next<iter1>::type iter2;
1.94 + typedef typename apply2< ForwardOp, state2, typename deref<iter2>::type >::type state3;
1.95 + typedef typename mpl::next<iter2>::type iter3;
1.96 +
1.97 +
1.98 + typedef state3 state;
1.99 + typedef iter3 iterator;
1.100 +};
1.101 +
1.102 +template<
1.103 + typename First
1.104 + , typename Last
1.105 + , typename State
1.106 + , typename ForwardOp
1.107 + >
1.108 +struct fold_impl< 4,First,Last,State,ForwardOp >
1.109 +{
1.110 + typedef First iter0;
1.111 + typedef State state0;
1.112 + typedef typename apply2< ForwardOp, state0, typename deref<iter0>::type >::type state1;
1.113 + typedef typename mpl::next<iter0>::type iter1;
1.114 + typedef typename apply2< ForwardOp, state1, typename deref<iter1>::type >::type state2;
1.115 + typedef typename mpl::next<iter1>::type iter2;
1.116 + typedef typename apply2< ForwardOp, state2, typename deref<iter2>::type >::type state3;
1.117 + typedef typename mpl::next<iter2>::type iter3;
1.118 + typedef typename apply2< ForwardOp, state3, typename deref<iter3>::type >::type state4;
1.119 + typedef typename mpl::next<iter3>::type iter4;
1.120 +
1.121 +
1.122 + typedef state4 state;
1.123 + typedef iter4 iterator;
1.124 +};
1.125 +
1.126 +template<
1.127 + int N
1.128 + , typename First
1.129 + , typename Last
1.130 + , typename State
1.131 + , typename ForwardOp
1.132 + >
1.133 +struct fold_impl
1.134 +{
1.135 + typedef fold_impl<
1.136 + 4
1.137 + , First
1.138 + , Last
1.139 + , State
1.140 + , ForwardOp
1.141 + > chunk_;
1.142 +
1.143 + typedef fold_impl<
1.144 + ( (N - 4) < 0 ? 0 : N - 4 )
1.145 + , typename chunk_::iterator
1.146 + , Last
1.147 + , typename chunk_::state
1.148 + , ForwardOp
1.149 + > res_;
1.150 +
1.151 + typedef typename res_::state state;
1.152 + typedef typename res_::iterator iterator;
1.153 +};
1.154 +
1.155 +template<
1.156 + typename First
1.157 + , typename Last
1.158 + , typename State
1.159 + , typename ForwardOp
1.160 + >
1.161 +struct fold_impl< -1,First,Last,State,ForwardOp >
1.162 + : fold_impl<
1.163 + -1
1.164 + , typename mpl::next<First>::type
1.165 + , Last
1.166 + , typename apply2<ForwardOp,State, typename deref<First>::type>::type
1.167 + , ForwardOp
1.168 + >
1.169 +{
1.170 +};
1.171 +
1.172 +template<
1.173 + typename Last
1.174 + , typename State
1.175 + , typename ForwardOp
1.176 + >
1.177 +struct fold_impl< -1,Last,Last,State,ForwardOp >
1.178 +{
1.179 + typedef State state;
1.180 + typedef Last iterator;
1.181 +};
1.182 +
1.183 +}}}