PageRenderTime 33ms CodeModel.GetById 18ms app.highlight 12ms RepoModel.GetById 1ms app.codeStats 0ms

/src/contrib/boost/mpl/aux_/preprocessed/msvc70/fold_impl.hpp

http://pythonocc.googlecode.com/
C++ Header | 245 lines | 206 code | 30 blank | 9 comment | 0 complexity | 09dab18ba27bc685ce01065d851d452a MD5 | raw file
  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_/fold_impl.hpp" header
 10// -- DO NOT modify by hand!
 11
 12namespace boost { namespace mpl { namespace aux {
 13
 14/// forward declaration
 15
 16template<
 17      int N
 18    , typename First
 19    , typename Last
 20    , typename State
 21    , typename ForwardOp
 22    >
 23struct fold_impl;
 24
 25template< int N >
 26struct fold_chunk;
 27
 28template<> struct fold_chunk<0>
 29{
 30    template<
 31          typename First
 32        , typename Last
 33        , typename State
 34        , typename ForwardOp
 35        >
 36    struct result_
 37    {
 38        typedef First iter0;
 39        typedef State state0;
 40        typedef state0 state;
 41        typedef iter0 iterator;
 42    };
 43};
 44
 45template<> struct fold_chunk<1>
 46{
 47    template<
 48          typename First
 49        , typename Last
 50        , typename State
 51        , typename ForwardOp
 52        >
 53    struct result_
 54    {
 55        typedef First iter0;
 56        typedef State state0;
 57        typedef typename apply2< ForwardOp, state0, typename deref<iter0>::type >::type state1;
 58        typedef typename mpl::next<iter0>::type iter1;
 59        
 60
 61        typedef state1 state;
 62        typedef iter1 iterator;
 63    };
 64};
 65
 66template<> struct fold_chunk<2>
 67{
 68    template<
 69          typename First
 70        , typename Last
 71        , typename State
 72        , typename ForwardOp
 73        >
 74    struct result_
 75    {
 76        typedef First iter0;
 77        typedef State state0;
 78        typedef typename apply2< ForwardOp, state0, typename deref<iter0>::type >::type state1;
 79        typedef typename mpl::next<iter0>::type iter1;
 80        typedef typename apply2< ForwardOp, state1, typename deref<iter1>::type >::type state2;
 81        typedef typename mpl::next<iter1>::type iter2;
 82        
 83
 84        typedef state2 state;
 85        typedef iter2 iterator;
 86    };
 87};
 88
 89template<> struct fold_chunk<3>
 90{
 91    template<
 92          typename First
 93        , typename Last
 94        , typename State
 95        , typename ForwardOp
 96        >
 97    struct result_
 98    {
 99        typedef First iter0;
100        typedef State state0;
101        typedef typename apply2< ForwardOp, state0, typename deref<iter0>::type >::type state1;
102        typedef typename mpl::next<iter0>::type iter1;
103        typedef typename apply2< ForwardOp, state1, typename deref<iter1>::type >::type state2;
104        typedef typename mpl::next<iter1>::type iter2;
105        typedef typename apply2< ForwardOp, state2, typename deref<iter2>::type >::type state3;
106        typedef typename mpl::next<iter2>::type iter3;
107        
108
109        typedef state3 state;
110        typedef iter3 iterator;
111    };
112};
113
114template<> struct fold_chunk<4>
115{
116    template<
117          typename First
118        , typename Last
119        , typename State
120        , typename ForwardOp
121        >
122    struct result_
123    {
124        typedef First iter0;
125        typedef State state0;
126        typedef typename apply2< ForwardOp, state0, typename deref<iter0>::type >::type state1;
127        typedef typename mpl::next<iter0>::type iter1;
128        typedef typename apply2< ForwardOp, state1, typename deref<iter1>::type >::type state2;
129        typedef typename mpl::next<iter1>::type iter2;
130        typedef typename apply2< ForwardOp, state2, typename deref<iter2>::type >::type state3;
131        typedef typename mpl::next<iter2>::type iter3;
132        typedef typename apply2< ForwardOp, state3, typename deref<iter3>::type >::type state4;
133        typedef typename mpl::next<iter3>::type iter4;
134        
135
136        typedef state4 state;
137        typedef iter4 iterator;
138    };
139};
140
141template< int N >
142struct fold_chunk
143{
144    template<
145          typename First
146        , typename Last
147        , typename State
148        , typename ForwardOp
149        >
150    struct result_
151    {
152        typedef fold_impl<
153              4
154            , First
155            , Last
156            , State
157            , ForwardOp
158            > chunk_;
159
160        typedef fold_impl<
161              ( (N - 4) < 0 ? 0 : N - 4 )
162            , typename chunk_::iterator
163            , Last
164            , typename chunk_::state
165            , ForwardOp
166            > res_;
167
168        typedef typename res_::state state;
169        typedef typename res_::iterator iterator;
170    };
171};
172
173template<
174      typename First
175    , typename Last
176    , typename State
177    , typename ForwardOp
178    >
179struct fold_step;
180
181template<
182      typename Last
183    , typename State
184    >
185struct fold_null_step
186{
187    typedef Last iterator;
188    typedef State state;
189};
190
191template<>
192struct fold_chunk< -1 >
193{
194    template<
195          typename First
196        , typename Last
197        , typename State
198        , typename ForwardOp
199        >
200    struct result_
201    {
202        typedef typename if_<
203              typename is_same< First,Last >::type
204            , fold_null_step< Last,State >
205            , fold_step< First,Last,State,ForwardOp >
206            >::type res_;
207
208        typedef typename res_::state state;
209        typedef typename res_::iterator iterator;
210    };
211};
212
213template<
214      typename First
215    , typename Last
216    , typename State
217    , typename ForwardOp
218    >
219struct fold_step
220{
221    typedef fold_chunk< -1 >::template result_<
222          typename mpl::next<First>::type
223        , Last
224        , typename apply2<ForwardOp,State, typename deref<First>::type>::type
225        , ForwardOp
226        > chunk_;
227
228    typedef typename chunk_::state state;
229    typedef typename chunk_::iterator iterator;
230};
231
232template<
233      int N
234    , typename First
235    , typename Last
236    , typename State
237    , typename ForwardOp
238    >
239struct fold_impl
240    : fold_chunk<N>
241        ::template result_< First,Last,State,ForwardOp >
242{
243};
244
245}}}