-\r
-// Copyright Aleksey Gurtovoy 2000-2004\r
-//\r
-// Distributed under the Boost Software License, Version 1.0. \r
-// (See accompanying file LICENSE_1_0.txt or copy at \r
-// http://www.boost.org/LICENSE_1_0.txt)\r
-//\r
-\r
-// *Preprocessed* version of the main "reverse_fold_impl.hpp" header\r
-// -- DO NOT modify by hand!\r
-\r
-namespace boost { namespace mpl { namespace aux {\r
-\r
-/// forward declaration\r
-\r
-template<\r
- long N\r
- , typename First\r
- , typename Last\r
- , typename State\r
- , typename BackwardOp\r
- , typename ForwardOp\r
- >\r
-struct reverse_fold_impl;\r
-\r
-template< long N >\r
-struct reverse_fold_chunk;\r
-\r
-template<> struct reverse_fold_chunk<0>\r
-{\r
- template<\r
- typename First\r
- , typename Last\r
- , typename State\r
- , typename BackwardOp\r
- , typename ForwardOp\r
- >\r
- struct result_\r
- {\r
- typedef First iter0;\r
- typedef State fwd_state0;\r
- typedef fwd_state0 bkwd_state0;\r
- typedef bkwd_state0 state;\r
- typedef iter0 iterator;\r
- };\r
-};\r
-\r
-template<> struct reverse_fold_chunk<1>\r
-{\r
- template<\r
- typename First\r
- , typename Last\r
- , typename State\r
- , typename BackwardOp\r
- , typename ForwardOp\r
- >\r
- struct result_\r
- {\r
- typedef First iter0;\r
- typedef State fwd_state0;\r
- typedef typename apply2< ForwardOp, fwd_state0, typename deref<iter0>::type >::type fwd_state1;\r
- typedef typename mpl::next<iter0>::type iter1;\r
- \r
-\r
- typedef fwd_state1 bkwd_state1;\r
- typedef typename apply2< BackwardOp, bkwd_state1, typename deref<iter0>::type >::type bkwd_state0;\r
- typedef bkwd_state0 state;\r
- typedef iter1 iterator;\r
- };\r
-};\r
-\r
-template<> struct reverse_fold_chunk<2>\r
-{\r
- template<\r
- typename First\r
- , typename Last\r
- , typename State\r
- , typename BackwardOp\r
- , typename ForwardOp\r
- >\r
- struct result_\r
- {\r
- typedef First iter0;\r
- typedef State fwd_state0;\r
- typedef typename apply2< ForwardOp, fwd_state0, typename deref<iter0>::type >::type fwd_state1;\r
- typedef typename mpl::next<iter0>::type iter1;\r
- typedef typename apply2< ForwardOp, fwd_state1, typename deref<iter1>::type >::type fwd_state2;\r
- typedef typename mpl::next<iter1>::type iter2;\r
- \r
-\r
- typedef fwd_state2 bkwd_state2;\r
- typedef typename apply2< BackwardOp, bkwd_state2, typename deref<iter1>::type >::type bkwd_state1;\r
- typedef typename apply2< BackwardOp, bkwd_state1, typename deref<iter0>::type >::type bkwd_state0;\r
- \r
-\r
- typedef bkwd_state0 state;\r
- typedef iter2 iterator;\r
- };\r
-};\r
-\r
-template<> struct reverse_fold_chunk<3>\r
-{\r
- template<\r
- typename First\r
- , typename Last\r
- , typename State\r
- , typename BackwardOp\r
- , typename ForwardOp\r
- >\r
- struct result_\r
- {\r
- typedef First iter0;\r
- typedef State fwd_state0;\r
- typedef typename apply2< ForwardOp, fwd_state0, typename deref<iter0>::type >::type fwd_state1;\r
- typedef typename mpl::next<iter0>::type iter1;\r
- typedef typename apply2< ForwardOp, fwd_state1, typename deref<iter1>::type >::type fwd_state2;\r
- typedef typename mpl::next<iter1>::type iter2;\r
- typedef typename apply2< ForwardOp, fwd_state2, typename deref<iter2>::type >::type fwd_state3;\r
- typedef typename mpl::next<iter2>::type iter3;\r
- \r
-\r
- typedef fwd_state3 bkwd_state3;\r
- typedef typename apply2< BackwardOp, bkwd_state3, typename deref<iter2>::type >::type bkwd_state2;\r
- typedef typename apply2< BackwardOp, bkwd_state2, typename deref<iter1>::type >::type bkwd_state1;\r
- typedef typename apply2< BackwardOp, bkwd_state1, typename deref<iter0>::type >::type bkwd_state0;\r
- \r
-\r
- typedef bkwd_state0 state;\r
- typedef iter3 iterator;\r
- };\r
-};\r
-\r
-template<> struct reverse_fold_chunk<4>\r
-{\r
- template<\r
- typename First\r
- , typename Last\r
- , typename State\r
- , typename BackwardOp\r
- , typename ForwardOp\r
- >\r
- struct result_\r
- {\r
- typedef First iter0;\r
- typedef State fwd_state0;\r
- typedef typename apply2< ForwardOp, fwd_state0, typename deref<iter0>::type >::type fwd_state1;\r
- typedef typename mpl::next<iter0>::type iter1;\r
- typedef typename apply2< ForwardOp, fwd_state1, typename deref<iter1>::type >::type fwd_state2;\r
- typedef typename mpl::next<iter1>::type iter2;\r
- typedef typename apply2< ForwardOp, fwd_state2, typename deref<iter2>::type >::type fwd_state3;\r
- typedef typename mpl::next<iter2>::type iter3;\r
- typedef typename apply2< ForwardOp, fwd_state3, typename deref<iter3>::type >::type fwd_state4;\r
- typedef typename mpl::next<iter3>::type iter4;\r
- \r
-\r
- typedef fwd_state4 bkwd_state4;\r
- typedef typename apply2< BackwardOp, bkwd_state4, typename deref<iter3>::type >::type bkwd_state3;\r
- typedef typename apply2< BackwardOp, bkwd_state3, typename deref<iter2>::type >::type bkwd_state2;\r
- typedef typename apply2< BackwardOp, bkwd_state2, typename deref<iter1>::type >::type bkwd_state1;\r
- typedef typename apply2< BackwardOp, bkwd_state1, typename deref<iter0>::type >::type bkwd_state0;\r
- \r
-\r
- typedef bkwd_state0 state;\r
- typedef iter4 iterator;\r
- };\r
-};\r
-\r
-template< long N >\r
-struct reverse_fold_chunk\r
-{\r
- template<\r
- typename First\r
- , typename Last\r
- , typename State\r
- , typename BackwardOp\r
- , typename ForwardOp\r
- >\r
- struct result_\r
- {\r
- typedef First iter0;\r
- typedef State fwd_state0;\r
- typedef typename apply2< ForwardOp, fwd_state0, typename deref<iter0>::type >::type fwd_state1;\r
- typedef typename mpl::next<iter0>::type iter1;\r
- typedef typename apply2< ForwardOp, fwd_state1, typename deref<iter1>::type >::type fwd_state2;\r
- typedef typename mpl::next<iter1>::type iter2;\r
- typedef typename apply2< ForwardOp, fwd_state2, typename deref<iter2>::type >::type fwd_state3;\r
- typedef typename mpl::next<iter2>::type iter3;\r
- typedef typename apply2< ForwardOp, fwd_state3, typename deref<iter3>::type >::type fwd_state4;\r
- typedef typename mpl::next<iter3>::type iter4;\r
- \r
-\r
- typedef reverse_fold_impl<\r
- ( (N - 4) < 0 ? 0 : N - 4 )\r
- , iter4\r
- , Last\r
- , fwd_state4\r
- , BackwardOp\r
- , ForwardOp\r
- > nested_chunk;\r
-\r
- typedef typename nested_chunk::state bkwd_state4;\r
- typedef typename apply2< BackwardOp, bkwd_state4, typename deref<iter3>::type >::type bkwd_state3;\r
- typedef typename apply2< BackwardOp, bkwd_state3, typename deref<iter2>::type >::type bkwd_state2;\r
- typedef typename apply2< BackwardOp, bkwd_state2, typename deref<iter1>::type >::type bkwd_state1;\r
- typedef typename apply2< BackwardOp, bkwd_state1, typename deref<iter0>::type >::type bkwd_state0;\r
- \r
-\r
- typedef bkwd_state0 state;\r
- typedef typename nested_chunk::iterator iterator;\r
- };\r
-};\r
-\r
-template<\r
- typename First\r
- , typename Last\r
- , typename State\r
- , typename BackwardOp\r
- , typename ForwardOp\r
- >\r
-struct reverse_fold_step;\r
-\r
-template<\r
- typename Last\r
- , typename State\r
- >\r
-struct reverse_fold_null_step\r
-{\r
- typedef Last iterator;\r
- typedef State state;\r
-};\r
-\r
-template<>\r
-struct reverse_fold_chunk< -1 >\r
-{\r
- template<\r
- typename First\r
- , typename Last\r
- , typename State\r
- , typename BackwardOp\r
- , typename ForwardOp\r
- >\r
- struct result_\r
- {\r
- typedef typename if_<\r
- typename is_same< First,Last >::type\r
- , reverse_fold_null_step< Last,State >\r
- , reverse_fold_step< First,Last,State,BackwardOp,ForwardOp >\r
- >::type res_;\r
-\r
- typedef typename res_::state state;\r
- typedef typename res_::iterator iterator;\r
- };\r
-};\r
-\r
-template<\r
- typename First\r
- , typename Last\r
- , typename State\r
- , typename BackwardOp\r
- , typename ForwardOp\r
- >\r
-struct reverse_fold_step\r
-{\r
- typedef reverse_fold_chunk< -1 >::template result_<\r
- typename mpl::next<First>::type\r
- , Last\r
- , typename apply2<ForwardOp,State, typename deref<First>::type>::type\r
- , BackwardOp\r
- , ForwardOp\r
- > nested_step;\r
-\r
- typedef typename apply2<\r
- BackwardOp\r
- , typename nested_step::state\r
- , typename deref<First>::type\r
- >::type state;\r
-\r
- typedef typename nested_step::iterator iterator;\r
-};\r
-\r
-template<\r
- long N\r
- , typename First\r
- , typename Last\r
- , typename State\r
- , typename BackwardOp\r
- , typename ForwardOp\r
- >\r
-struct reverse_fold_impl\r
- : reverse_fold_chunk<N>\r
- ::template result_< First,Last,State,BackwardOp,ForwardOp >\r
-{\r
-};\r
-\r
-}}}\r
+
+// Copyright Aleksey Gurtovoy 2000-2004
+//
+// Distributed under the Boost Software License, Version 1.0.
+// (See accompanying file LICENSE_1_0.txt or copy at
+// http://www.boost.org/LICENSE_1_0.txt)
+//
+
+// *Preprocessed* version of the main "reverse_fold_impl.hpp" header
+// -- DO NOT modify by hand!
+
+namespace boost { namespace mpl { namespace aux {
+
+/// forward declaration
+
+template<
+ long N
+ , typename First
+ , typename Last
+ , typename State
+ , typename BackwardOp
+ , typename ForwardOp
+ >
+struct reverse_fold_impl;
+
+template< long N >
+struct reverse_fold_chunk;
+
+template<> struct reverse_fold_chunk<0>
+{
+ template<
+ typename First
+ , typename Last
+ , typename State
+ , typename BackwardOp
+ , typename ForwardOp
+ >
+ struct result_
+ {
+ typedef First iter0;
+ typedef State fwd_state0;
+ typedef fwd_state0 bkwd_state0;
+ typedef bkwd_state0 state;
+ typedef iter0 iterator;
+ };
+};
+
+template<> struct reverse_fold_chunk<1>
+{
+ template<
+ typename First
+ , typename Last
+ , typename State
+ , typename BackwardOp
+ , typename ForwardOp
+ >
+ struct result_
+ {
+ typedef First iter0;
+ typedef State fwd_state0;
+ typedef typename apply2< ForwardOp, fwd_state0, typename deref<iter0>::type >::type fwd_state1;
+ typedef typename mpl::next<iter0>::type iter1;
+
+
+ typedef fwd_state1 bkwd_state1;
+ typedef typename apply2< BackwardOp, bkwd_state1, typename deref<iter0>::type >::type bkwd_state0;
+ typedef bkwd_state0 state;
+ typedef iter1 iterator;
+ };
+};
+
+template<> struct reverse_fold_chunk<2>
+{
+ template<
+ typename First
+ , typename Last
+ , typename State
+ , typename BackwardOp
+ , typename ForwardOp
+ >
+ struct result_
+ {
+ typedef First iter0;
+ typedef State fwd_state0;
+ typedef typename apply2< ForwardOp, fwd_state0, typename deref<iter0>::type >::type fwd_state1;
+ typedef typename mpl::next<iter0>::type iter1;
+ typedef typename apply2< ForwardOp, fwd_state1, typename deref<iter1>::type >::type fwd_state2;
+ typedef typename mpl::next<iter1>::type iter2;
+
+
+ typedef fwd_state2 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;
+ typedef iter2 iterator;
+ };
+};
+
+template<> struct reverse_fold_chunk<3>
+{
+ template<
+ typename First
+ , typename Last
+ , typename State
+ , typename BackwardOp
+ , typename ForwardOp
+ >
+ struct result_
+ {
+ typedef First iter0;
+ typedef State fwd_state0;
+ typedef typename apply2< ForwardOp, fwd_state0, typename deref<iter0>::type >::type fwd_state1;
+ typedef typename mpl::next<iter0>::type iter1;
+ typedef typename apply2< ForwardOp, fwd_state1, typename deref<iter1>::type >::type fwd_state2;
+ typedef typename mpl::next<iter1>::type iter2;
+ typedef typename apply2< ForwardOp, fwd_state2, typename deref<iter2>::type >::type fwd_state3;
+ typedef typename mpl::next<iter2>::type iter3;
+
+
+ typedef fwd_state3 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;
+ typedef iter3 iterator;
+ };
+};
+
+template<> struct reverse_fold_chunk<4>
+{
+ template<
+ typename First
+ , typename Last
+ , typename State
+ , typename BackwardOp
+ , typename ForwardOp
+ >
+ struct result_
+ {
+ typedef First iter0;
+ typedef State fwd_state0;
+ typedef typename apply2< ForwardOp, fwd_state0, typename deref<iter0>::type >::type fwd_state1;
+ typedef typename mpl::next<iter0>::type iter1;
+ typedef typename apply2< ForwardOp, fwd_state1, typename deref<iter1>::type >::type fwd_state2;
+ typedef typename mpl::next<iter1>::type iter2;
+ typedef typename apply2< ForwardOp, fwd_state2, typename deref<iter2>::type >::type fwd_state3;
+ typedef typename mpl::next<iter2>::type iter3;
+ typedef typename apply2< ForwardOp, fwd_state3, typename deref<iter3>::type >::type fwd_state4;
+ typedef typename mpl::next<iter3>::type iter4;
+
+
+ typedef fwd_state4 bkwd_state4;
+ 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;
+ typedef iter4 iterator;
+ };
+};
+
+template< long N >
+struct reverse_fold_chunk
+{
+ template<
+ typename First
+ , typename Last
+ , typename State
+ , typename BackwardOp
+ , typename ForwardOp
+ >
+ struct result_
+ {
+ typedef First iter0;
+ typedef State fwd_state0;
+ typedef typename apply2< ForwardOp, fwd_state0, typename deref<iter0>::type >::type fwd_state1;
+ typedef typename mpl::next<iter0>::type iter1;
+ typedef typename apply2< ForwardOp, fwd_state1, typename deref<iter1>::type >::type fwd_state2;
+ typedef typename mpl::next<iter1>::type iter2;
+ typedef typename apply2< ForwardOp, fwd_state2, typename deref<iter2>::type >::type fwd_state3;
+ typedef typename mpl::next<iter2>::type iter3;
+ typedef typename apply2< ForwardOp, fwd_state3, typename deref<iter3>::type >::type fwd_state4;
+ typedef typename mpl::next<iter3>::type iter4;
+
+
+ typedef reverse_fold_impl<
+ ( (N - 4) < 0 ? 0 : N - 4 )
+ , iter4
+ , Last
+ , fwd_state4
+ , BackwardOp
+ , ForwardOp
+ > nested_chunk;
+
+ typedef typename nested_chunk::state bkwd_state4;
+ 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;
+ typedef typename nested_chunk::iterator iterator;
+ };
+};
+
+template<
+ typename First
+ , typename Last
+ , typename State
+ , typename BackwardOp
+ , typename ForwardOp
+ >
+struct reverse_fold_step;
+
+template<
+ typename Last
+ , typename State
+ >
+struct reverse_fold_null_step
+{
+ typedef Last iterator;
+ typedef State state;
+};
+
+template<>
+struct reverse_fold_chunk< -1 >
+{
+ template<
+ typename First
+ , typename Last
+ , typename State
+ , typename BackwardOp
+ , typename ForwardOp
+ >
+ struct result_
+ {
+ typedef typename if_<
+ typename is_same< First,Last >::type
+ , reverse_fold_null_step< Last,State >
+ , reverse_fold_step< First,Last,State,BackwardOp,ForwardOp >
+ >::type res_;
+
+ typedef typename res_::state state;
+ typedef typename res_::iterator iterator;
+ };
+};
+
+template<
+ typename First
+ , typename Last
+ , typename State
+ , typename BackwardOp
+ , typename ForwardOp
+ >
+struct reverse_fold_step
+{
+ typedef reverse_fold_chunk< -1 >::template result_<
+ typename mpl::next<First>::type
+ , Last
+ , typename apply2<ForwardOp,State, typename deref<First>::type>::type
+ , BackwardOp
+ , ForwardOp
+ > nested_step;
+
+ typedef typename apply2<
+ BackwardOp
+ , typename nested_step::state
+ , typename deref<First>::type
+ >::type state;
+
+ typedef typename nested_step::iterator iterator;
+};
+
+template<
+ long N
+ , typename First
+ , typename Last
+ , typename State
+ , typename BackwardOp
+ , typename ForwardOp
+ >
+struct reverse_fold_impl
+ : reverse_fold_chunk<N>
+ ::template result_< First,Last,State,BackwardOp,ForwardOp >
+{
+};
+
+}}}