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_/iter_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       int N
     18     , typename First
     19     , typename Last
     20     , typename State
     21     , typename ForwardOp
     22     >
     23 struct iter_fold_impl;
     24 
     25 template<
     26       typename First
     27     , typename Last
     28     , typename State
     29     , typename ForwardOp
     30     >
     31 struct iter_fold_impl< 0,First,Last,State,ForwardOp >
     32 {
     33     typedef First iter0;
     34     typedef State state0;
     35     typedef state0 state;
     36     typedef iter0 iterator;
     37 };
     38 
     39 template<
     40       typename First
     41     , typename Last
     42     , typename State
     43     , typename ForwardOp
     44     >
     45 struct iter_fold_impl< 1,First,Last,State,ForwardOp >
     46 {
     47     typedef First iter0;
     48     typedef State state0;
     49     typedef typename apply2< ForwardOp,state0,iter0 >::type state1;
     50     typedef typename mpl::next<iter0>::type iter1;
     51 
     52 
     53     typedef state1 state;
     54     typedef iter1 iterator;
     55 };
     56 
     57 template<
     58       typename First
     59     , typename Last
     60     , typename State
     61     , typename ForwardOp
     62     >
     63 struct iter_fold_impl< 2,First,Last,State,ForwardOp >
     64 {
     65     typedef First iter0;
     66     typedef State state0;
     67     typedef typename apply2< ForwardOp,state0,iter0 >::type state1;
     68     typedef typename mpl::next<iter0>::type iter1;
     69     typedef typename apply2< ForwardOp,state1,iter1 >::type state2;
     70     typedef typename mpl::next<iter1>::type iter2;
     71 
     72 
     73     typedef state2 state;
     74     typedef iter2 iterator;
     75 };
     76 
     77 template<
     78       typename First
     79     , typename Last
     80     , typename State
     81     , typename ForwardOp
     82     >
     83 struct iter_fold_impl< 3,First,Last,State,ForwardOp >
     84 {
     85     typedef First iter0;
     86     typedef State state0;
     87     typedef typename apply2< ForwardOp,state0,iter0 >::type state1;
     88     typedef typename mpl::next<iter0>::type iter1;
     89     typedef typename apply2< ForwardOp,state1,iter1 >::type state2;
     90     typedef typename mpl::next<iter1>::type iter2;
     91     typedef typename apply2< ForwardOp,state2,iter2 >::type state3;
     92     typedef typename mpl::next<iter2>::type iter3;
     93 
     94 
     95     typedef state3 state;
     96     typedef iter3 iterator;
     97 };
     98 
     99 template<
    100       typename First
    101     , typename Last
    102     , typename State
    103     , typename ForwardOp
    104     >
    105 struct iter_fold_impl< 4,First,Last,State,ForwardOp >
    106 {
    107     typedef First iter0;
    108     typedef State state0;
    109     typedef typename apply2< ForwardOp,state0,iter0 >::type state1;
    110     typedef typename mpl::next<iter0>::type iter1;
    111     typedef typename apply2< ForwardOp,state1,iter1 >::type state2;
    112     typedef typename mpl::next<iter1>::type iter2;
    113     typedef typename apply2< ForwardOp,state2,iter2 >::type state3;
    114     typedef typename mpl::next<iter2>::type iter3;
    115     typedef typename apply2< ForwardOp,state3,iter3 >::type state4;
    116     typedef typename mpl::next<iter3>::type iter4;
    117 
    118 
    119     typedef state4 state;
    120     typedef iter4 iterator;
    121 };
    122 
    123 template<
    124       int N
    125     , typename First
    126     , typename Last
    127     , typename State
    128     , typename ForwardOp
    129     >
    130 struct iter_fold_impl
    131 {
    132     typedef iter_fold_impl<
    133           4
    134         , First
    135         , Last
    136         , State
    137         , ForwardOp
    138         > chunk_;
    139 
    140     typedef iter_fold_impl<
    141           ( (N - 4) < 0 ? 0 : N - 4 )
    142         , typename chunk_::iterator
    143         , Last
    144         , typename chunk_::state
    145         , ForwardOp
    146         > res_;
    147 
    148     typedef typename res_::state state;
    149     typedef typename res_::iterator iterator;
    150 };
    151 
    152 template<
    153       typename First
    154     , typename Last
    155     , typename State
    156     , typename ForwardOp
    157     >
    158 struct iter_fold_impl< -1,First,Last,State,ForwardOp >
    159     : iter_fold_impl<
    160           -1
    161         , typename mpl::next<First>::type
    162         , Last
    163         , typename apply2< ForwardOp,State,First >::type
    164         , ForwardOp
    165         >
    166 {
    167 };
    168 
    169 template<
    170       typename Last
    171     , typename State
    172     , typename ForwardOp
    173     >
    174 struct iter_fold_impl< -1,Last,Last,State,ForwardOp >
    175 {
    176     typedef State state;
    177     typedef Last iterator;
    178 };
    179 
    180 }}}
    181