BVB Source Codes

mars Show if.hpp Source code

Return Download mars: download if.hpp Source code - Download mars Source code - Type:.hpp
  1.  
  2. #ifndef BOOST_MPL_IF_HPP_INCLUDED
  3. #define BOOST_MPL_IF_HPP_INCLUDED
  4.  
  5. // Copyright Aleksey Gurtovoy 2000-2004
  6. //
  7. // Distributed under the Boost Software License, Version 1.0.
  8. // (See accompanying file LICENSE_1_0.txt or copy at
  9. // http://www.boost.org/LICENSE_1_0.txt)
  10. //
  11. // See http://www.boost.org/libs/mpl for documentation.
  12.  
  13. // $Id$
  14. // $Date$
  15. // $Revision$
  16.  
  17. #include <boost/mpl/aux_/value_wknd.hpp>
  18. #include <boost/mpl/aux_/static_cast.hpp>
  19. #include <boost/mpl/aux_/na_spec.hpp>
  20. #include <boost/mpl/aux_/lambda_support.hpp>
  21. #include <boost/mpl/aux_/config/integral.hpp>
  22. #include <boost/mpl/aux_/config/ctps.hpp>
  23. #include <boost/mpl/aux_/config/workaround.hpp>
  24.  
  25. namespace mars_boost {} namespace boost = mars_boost; namespace mars_boost { namespace mpl {
  26.  
  27. #if !defined(BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION)
  28.  
  29. template<
  30.       bool C
  31.     , typename T1
  32.     , typename T2
  33.     >
  34. struct if_c
  35. {
  36.     typedef T1 type;
  37. };
  38.  
  39. template<
  40.       typename T1
  41.     , typename T2
  42.     >
  43. struct if_c<false,T1,T2>
  44. {
  45.     typedef T2 type;
  46. };
  47.  
  48. // agurt, 05/sep/04: nondescriptive parameter names for the sake of DigitalMars
  49. // (and possibly MWCW < 8.0); see http://article.gmane.org/gmane.comp.lib.boost.devel/108959
  50. template<
  51.       typename BOOST_MPL_AUX_NA_PARAM(T1)
  52.     , typename BOOST_MPL_AUX_NA_PARAM(T2)
  53.     , typename BOOST_MPL_AUX_NA_PARAM(T3)
  54.     >
  55. struct if_
  56. {
  57.  private:
  58.     // agurt, 02/jan/03: two-step 'type' definition for the sake of aCC
  59.     typedef if_c<
  60. #if defined(BOOST_MPL_CFG_BCC_INTEGRAL_CONSTANTS)
  61.           BOOST_MPL_AUX_VALUE_WKND(T1)::value
  62. #else
  63.           BOOST_MPL_AUX_STATIC_CAST(bool, BOOST_MPL_AUX_VALUE_WKND(T1)::value)
  64. #endif
  65.         , T2
  66.         , T3
  67.         > almost_type_;
  68.  
  69.  public:
  70.     typedef typename almost_type_::type type;
  71.    
  72.     BOOST_MPL_AUX_LAMBDA_SUPPORT(3,if_,(T1,T2,T3))
  73. };
  74.  
  75. #else
  76.  
  77. // no partial class template specialization
  78.  
  79. namespace aux {
  80.  
  81. template< bool C >
  82. struct if_impl
  83. {
  84.     template< typename T1, typename T2 > struct result_
  85.     {
  86.         typedef T1 type;
  87.     };
  88. };
  89.  
  90. template<>
  91. struct if_impl<false>
  92. {
  93.     template< typename T1, typename T2 > struct result_
  94.     {
  95.         typedef T2 type;
  96.     };
  97. };
  98.  
  99. } // namespace aux
  100.  
  101. template<
  102.       bool C_
  103.     , typename T1
  104.     , typename T2
  105.     >
  106. struct if_c
  107. {
  108.     typedef typename aux::if_impl< C_ >
  109.         ::template result_<T1,T2>::type type;
  110. };
  111.  
  112. // (almost) copy & paste in order to save one more
  113. // recursively nested template instantiation to user
  114. template<
  115.       typename BOOST_MPL_AUX_NA_PARAM(C_)
  116.     , typename BOOST_MPL_AUX_NA_PARAM(T1)
  117.     , typename BOOST_MPL_AUX_NA_PARAM(T2)
  118.     >
  119. struct if_
  120. {
  121.     enum { msvc_wknd_ = BOOST_MPL_AUX_MSVC_VALUE_WKND(C_)::value };
  122.  
  123.     typedef typename aux::if_impl< BOOST_MPL_AUX_STATIC_CAST(bool, msvc_wknd_) >
  124.         ::template result_<T1,T2>::type type;
  125.  
  126.     BOOST_MPL_AUX_LAMBDA_SUPPORT(3,if_,(C_,T1,T2))
  127. };
  128.  
  129. #endif // BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION
  130.  
  131. BOOST_MPL_AUX_NA_SPEC(3, if_)
  132.  
  133. }}
  134.  
  135. #endif // BOOST_MPL_IF_HPP_INCLUDED
  136.  
downloadif.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