intrinsic_fwd.hpp 5.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203
  1. /*=============================================================================
  2. Copyright (c) 2001-2011 Joel de Guzman
  3. Distributed under the Boost Software License, Version 1.0. (See accompanying
  4. file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
  5. ==============================================================================*/
  6. #if !defined(BOOST_FUSION_SEQUENCE_INTRINSIC_FWD_HPP_INCLUDED)
  7. #define BOOST_FUSION_SEQUENCE_INTRINSIC_FWD_HPP_INCLUDED
  8. #include <boost/type_traits/is_const.hpp>
  9. #include <boost/utility/enable_if.hpp>
  10. #include <boost/fusion/support/is_sequence.hpp>
  11. namespace boost { namespace fusion
  12. {
  13. namespace extension
  14. {
  15. template <typename Tag>
  16. struct at_impl;
  17. template <typename Tag>
  18. struct begin_impl;
  19. template <typename Tag>
  20. struct empty_impl;
  21. template <typename Tag>
  22. struct end_impl;
  23. template <typename Tag>
  24. struct has_key_impl;
  25. template <typename Tag>
  26. struct segments_impl;
  27. template <typename Tag>
  28. struct size_impl;
  29. template <typename Tag>
  30. struct value_at_impl;
  31. template <typename Tag>
  32. struct at_key_impl;
  33. template <typename Tag>
  34. struct value_at_key_impl;
  35. }
  36. namespace result_of
  37. {
  38. template <typename Sequence, typename N>
  39. struct at;
  40. template <typename Sequence, int N>
  41. struct at_c;
  42. template <typename Sequence>
  43. struct back;
  44. template <typename Sequence>
  45. struct begin;
  46. template <typename Sequence>
  47. struct empty;
  48. template <typename Sequence>
  49. struct end;
  50. template <typename Sequence>
  51. struct front;
  52. template <typename Sequence, typename Key>
  53. struct has_key;
  54. template <typename Sequence>
  55. struct segments;
  56. template <typename Sequence>
  57. struct size;
  58. template <typename Sequence, typename N>
  59. struct value_at;
  60. template <typename Sequence, int N>
  61. struct value_at_c;
  62. template <typename Sequence, typename Key>
  63. struct at_key;
  64. template <typename Sequence, typename N>
  65. struct value_at_key;
  66. }
  67. template <typename N, typename Sequence>
  68. typename
  69. lazy_disable_if<
  70. is_const<Sequence>
  71. , result_of::at<Sequence, N>
  72. >::type
  73. at(Sequence& seq);
  74. template <typename N, typename Sequence>
  75. typename result_of::at<Sequence const, N>::type
  76. at(Sequence const& seq);
  77. template <int N, typename Sequence>
  78. typename
  79. lazy_disable_if<
  80. is_const<Sequence>
  81. , result_of::at_c<Sequence, N>
  82. >::type
  83. at_c(Sequence& seq);
  84. template <int N, typename Sequence>
  85. typename result_of::at_c<Sequence const, N>::type
  86. at_c(Sequence const& seq);
  87. template <typename Sequence>
  88. typename result_of::back<Sequence>::type
  89. back(Sequence& seq);
  90. template <typename Sequence>
  91. typename result_of::back<Sequence const>::type
  92. back(Sequence const& seq);
  93. template <typename Sequence>
  94. typename
  95. lazy_enable_if<
  96. traits::is_sequence<Sequence>
  97. , result_of::begin<Sequence>
  98. >::type const
  99. begin(Sequence& seq);
  100. template <typename Sequence>
  101. typename
  102. lazy_enable_if<
  103. traits::is_sequence<Sequence>
  104. , result_of::begin<Sequence const>
  105. >::type const
  106. begin(Sequence const& seq);
  107. template <typename Sequence>
  108. typename result_of::empty<Sequence>::type
  109. empty(Sequence const&);
  110. template <typename Sequence>
  111. typename
  112. lazy_enable_if<
  113. traits::is_sequence<Sequence>
  114. , result_of::end<Sequence>
  115. >::type const
  116. end(Sequence& seq);
  117. template <typename Sequence>
  118. typename
  119. lazy_enable_if<
  120. traits::is_sequence<Sequence>
  121. , result_of::end<Sequence const>
  122. >::type const
  123. end(Sequence const& seq);
  124. template <typename Sequence>
  125. typename result_of::front<Sequence>::type
  126. front(Sequence& seq);
  127. template <typename Sequence>
  128. typename result_of::front<Sequence const>::type
  129. front(Sequence const& seq);
  130. template <typename Key, typename Sequence>
  131. typename result_of::has_key<Sequence, Key>::type
  132. has_key(Sequence const& seq);
  133. template <typename Sequence>
  134. typename
  135. lazy_disable_if<
  136. is_const<Sequence>
  137. , result_of::segments<Sequence>
  138. >::type
  139. segments(Sequence& seq);
  140. template <typename Sequence>
  141. typename result_of::segments<Sequence const>::type
  142. segments(Sequence const& seq);
  143. template <typename Sequence>
  144. typename result_of::size<Sequence>::type
  145. size(Sequence const&);
  146. template <typename Key, typename Sequence>
  147. typename
  148. lazy_disable_if<
  149. is_const<Sequence>
  150. , result_of::at_key<Sequence, Key>
  151. >::type
  152. at_key(Sequence& seq);
  153. template <typename Key, typename Sequence>
  154. typename result_of::at_key<Sequence const, Key>::type
  155. at_key(Sequence const& seq);
  156. }}
  157. #endif