BVB Source Codes

mars Show iter_fold_if_impl.hpp Source code

Return Download mars: download iter_fold_if_impl.hpp Source code - Download mars Source code - Type:.hpp
  1.  
  2. #ifndef BOOST_MPL_AUX_ITER_FOLD_IF_IMPL_HPP_INCLUDED
  3. #define BOOST_MPL_AUX_ITER_FOLD_IF_IMPL_HPP_INCLUDED
  4.  
  5. // Copyright Aleksey Gurtovoy 2001-2004
  6. // Copyright David Abrahams 2001-2002
  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. #if !defined(BOOST_MPL_PREPROCESSING_MODE)
  19. #   include <boost/mpl/identity.hpp>
  20. #   include <boost/mpl/next.hpp>
  21. #   include <boost/mpl/if.hpp>
  22. #   include <boost/mpl/apply.hpp>
  23. #   include <boost/mpl/aux_/value_wknd.hpp>
  24. #endif
  25.  
  26. #include <boost/mpl/aux_/config/use_preprocessed.hpp>
  27.  
  28. #if !defined(BOOST_MPL_CFG_NO_PREPROCESSED_HEADERS) \
  29.     && !defined(BOOST_MPL_PREPROCESSING_MODE)
  30.  
  31. #   define BOOST_MPL_PREPROCESSED_HEADER iter_fold_if_impl.hpp
  32. #   include <boost/mpl/aux_/include_preprocessed.hpp>
  33.  
  34. #else
  35.  
  36. #   include <boost/mpl/limits/unrolling.hpp>
  37. #   include <boost/preprocessor/arithmetic/sub.hpp>
  38. #   include <boost/preprocessor/repeat.hpp>
  39. #   include <boost/preprocessor/inc.hpp>
  40. #   include <boost/preprocessor/dec.hpp>
  41. #   include <boost/preprocessor/cat.hpp>
  42.  
  43. namespace mars_boost {} namespace boost = mars_boost; namespace mars_boost { namespace mpl { namespace aux {
  44.  
  45. template< typename Iterator, typename State >
  46. struct iter_fold_if_null_step
  47. {
  48.     typedef State state;
  49.     typedef Iterator iterator;
  50. };
  51.  
  52. template< bool >
  53. struct iter_fold_if_step_impl
  54. {
  55.     template<
  56.           typename Iterator
  57.         , typename State
  58.         , typename StateOp
  59.         , typename IteratorOp
  60.         >
  61.     struct result_
  62.     {
  63.         typedef typename apply2<StateOp,State,Iterator>::type state;
  64.         typedef typename IteratorOp::type iterator;
  65.     };
  66. };
  67.  
  68. template<>
  69. struct iter_fold_if_step_impl<false>
  70. {
  71.     template<
  72.           typename Iterator
  73.         , typename State
  74.         , typename StateOp
  75.         , typename IteratorOp
  76.         >
  77.     struct result_
  78.     {
  79.         typedef State state;
  80.         typedef Iterator iterator;
  81.     };
  82. };
  83.  
  84. // agurt, 25/jun/02: MSVC 6.5 workaround, had to get rid of inheritance
  85. // here and in 'iter_fold_if_backward_step', because sometimes it interfered
  86. // with the "early template instantiation bug" in _really_ ugly ways
  87. template<
  88.       typename Iterator
  89.     , typename State
  90.     , typename ForwardOp
  91.     , typename Predicate
  92.     >
  93. struct iter_fold_if_forward_step
  94. {
  95.     typedef typename apply2<Predicate,State,Iterator>::type not_last;
  96.     typedef typename iter_fold_if_step_impl<
  97.           BOOST_MPL_AUX_MSVC_VALUE_WKND(not_last)::value
  98.         >::template result_< Iterator,State,ForwardOp,mpl::next<Iterator> > impl_;
  99.  
  100.     typedef typename impl_::state state;
  101.     typedef typename impl_::iterator iterator;
  102. };
  103.  
  104. template<
  105.       typename Iterator
  106.     , typename State
  107.     , typename BackwardOp
  108.     , typename Predicate
  109.     >
  110. struct iter_fold_if_backward_step
  111. {
  112.     typedef typename apply2<Predicate,State,Iterator>::type not_last;
  113.     typedef typename iter_fold_if_step_impl<
  114.           BOOST_MPL_AUX_MSVC_VALUE_WKND(not_last)::value
  115.         >::template result_< Iterator,State,BackwardOp,identity<Iterator> > impl_;
  116.  
  117.     typedef typename impl_::state state;
  118.     typedef typename impl_::iterator iterator;
  119. };
  120.  
  121.  
  122. // local macros, #undef-ined at the end of the header
  123.  
  124. #   define AUX_ITER_FOLD_FORWARD_STEP(unused, i, unused2) \
  125.     typedef iter_fold_if_forward_step< \
  126.           typename BOOST_PP_CAT(forward_step,i)::iterator \
  127.         , typename BOOST_PP_CAT(forward_step,i)::state \
  128.         , ForwardOp \
  129.         , ForwardPredicate \
  130.         > BOOST_PP_CAT(forward_step, BOOST_PP_INC(i)); \
  131.     /**/
  132.  
  133. #   define AUX_ITER_FOLD_BACKWARD_STEP_FUNC(i) \
  134.     typedef iter_fold_if_backward_step< \
  135.           typename BOOST_PP_CAT(forward_step,BOOST_PP_DEC(i))::iterator \
  136.         , typename BOOST_PP_CAT(backward_step,i)::state \
  137.         , BackwardOp \
  138.         , BackwardPredicate \
  139.         > BOOST_PP_CAT(backward_step,BOOST_PP_DEC(i)); \
  140.     /**/
  141.  
  142. #   define AUX_ITER_FOLD_BACKWARD_STEP(unused, i, unused2) \
  143.     AUX_ITER_FOLD_BACKWARD_STEP_FUNC( \
  144.         BOOST_PP_SUB_D(1,BOOST_MPL_LIMIT_UNROLLING,i) \
  145.         ) \
  146.     /**/
  147.  
  148. #   define AUX_LAST_FORWARD_STEP \
  149.     BOOST_PP_CAT(forward_step, BOOST_MPL_LIMIT_UNROLLING) \
  150.     /**/
  151.  
  152. #   define AUX_LAST_BACKWARD_STEP \
  153.     BOOST_PP_CAT(backward_step, BOOST_MPL_LIMIT_UNROLLING) \
  154.     /**/
  155.  
  156. template<
  157.       typename Iterator
  158.     , typename State
  159.     , typename ForwardOp
  160.     , typename ForwardPredicate
  161.     , typename BackwardOp
  162.     , typename BackwardPredicate
  163.     >
  164. struct iter_fold_if_impl
  165. {
  166.  private:
  167.     typedef iter_fold_if_null_step<Iterator,State> forward_step0;
  168.     BOOST_PP_REPEAT(
  169.           BOOST_MPL_LIMIT_UNROLLING
  170.         , AUX_ITER_FOLD_FORWARD_STEP
  171.         , unused
  172.         )
  173.    
  174.     typedef typename if_<
  175.           typename AUX_LAST_FORWARD_STEP::not_last
  176.         , iter_fold_if_impl<
  177.               typename AUX_LAST_FORWARD_STEP::iterator
  178.             , typename AUX_LAST_FORWARD_STEP::state
  179.             , ForwardOp
  180.             , ForwardPredicate
  181.             , BackwardOp
  182.             , BackwardPredicate
  183.             >
  184.         , iter_fold_if_null_step<
  185.               typename AUX_LAST_FORWARD_STEP::iterator
  186.             , typename AUX_LAST_FORWARD_STEP::state
  187.             >
  188.         >::type AUX_LAST_BACKWARD_STEP;
  189.  
  190.     BOOST_PP_REPEAT(
  191.           BOOST_MPL_LIMIT_UNROLLING
  192.         , AUX_ITER_FOLD_BACKWARD_STEP
  193.         , unused
  194.         )
  195.  
  196.  public:
  197.     typedef typename backward_step0::state state;
  198.     typedef typename AUX_LAST_BACKWARD_STEP::iterator iterator;
  199. };
  200.  
  201. #   undef AUX_LAST_BACKWARD_STEP
  202. #   undef AUX_LAST_FORWARD_STEP
  203. #   undef AUX_ITER_FOLD_BACKWARD_STEP
  204. #   undef AUX_ITER_FOLD_BACKWARD_STEP_FUNC
  205. #   undef AUX_ITER_FOLD_FORWARD_STEP
  206.  
  207. }}}
  208.  
  209. #endif // BOOST_MPL_CFG_NO_PREPROCESSED_HEADERS
  210. #endif // BOOST_MPL_AUX_ITER_FOLD_IF_IMPL_HPP_INCLUDED
  211.  
downloaditer_fold_if_impl.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