BVB Source Codes

mars Show sequence_tag.hpp Source code

Return Download mars: download sequence_tag.hpp Source code - Download mars Source code - Type:.hpp
  1.  
  2. #ifndef BOOST_MPL_SEQUENCE_TAG_HPP_INCLUDED
  3. #define BOOST_MPL_SEQUENCE_TAG_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/sequence_tag_fwd.hpp>
  18. #include <boost/mpl/aux_/has_tag.hpp>
  19. #include <boost/mpl/aux_/has_begin.hpp>
  20. #include <boost/mpl/aux_/na_spec.hpp>
  21. #include <boost/mpl/aux_/is_msvc_eti_arg.hpp>
  22. #include <boost/mpl/aux_/config/eti.hpp>
  23. #include <boost/mpl/aux_/yes_no.hpp>
  24. #include <boost/mpl/aux_/config/workaround.hpp>
  25.  
  26. namespace mars_boost {} namespace boost = mars_boost; namespace mars_boost { namespace mpl {
  27.  
  28. // agurt, 27/nov/02: have to use a simplistic 'sequence_tag' implementation
  29. // on MSVC to avoid dreadful "internal structure overflow" error
  30. #if BOOST_WORKAROUND(BOOST_MSVC, < 1300) \
  31.     || defined(BOOST_MPL_CFG_NO_HAS_XXX)
  32.  
  33. template<
  34.       typename BOOST_MPL_AUX_NA_PARAM(Sequence)
  35.     >
  36. struct sequence_tag
  37. {
  38.     typedef typename Sequence::tag type;
  39. };
  40.  
  41. #elif BOOST_WORKAROUND(BOOST_MSVC, == 1300)
  42.  
  43. // agurt, 07/feb/03: workaround for what seems to be MSVC 7.0-specific ETI issue
  44.  
  45. namespace aux {
  46.  
  47. template< bool >
  48. struct sequence_tag_impl
  49. {
  50.     template< typename Sequence > struct result_
  51.     {
  52.         typedef typename Sequence::tag type;
  53.     };
  54. };
  55.  
  56. template<>
  57. struct sequence_tag_impl<false>
  58. {
  59.     template< typename Sequence > struct result_
  60.     {
  61.         typedef int type;
  62.     };
  63. };
  64.  
  65. } // namespace aux
  66.  
  67. template<
  68.       typename BOOST_MPL_AUX_NA_PARAM(Sequence)
  69.     >
  70. struct sequence_tag
  71.     : aux::sequence_tag_impl< !aux::is_msvc_eti_arg<Sequence>::value >
  72.         ::template result_<Sequence>
  73. {
  74. };
  75.  
  76. #else
  77.  
  78. namespace aux {
  79.  
  80. template< bool has_tag_, bool has_begin_ >
  81. struct sequence_tag_impl
  82. {
  83.     // agurt 24/nov/02: MSVC 6.5 gets confused in 'sequence_tag_impl<true>'
  84.     // specialization below, if we name it 'result_' here
  85.     template< typename Sequence > struct result2_;
  86. };
  87.  
  88. #   define AUX_CLASS_SEQUENCE_TAG_SPEC(has_tag, has_begin, result_type) \
  89. template<> struct sequence_tag_impl<has_tag,has_begin> \
  90. { \
  91.     template< typename Sequence > struct result2_ \
  92.     { \
  93.         typedef result_type type; \
  94.     }; \
  95. }; \
  96. /**/
  97.  
  98. AUX_CLASS_SEQUENCE_TAG_SPEC(true, true, typename Sequence::tag)
  99. AUX_CLASS_SEQUENCE_TAG_SPEC(true, false, typename Sequence::tag)
  100. AUX_CLASS_SEQUENCE_TAG_SPEC(false, true, nested_begin_end_tag)
  101. AUX_CLASS_SEQUENCE_TAG_SPEC(false, false, non_sequence_tag)
  102.  
  103. #   undef AUX_CLASS_SEQUENCE_TAG_SPEC
  104.  
  105. } // namespace aux
  106.  
  107. template<
  108.       typename BOOST_MPL_AUX_NA_PARAM(Sequence)
  109.     >
  110. struct sequence_tag
  111.     : aux::sequence_tag_impl<
  112.           ::mars_boost::mpl::aux::has_tag<Sequence>::value
  113.         , ::mars_boost::mpl::aux::has_begin<Sequence>::value
  114.         >::template result2_<Sequence>
  115. {
  116. };
  117.  
  118. #endif // BOOST_MSVC
  119.  
  120. BOOST_MPL_AUX_NA_SPEC(1, sequence_tag)
  121.  
  122. }}
  123.  
  124. #endif // BOOST_MPL_SEQUENCE_TAG_HPP_INCLUDED
  125.  
downloadsequence_tag.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