Home | History | Annotate | Download | only in gcc
      1 
      2 // Copyright Aleksey Gurtovoy 2000-2004
      3 //
      4 // Distributed under the Boost Software License, Version 1.0.
      5 // (See accompanying file LICENSE_1_0.txt or copy at
      6 // http://www.boost.org/LICENSE_1_0.txt)
      7 //
      8 
      9 // Preprocessed version of "boost/mpl/aux_/reverse_fold_impl.hpp" header
     10 // -- DO NOT modify by hand!
     11 
     12 namespace boost { namespace mpl { namespace aux {
     13 
     14 /// forward declaration
     15 
     16 template<
     17       long N
     18     , typename First
     19     , typename Last
     20     , typename State
     21     , typename BackwardOp
     22     , typename ForwardOp
     23     >
     24 struct reverse_fold_impl;
     25 
     26 template<
     27       typename First
     28     , typename Last
     29     , typename State
     30     , typename BackwardOp
     31     , typename ForwardOp
     32     >
     33 struct reverse_fold_impl< 0,First,Last,State,BackwardOp,ForwardOp >
     34 {
     35     typedef First iter0;
     36     typedef State fwd_state0;
     37     typedef fwd_state0 bkwd_state0;
     38     typedef bkwd_state0 state;
     39     typedef iter0 iterator;
     40 };
     41 
     42 template<
     43       typename First
     44     , typename Last
     45     , typename State
     46     , typename BackwardOp
     47     , typename ForwardOp
     48     >
     49 struct reverse_fold_impl< 1,First,Last,State,BackwardOp,ForwardOp >
     50 {
     51     typedef First iter0;
     52     typedef State fwd_state0;
     53     typedef typename apply2< ForwardOp, fwd_state0, typename deref<iter0>::type >::type fwd_state1;
     54     typedef typename mpl::next<iter0>::type iter1;
     55 
     56 
     57     typedef fwd_state1 bkwd_state1;
     58     typedef typename apply2< BackwardOp, bkwd_state1, typename deref<iter0>::type >::type bkwd_state0;
     59     typedef bkwd_state0 state;
     60     typedef iter1 iterator;
     61 };
     62 
     63 template<
     64       typename First
     65     , typename Last
     66     , typename State
     67     , typename BackwardOp
     68     , typename ForwardOp
     69     >
     70 struct reverse_fold_impl< 2,First,Last,State,BackwardOp,ForwardOp >
     71 {
     72     typedef First iter0;
     73     typedef State fwd_state0;
     74     typedef typename apply2< ForwardOp, fwd_state0, typename deref<iter0>::type >::type fwd_state1;
     75     typedef typename mpl::next<iter0>::type iter1;
     76     typedef typename apply2< ForwardOp, fwd_state1, typename deref<iter1>::type >::type fwd_state2;
     77     typedef typename mpl::next<iter1>::type iter2;
     78 
     79 
     80     typedef fwd_state2 bkwd_state2;
     81     typedef typename apply2< BackwardOp, bkwd_state2, typename deref<iter1>::type >::type bkwd_state1;
     82     typedef typename apply2< BackwardOp, bkwd_state1, typename deref<iter0>::type >::type bkwd_state0;
     83 
     84 
     85     typedef bkwd_state0 state;
     86     typedef iter2 iterator;
     87 };
     88 
     89 template<
     90       typename First
     91     , typename Last
     92     , typename State
     93     , typename BackwardOp
     94     , typename ForwardOp
     95     >
     96 struct reverse_fold_impl< 3,First,Last,State,BackwardOp,ForwardOp >
     97 {
     98     typedef First iter0;
     99     typedef State fwd_state0;
    100     typedef typename apply2< ForwardOp, fwd_state0, typename deref<iter0>::type >::type fwd_state1;
    101     typedef typename mpl::next<iter0>::type iter1;
    102     typedef typename apply2< ForwardOp, fwd_state1, typename deref<iter1>::type >::type fwd_state2;
    103     typedef typename mpl::next<iter1>::type iter2;
    104     typedef typename apply2< ForwardOp, fwd_state2, typename deref<iter2>::type >::type fwd_state3;
    105     typedef typename mpl::next<iter2>::type iter3;
    106 
    107 
    108     typedef fwd_state3 bkwd_state3;
    109     typedef typename apply2< BackwardOp, bkwd_state3, typename deref<iter2>::type >::type bkwd_state2;
    110     typedef typename apply2< BackwardOp, bkwd_state2, typename deref<iter1>::type >::type bkwd_state1;
    111     typedef typename apply2< BackwardOp, bkwd_state1, typename deref<iter0>::type >::type bkwd_state0;
    112 
    113 
    114     typedef bkwd_state0 state;
    115     typedef iter3 iterator;
    116 };
    117 
    118 template<
    119       typename First
    120     , typename Last
    121     , typename State
    122     , typename BackwardOp
    123     , typename ForwardOp
    124     >
    125 struct reverse_fold_impl< 4,First,Last,State,BackwardOp,ForwardOp >
    126 {
    127     typedef First iter0;
    128     typedef State fwd_state0;
    129     typedef typename apply2< ForwardOp, fwd_state0, typename deref<iter0>::type >::type fwd_state1;
    130     typedef typename mpl::next<iter0>::type iter1;
    131     typedef typename apply2< ForwardOp, fwd_state1, typename deref<iter1>::type >::type fwd_state2;
    132     typedef typename mpl::next<iter1>::type iter2;
    133     typedef typename apply2< ForwardOp, fwd_state2, typename deref<iter2>::type >::type fwd_state3;
    134     typedef typename mpl::next<iter2>::type iter3;
    135     typedef typename apply2< ForwardOp, fwd_state3, typename deref<iter3>::type >::type fwd_state4;
    136     typedef typename mpl::next<iter3>::type iter4;
    137 
    138 
    139     typedef fwd_state4 bkwd_state4;
    140     typedef typename apply2< BackwardOp, bkwd_state4, typename deref<iter3>::type >::type bkwd_state3;
    141     typedef typename apply2< BackwardOp, bkwd_state3, typename deref<iter2>::type >::type bkwd_state2;
    142     typedef typename apply2< BackwardOp, bkwd_state2, typename deref<iter1>::type >::type bkwd_state1;
    143     typedef typename apply2< BackwardOp, bkwd_state1, typename deref<iter0>::type >::type bkwd_state0;
    144 
    145 
    146     typedef bkwd_state0 state;
    147     typedef iter4 iterator;
    148 };
    149 
    150 template<
    151       long N
    152     , typename First
    153     , typename Last
    154     , typename State
    155     , typename BackwardOp
    156     , typename ForwardOp
    157     >
    158 struct reverse_fold_impl
    159 {
    160     typedef First iter0;
    161     typedef State fwd_state0;
    162     typedef typename apply2< ForwardOp, fwd_state0, typename deref<iter0>::type >::type fwd_state1;
    163     typedef typename mpl::next<iter0>::type iter1;
    164     typedef typename apply2< ForwardOp, fwd_state1, typename deref<iter1>::type >::type fwd_state2;
    165     typedef typename mpl::next<iter1>::type iter2;
    166     typedef typename apply2< ForwardOp, fwd_state2, typename deref<iter2>::type >::type fwd_state3;
    167     typedef typename mpl::next<iter2>::type iter3;
    168     typedef typename apply2< ForwardOp, fwd_state3, typename deref<iter3>::type >::type fwd_state4;
    169     typedef typename mpl::next<iter3>::type iter4;
    170 
    171 
    172     typedef reverse_fold_impl<
    173           ( (N - 4) < 0 ? 0 : N - 4 )
    174         , iter4
    175         , Last
    176         , fwd_state4
    177         , BackwardOp
    178         , ForwardOp
    179         > nested_chunk;
    180 
    181     typedef typename nested_chunk::state bkwd_state4;
    182     typedef typename apply2< BackwardOp, bkwd_state4, typename deref<iter3>::type >::type bkwd_state3;
    183     typedef typename apply2< BackwardOp, bkwd_state3, typename deref<iter2>::type >::type bkwd_state2;
    184     typedef typename apply2< BackwardOp, bkwd_state2, typename deref<iter1>::type >::type bkwd_state1;
    185     typedef typename apply2< BackwardOp, bkwd_state1, typename deref<iter0>::type >::type bkwd_state0;
    186 
    187 
    188     typedef bkwd_state0 state;
    189     typedef typename nested_chunk::iterator iterator;
    190 };
    191 
    192 template<
    193       typename First
    194     , typename Last
    195     , typename State
    196     , typename BackwardOp
    197     , typename ForwardOp
    198     >
    199 struct reverse_fold_impl< -1,First,Last,State,BackwardOp,ForwardOp >
    200 {
    201     typedef reverse_fold_impl<
    202           -1
    203         , typename mpl::next<First>::type
    204         , Last
    205         , typename apply2<ForwardOp,State, typename deref<First>::type>::type
    206         , BackwardOp
    207         , ForwardOp
    208         > nested_step;
    209 
    210     typedef typename apply2<
    211           BackwardOp
    212         , typename nested_step::state
    213         , typename deref<First>::type
    214         >::type state;
    215 
    216     typedef typename nested_step::iterator iterator;
    217 };
    218 
    219 template<
    220       typename Last
    221     , typename State
    222     , typename BackwardOp
    223     , typename ForwardOp
    224     >
    225 struct reverse_fold_impl< -1,Last,Last,State,BackwardOp,ForwardOp >
    226 {
    227     typedef State state;
    228     typedef Last iterator;
    229 };
    230 
    231 }}}
    232