BVB Source Codes

mars Show transform.hpp Source code

Return Download mars: download transform.hpp Source code - Download mars Source code - Type:.hpp
  1.  
  2. #ifndef BOOST_MPL_TRANSFORM_HPP_INCLUDED
  3. #define BOOST_MPL_TRANSFORM_HPP_INCLUDED
  4.  
  5. // Copyright Aleksey Gurtovoy 2000-2004
  6. // Copyright David Abrahams 2003-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/fold.hpp>
  19. #include <boost/mpl/reverse_fold.hpp>
  20. #include <boost/mpl/pair_view.hpp>
  21. #include <boost/mpl/is_sequence.hpp>
  22. #include <boost/mpl/eval_if.hpp>
  23. #include <boost/mpl/lambda.hpp>
  24. #include <boost/mpl/bind.hpp>
  25. #include <boost/mpl/or.hpp>
  26. #include <boost/mpl/not.hpp>
  27. #include <boost/mpl/aux_/na.hpp>
  28. #include <boost/mpl/aux_/inserter_algorithm.hpp>
  29.  
  30. namespace mars_boost {} namespace boost = mars_boost; namespace mars_boost { namespace mpl {
  31.  
  32. namespace aux {
  33.  
  34. template<
  35.       typename Seq
  36.     , typename Op
  37.     , typename In
  38.     >
  39. struct transform1_impl
  40.     : fold<
  41.           Seq
  42.         , typename In::state
  43.         , bind2< typename lambda< typename In::operation >::type
  44.             , _1
  45.             , bind1< typename lambda<Op>::type, _2>
  46.             >
  47.         >
  48. {
  49. };
  50.  
  51. template<
  52.       typename Seq
  53.     , typename Op
  54.     , typename In
  55.     >
  56. struct reverse_transform1_impl
  57.     : reverse_fold<
  58.           Seq
  59.         , typename In::state
  60.         , bind2< typename lambda< typename In::operation >::type
  61.             , _1
  62.             , bind1< typename lambda<Op>::type, _2>
  63.             >
  64.         >
  65. {
  66. };
  67.  
  68. template<
  69.       typename Seq1
  70.     , typename Seq2
  71.     , typename Op
  72.     , typename In
  73.     >
  74. struct transform2_impl
  75.     : fold<
  76.           pair_view<Seq1,Seq2>
  77.         , typename In::state
  78.         , bind2< typename lambda< typename In::operation >::type
  79.             , _1
  80.             , bind2<
  81.                   typename lambda<Op>::type
  82.                 , bind1<first<>,_2>
  83.                 , bind1<second<>,_2>
  84.                 >
  85.             >
  86.         >
  87. {
  88. };
  89.  
  90. template<
  91.       typename Seq1
  92.     , typename Seq2
  93.     , typename Op
  94.     , typename In
  95.     >
  96. struct reverse_transform2_impl
  97.     : reverse_fold<
  98.           pair_view<Seq1,Seq2>
  99.         , typename In::state
  100.         , bind2< typename lambda< typename In::operation >::type
  101.             , _1
  102.             , bind2< typename lambda< Op >::type
  103.                 , bind1<first<>,_2>
  104.                 , bind1<second<>,_2>
  105.                 >
  106.             >
  107.         >
  108. {
  109. };
  110.  
  111. } // namespace aux
  112.  
  113. BOOST_MPL_AUX_INSERTER_ALGORITHM_DEF(3, transform1)                    
  114. BOOST_MPL_AUX_INSERTER_ALGORITHM_DEF(4, transform2)
  115.    
  116. #define AUX778076_TRANSFORM_DEF(name)                                   \
  117. template<                                                               \
  118.       typename BOOST_MPL_AUX_NA_PARAM(Seq1)                             \
  119.     , typename BOOST_MPL_AUX_NA_PARAM(Seq2OrOperation)                  \
  120.     , typename BOOST_MPL_AUX_NA_PARAM(OperationOrInserter)              \
  121.     , typename BOOST_MPL_AUX_NA_PARAM(Inserter)                         \
  122.     >                                                                   \
  123. struct name                                                             \
  124. {                                                                       \
  125.     typedef typename eval_if<                                           \
  126.           or_<                                                          \
  127.               is_na<OperationOrInserter>                                \
  128.             , is_lambda_expression< Seq2OrOperation >                   \
  129.             , not_< is_sequence<Seq2OrOperation> >                      \
  130.             >                                                           \
  131.         , name##1<Seq1,Seq2OrOperation,OperationOrInserter>             \
  132.         , name##2<Seq1,Seq2OrOperation,OperationOrInserter,Inserter>    \
  133.         >::type type;                                                   \
  134. };                                                                      \
  135. BOOST_MPL_AUX_NA_SPEC(4, name)                                          \
  136. /**/
  137.  
  138. AUX778076_TRANSFORM_DEF(transform)
  139. AUX778076_TRANSFORM_DEF(reverse_transform)
  140.  
  141. #undef AUX778076_TRANSFORM_DEF
  142.  
  143. }}
  144.  
  145. #endif // BOOST_MPL_TRANSFORM_HPP_INCLUDED
  146.  
downloadtransform.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