BVB Source Codes

mars Show fold_impl_body.hpp Source code

Return Download mars: download fold_impl_body.hpp Source code - Download mars Source code - Type:.hpp
  1.  
  2. // NO INCLUDE GUARDS, THE HEADER IS INTENDED FOR MULTIPLE INCLUSION
  3.  
  4. #if !defined(BOOST_PP_IS_ITERATING)
  5.  
  6. // Copyright Aleksey Gurtovoy 2000-2004
  7. //
  8. // Distributed under the Boost Software License, Version 1.0.
  9. // (See accompanying file LICENSE_1_0.txt or copy at
  10. // http://www.boost.org/LICENSE_1_0.txt)
  11. //
  12. // See http://www.boost.org/libs/mpl for documentation.
  13.  
  14. // $Id$
  15. // $Date$
  16. // $Revision$
  17.  
  18. #   include <boost/mpl/limits/unrolling.hpp>
  19. #   include <boost/mpl/aux_/preprocessor/repeat.hpp>
  20. #   include <boost/mpl/aux_/config/workaround.hpp>
  21. #   include <boost/mpl/aux_/config/ctps.hpp>
  22. #   include <boost/mpl/aux_/nttp_decl.hpp>
  23. #   include <boost/mpl/aux_/config/eti.hpp>
  24.  
  25. #   include <boost/preprocessor/iterate.hpp>
  26. #   include <boost/preprocessor/dec.hpp>
  27. #   include <boost/preprocessor/cat.hpp>
  28.  
  29. // local macros, #undef-ined at the end of the header
  30.  
  31. #   define AUX778076_ITER_FOLD_STEP(unused, i, unused2) \
  32.     typedef typename apply2< \
  33.           ForwardOp \
  34.         , BOOST_PP_CAT(state,i) \
  35.         , AUX778076_FOLD_IMPL_OP(BOOST_PP_CAT(iter,i)) \
  36.         >::type BOOST_PP_CAT(state,BOOST_PP_INC(i)); \
  37.     typedef typename mpl::next<BOOST_PP_CAT(iter,i)>::type \
  38.         BOOST_PP_CAT(iter,BOOST_PP_INC(i)); \
  39.     /**/
  40.  
  41. #   define AUX778076_FOLD_IMPL_NAME \
  42.     BOOST_PP_CAT(AUX778076_FOLD_IMPL_NAME_PREFIX,_impl) \
  43.     /**/
  44.  
  45. #   define AUX778076_FOLD_CHUNK_NAME \
  46.     BOOST_PP_CAT(AUX778076_FOLD_IMPL_NAME_PREFIX,_chunk) \
  47.     /**/
  48.  
  49. namespace mars_boost {} namespace boost = mars_boost; namespace mars_boost { namespace mpl { namespace aux {
  50.  
  51. /// forward declaration
  52. template<
  53.       BOOST_MPL_AUX_NTTP_DECL(int, N)
  54.     , typename First
  55.     , typename Last
  56.     , typename State
  57.     , typename ForwardOp
  58.     >
  59. struct AUX778076_FOLD_IMPL_NAME;
  60.  
  61. #if !defined(BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION)
  62.  
  63. #   if !BOOST_WORKAROUND(__BORLANDC__, < 0x600)
  64.  
  65. #   define BOOST_PP_ITERATION_PARAMS_1 \
  66.     (3,(0, BOOST_MPL_LIMIT_UNROLLING, <boost/mpl/aux_/fold_impl_body.hpp>))
  67. #   include BOOST_PP_ITERATE()
  68.  
  69. // implementation for N that exceeds BOOST_MPL_LIMIT_UNROLLING
  70. template<
  71.       BOOST_MPL_AUX_NTTP_DECL(int, N)
  72.     , typename First
  73.     , typename Last
  74.     , typename State
  75.     , typename ForwardOp
  76.     >
  77. struct AUX778076_FOLD_IMPL_NAME
  78. {
  79.     typedef AUX778076_FOLD_IMPL_NAME<
  80.           BOOST_MPL_LIMIT_UNROLLING
  81.         , First
  82.         , Last
  83.         , State
  84.         , ForwardOp
  85.         > chunk_;
  86.  
  87.     typedef AUX778076_FOLD_IMPL_NAME<
  88.           ( (N - BOOST_MPL_LIMIT_UNROLLING) < 0 ? 0 : N - BOOST_MPL_LIMIT_UNROLLING )
  89.         , typename chunk_::iterator
  90.         , Last
  91.         , typename chunk_::state
  92.         , ForwardOp
  93.         > res_;
  94.        
  95.     typedef typename res_::state state;
  96.     typedef typename res_::iterator iterator;
  97. };
  98.  
  99. // fallback implementation for sequences of unknown size
  100. template<
  101.       typename First
  102.     , typename Last
  103.     , typename State
  104.     , typename ForwardOp
  105.     >
  106. struct AUX778076_FOLD_IMPL_NAME<-1,First,Last,State,ForwardOp>
  107.     : AUX778076_FOLD_IMPL_NAME<
  108.           -1
  109.         , typename mpl::next<First>::type
  110.         , Last
  111.         , typename apply2<ForwardOp,State,AUX778076_FOLD_IMPL_OP(First)>::type
  112.         , ForwardOp
  113.         >
  114. {
  115. };
  116.  
  117. template<
  118.       typename Last
  119.     , typename State
  120.     , typename ForwardOp
  121.     >
  122. struct AUX778076_FOLD_IMPL_NAME<-1,Last,Last,State,ForwardOp>
  123. {
  124.     typedef State state;
  125.     typedef Last iterator;
  126. };
  127.  
  128. #   else // BOOST_WORKAROUND(__BORLANDC__, < 0x600)
  129.  
  130. // Borland have some serious problems with the unrolled version, so
  131. // we always use a basic implementation
  132. template<
  133.       BOOST_MPL_AUX_NTTP_DECL(int, N)
  134.     , typename First
  135.     , typename Last
  136.     , typename State
  137.     , typename ForwardOp
  138.     >
  139. struct AUX778076_FOLD_IMPL_NAME
  140. {
  141.     typedef AUX778076_FOLD_IMPL_NAME<
  142.           -1
  143.         , typename mpl::next<First>::type
  144.         , Last
  145.         , typename apply2<ForwardOp,State,AUX778076_FOLD_IMPL_OP(First)>::type
  146.         , ForwardOp
  147.         > res_;
  148.  
  149.     typedef typename res_::state state;
  150.     typedef typename res_::iterator iterator;
  151.     typedef state type;
  152. };
  153.  
  154. template<
  155.       BOOST_MPL_AUX_NTTP_DECL(int, N)
  156.      , typename Last
  157.     , typename State
  158.     , typename ForwardOp
  159.     >
  160. struct AUX778076_FOLD_IMPL_NAME<N,Last,Last,State,ForwardOp >
  161. {
  162.     typedef State state;
  163.     typedef Last iterator;
  164.     typedef state type;
  165. };
  166.  
  167. #   endif // BOOST_WORKAROUND(__BORLANDC__, < 0x600)
  168.  
  169. #else // BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION
  170.  
  171. template< BOOST_MPL_AUX_NTTP_DECL(int, N) >
  172. struct AUX778076_FOLD_CHUNK_NAME;
  173.  
  174. #   define BOOST_PP_ITERATION_PARAMS_1 \
  175.     (3,(0, BOOST_MPL_LIMIT_UNROLLING, <boost/mpl/aux_/fold_impl_body.hpp>))
  176. #   include BOOST_PP_ITERATE()
  177.  
  178. // implementation for N that exceeds BOOST_MPL_LIMIT_UNROLLING
  179. template< BOOST_MPL_AUX_NTTP_DECL(int, N) >
  180. struct AUX778076_FOLD_CHUNK_NAME
  181. {
  182.     template<
  183.           typename First
  184.         , typename Last
  185.         , typename State
  186.         , typename ForwardOp
  187.         >
  188.     struct result_
  189.     {
  190.         typedef AUX778076_FOLD_IMPL_NAME<
  191.               BOOST_MPL_LIMIT_UNROLLING
  192.             , First
  193.             , Last
  194.             , State
  195.             , ForwardOp
  196.             > chunk_;
  197.  
  198.         typedef AUX778076_FOLD_IMPL_NAME<
  199.               ( (N - BOOST_MPL_LIMIT_UNROLLING) < 0 ? 0 : N - BOOST_MPL_LIMIT_UNROLLING )
  200.             , typename chunk_::iterator
  201.             , Last
  202.             , typename chunk_::state
  203.             , ForwardOp
  204.             > res_;
  205.  
  206.         typedef typename res_::state state;
  207.         typedef typename res_::iterator iterator;
  208.     };
  209. };
  210.  
  211. // fallback implementation for sequences of unknown size
  212. template<
  213.       typename First
  214.     , typename Last
  215.     , typename State
  216.     , typename ForwardOp
  217.     >
  218. struct BOOST_PP_CAT(AUX778076_FOLD_IMPL_NAME_PREFIX,_step);
  219.  
  220. template<
  221.       typename Last
  222.     , typename State
  223.     >
  224. struct BOOST_PP_CAT(AUX778076_FOLD_IMPL_NAME_PREFIX,_null_step)
  225. {
  226.     typedef Last iterator;
  227.     typedef State state;
  228. };
  229.  
  230. template<>
  231. struct AUX778076_FOLD_CHUNK_NAME<-1>
  232. {
  233.     template<
  234.           typename First
  235.         , typename Last
  236.         , typename State
  237.         , typename ForwardOp
  238.         >
  239.     struct result_
  240.     {
  241.         typedef typename if_<
  242.               typename is_same<First,Last>::type
  243.             , BOOST_PP_CAT(AUX778076_FOLD_IMPL_NAME_PREFIX,_null_step)<Last,State>
  244.             , BOOST_PP_CAT(AUX778076_FOLD_IMPL_NAME_PREFIX,_step)<First,Last,State,ForwardOp>
  245.             >::type res_;
  246.  
  247.         typedef typename res_::state state;
  248.         typedef typename res_::iterator iterator;
  249.     };
  250.  
  251. #if defined(BOOST_MPL_CFG_MSVC_60_ETI_BUG)
  252.     /// ETI workaround
  253.     template<> struct result_<int,int,int,int>
  254.     {
  255.         typedef int state;
  256.         typedef int iterator;
  257.     };
  258. #endif
  259. };
  260.  
  261. template<
  262.       typename First
  263.     , typename Last
  264.     , typename State
  265.     , typename ForwardOp
  266.     >
  267. struct BOOST_PP_CAT(AUX778076_FOLD_IMPL_NAME_PREFIX,_step)
  268. {
  269.     // can't inherit here - it breaks MSVC 7.0
  270.     typedef AUX778076_FOLD_CHUNK_NAME<-1>::template result_<
  271.           typename mpl::next<First>::type
  272.         , Last
  273.         , typename apply2<ForwardOp,State,AUX778076_FOLD_IMPL_OP(First)>::type
  274.         , ForwardOp
  275.         > chunk_;
  276.  
  277.     typedef typename chunk_::state state;
  278.     typedef typename chunk_::iterator iterator;
  279. };
  280.  
  281. template<
  282.       BOOST_MPL_AUX_NTTP_DECL(int, N)
  283.     , typename First
  284.     , typename Last
  285.     , typename State
  286.     , typename ForwardOp
  287.     >
  288. struct AUX778076_FOLD_IMPL_NAME
  289.     : AUX778076_FOLD_CHUNK_NAME<N>
  290.         ::template result_<First,Last,State,ForwardOp>
  291. {
  292. };
  293.  
  294. #endif // BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION
  295.  
  296. }}}
  297.  
  298. #   undef AUX778076_FOLD_IMPL_NAME
  299. #   undef AUX778076_FOLD_CHUNK_NAME
  300. #   undef AUX778076_ITER_FOLD_STEP
  301.  
  302. #undef AUX778076_FOLD_IMPL_OP
  303. #undef AUX778076_FOLD_IMPL_NAME_PREFIX
  304.  
  305. ///// iteration
  306.  
  307. #else
  308.  
  309. #   define n_ BOOST_PP_FRAME_ITERATION(1)
  310.  
  311. #if !defined(BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION)
  312.  
  313. template<
  314.       typename First
  315.     , typename Last
  316.     , typename State
  317.     , typename ForwardOp
  318.     >
  319. struct AUX778076_FOLD_IMPL_NAME<n_,First,Last,State,ForwardOp>
  320. {
  321.     typedef First iter0;
  322.     typedef State state0;
  323.  
  324.     BOOST_MPL_PP_REPEAT(n_, AUX778076_ITER_FOLD_STEP, unused)
  325.  
  326.     typedef BOOST_PP_CAT(state,n_) state;
  327.     typedef BOOST_PP_CAT(iter,n_) iterator;
  328. };
  329.  
  330. #else
  331.  
  332. template<> struct AUX778076_FOLD_CHUNK_NAME<n_>
  333. {
  334.     template<
  335.           typename First
  336.         , typename Last
  337.         , typename State
  338.         , typename ForwardOp
  339.         >
  340.     struct result_
  341.     {
  342.         typedef First iter0;
  343.         typedef State state0;
  344.  
  345.         BOOST_MPL_PP_REPEAT(n_, AUX778076_ITER_FOLD_STEP, unused)
  346.  
  347.         typedef BOOST_PP_CAT(state,n_) state;
  348.         typedef BOOST_PP_CAT(iter,n_) iterator;
  349.     };
  350.  
  351. #if defined(BOOST_MPL_CFG_MSVC_60_ETI_BUG)
  352.     /// ETI workaround
  353.     template<> struct result_<int,int,int,int>
  354.     {
  355.         typedef int state;
  356.         typedef int iterator;
  357.     };
  358. #endif
  359. };
  360.  
  361. #endif // BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION
  362.  
  363. #   undef n_
  364.  
  365. #endif // BOOST_PP_IS_ITERATING
  366.  
downloadfold_impl_body.hpp Source code - Download mars Source code
Related Source Codes/Software:
Hero - Elegant transition library for iOS & tvOS 2017-06-09
deep-photo-styletransfer - Code and data for paper "Deep Photo Style Transfer... 2017-06-09
mastodon - A GNU Social-compatible microblogging server ... 2017-06-09
plyr - A simple HTML5, YouTube and Vimeo player ... 2017-06-08
prepack - Prepack is a partial evaluator for JavaScript. Pre... 2017-06-08
Public-APIs - 2017-06-09
lottie-ios - An iOS library to natively render After Effects ve... 2017-06-09
Awesome-Hacking - A collection of various awesome lists for hackers,... 2017-06-09
algorithms - Minimal examples of data structures and algorithms... 2017-06-10
lectures - Oxford Deep NLP 2017 course 2017-06-10
CRYENGINE - CRYENGINE is a powerful real-time game development... 2017-06-11
postal - 2017-06-11
reactide - Reactide is the first dedicated IDE for React web ... 2017-06-11
rkt - rkt is a pod-native container engine for Linux. It... 2017-06-11
uWebSockets - Tiny WebSockets https://for... 2017-06-11
realworld - TodoMVC for the RealWorld - Exemplary fullstack Me... 2017-06-11
goreplay - GoReplay is an open-source tool for capturing and ... 2017-06-10
pyenv - Simple Python version management 2017-06-10
redux-saga - An alternative side effect model for Redux apps ... 2017-06-10
angular-starter - 2017-06-10

 Back to top