xpressive_typeof.hpp 8.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150
  1. ///////////////////////////////////////////////////////////////////////////////
  2. /// \file xpressive_typeof.hpp
  3. /// Type registrations so that xpressive can be used with the Boost.Typeof library.
  4. //
  5. // Copyright 2008 Eric Niebler. Distributed under the Boost
  6. // Software License, Version 1.0. (See accompanying file
  7. // LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
  8. #ifndef BOOST_XPRESSIVE_XPRESSIVE_TYPEOF_H
  9. #define BOOST_XPRESSIVE_XPRESSIVE_TYPEOF_H
  10. // MS compatible compilers support #pragma once
  11. #if defined(_MSC_VER)
  12. # pragma once
  13. #endif
  14. #include <boost/config.hpp>
  15. #include <boost/typeof/typeof.hpp>
  16. #ifndef BOOST_NO_STD_LOCALE
  17. # include <boost/typeof/std/locale.hpp>
  18. #endif
  19. #include <boost/proto/proto_typeof.hpp>
  20. #include <boost/xpressive/detail/detail_fwd.hpp>
  21. #include BOOST_TYPEOF_INCREMENT_REGISTRATION_GROUP()
  22. BOOST_TYPEOF_REGISTER_TEMPLATE(boost::mpl::bool_, (bool))
  23. ///////////////////////////////////////////////////////////////////////////////
  24. // Misc.
  25. //
  26. BOOST_TYPEOF_REGISTER_TYPE(boost::xpressive::detail::set_initializer)
  27. BOOST_TYPEOF_REGISTER_TYPE(boost::xpressive::detail::keeper_tag)
  28. BOOST_TYPEOF_REGISTER_TYPE(boost::xpressive::detail::modifier_tag)
  29. BOOST_TYPEOF_REGISTER_TYPE(boost::xpressive::detail::lookahead_tag)
  30. BOOST_TYPEOF_REGISTER_TYPE(boost::xpressive::detail::lookbehind_tag)
  31. BOOST_TYPEOF_REGISTER_TYPE(boost::xpressive::detail::check_tag)
  32. BOOST_TYPEOF_REGISTER_TYPE(boost::xpressive::detail::mark_tag)
  33. BOOST_TYPEOF_REGISTER_TYPE(boost::xpressive::detail::word_begin)
  34. BOOST_TYPEOF_REGISTER_TYPE(boost::xpressive::detail::word_end)
  35. BOOST_TYPEOF_REGISTER_TEMPLATE(boost::xpressive::detail::generic_quant_tag, (unsigned int)(unsigned int))
  36. BOOST_TYPEOF_REGISTER_TEMPLATE(boost::xpressive::basic_regex, (typename))
  37. BOOST_TYPEOF_REGISTER_TEMPLATE(boost::xpressive::detail::word_boundary, (typename))
  38. BOOST_TYPEOF_REGISTER_TEMPLATE(boost::xpressive::value, (typename))
  39. BOOST_TYPEOF_REGISTER_TEMPLATE(boost::xpressive::reference, (typename))
  40. BOOST_TYPEOF_REGISTER_TEMPLATE(boost::xpressive::local, (typename))
  41. BOOST_TYPEOF_REGISTER_TEMPLATE(boost::xpressive::placeholder, (typename)(int)(typename))
  42. BOOST_TYPEOF_REGISTER_TEMPLATE(boost::xpressive::detail::tracking_ptr, (typename))
  43. BOOST_TYPEOF_REGISTER_TEMPLATE(boost::xpressive::detail::regex_impl, (typename))
  44. BOOST_TYPEOF_REGISTER_TEMPLATE(boost::xpressive::detail::let_, (typename))
  45. BOOST_TYPEOF_REGISTER_TEMPLATE(boost::xpressive::detail::action_arg, (typename)(typename))
  46. BOOST_TYPEOF_REGISTER_TEMPLATE(boost::xpressive::detail::named_mark, (typename))
  47. BOOST_TYPEOF_REGISTER_TEMPLATE(boost::xpressive::sub_match, (typename))
  48. BOOST_TYPEOF_REGISTER_TEMPLATE(boost::xpressive::detail::nested_results, (typename))
  49. ///////////////////////////////////////////////////////////////////////////////
  50. // Placeholders
  51. //
  52. BOOST_TYPEOF_REGISTER_TYPE(boost::xpressive::detail::mark_placeholder)
  53. BOOST_TYPEOF_REGISTER_TYPE(boost::xpressive::detail::posix_charset_placeholder)
  54. BOOST_TYPEOF_REGISTER_TYPE(boost::xpressive::detail::assert_bol_placeholder)
  55. BOOST_TYPEOF_REGISTER_TYPE(boost::xpressive::detail::assert_eol_placeholder)
  56. BOOST_TYPEOF_REGISTER_TYPE(boost::xpressive::detail::logical_newline_placeholder)
  57. BOOST_TYPEOF_REGISTER_TYPE(boost::xpressive::detail::self_placeholder)
  58. BOOST_TYPEOF_REGISTER_TEMPLATE(boost::xpressive::detail::assert_word_placeholder, (typename))
  59. BOOST_TYPEOF_REGISTER_TEMPLATE(boost::xpressive::detail::range_placeholder, (typename))
  60. BOOST_TYPEOF_REGISTER_TEMPLATE(boost::xpressive::detail::attribute_placeholder, (typename))
  61. ///////////////////////////////////////////////////////////////////////////////
  62. // Matchers
  63. //
  64. BOOST_TYPEOF_REGISTER_TYPE(boost::xpressive::detail::epsilon_matcher)
  65. BOOST_TYPEOF_REGISTER_TYPE(boost::xpressive::detail::true_matcher)
  66. BOOST_TYPEOF_REGISTER_TYPE(boost::xpressive::detail::end_matcher)
  67. BOOST_TYPEOF_REGISTER_TYPE(boost::xpressive::detail::independent_end_matcher)
  68. BOOST_TYPEOF_REGISTER_TYPE(boost::xpressive::detail::any_matcher)
  69. BOOST_TYPEOF_REGISTER_TYPE(boost::xpressive::detail::assert_bos_matcher)
  70. BOOST_TYPEOF_REGISTER_TYPE(boost::xpressive::detail::assert_eos_matcher)
  71. BOOST_TYPEOF_REGISTER_TYPE(boost::xpressive::detail::mark_begin_matcher)
  72. BOOST_TYPEOF_REGISTER_TYPE(boost::xpressive::detail::mark_end_matcher)
  73. BOOST_TYPEOF_REGISTER_TYPE(boost::xpressive::detail::repeat_begin_matcher)
  74. BOOST_TYPEOF_REGISTER_TYPE(boost::xpressive::detail::alternate_end_matcher)
  75. BOOST_TYPEOF_REGISTER_TYPE(boost::xpressive::detail::attr_end_matcher)
  76. BOOST_TYPEOF_REGISTER_TEMPLATE(boost::xpressive::detail::assert_bol_matcher, (typename))
  77. BOOST_TYPEOF_REGISTER_TEMPLATE(boost::xpressive::detail::assert_eol_matcher, (typename))
  78. BOOST_TYPEOF_REGISTER_TEMPLATE(boost::xpressive::detail::literal_matcher, (typename)(typename)(typename))
  79. BOOST_TYPEOF_REGISTER_TEMPLATE(boost::xpressive::detail::string_matcher, (typename)(typename))
  80. BOOST_TYPEOF_REGISTER_TEMPLATE(boost::xpressive::detail::charset_matcher, (typename)(typename)(typename))
  81. BOOST_TYPEOF_REGISTER_TEMPLATE(boost::xpressive::detail::logical_newline_matcher, (typename))
  82. BOOST_TYPEOF_REGISTER_TEMPLATE(boost::xpressive::detail::mark_matcher, (typename)(typename))
  83. BOOST_TYPEOF_REGISTER_TEMPLATE(boost::xpressive::detail::repeat_end_matcher, (typename))
  84. BOOST_TYPEOF_REGISTER_TEMPLATE(boost::xpressive::detail::alternate_matcher, (typename)(typename))
  85. BOOST_TYPEOF_REGISTER_TEMPLATE(boost::xpressive::detail::optional_matcher, (typename)(typename))
  86. BOOST_TYPEOF_REGISTER_TEMPLATE(boost::xpressive::detail::optional_mark_matcher, (typename)(typename))
  87. BOOST_TYPEOF_REGISTER_TEMPLATE(boost::xpressive::detail::simple_repeat_matcher, (typename)(typename))
  88. BOOST_TYPEOF_REGISTER_TEMPLATE(boost::xpressive::detail::regex_byref_matcher, (typename))
  89. BOOST_TYPEOF_REGISTER_TEMPLATE(boost::xpressive::detail::regex_matcher, (typename))
  90. BOOST_TYPEOF_REGISTER_TEMPLATE(boost::xpressive::detail::posix_charset_matcher, (typename))
  91. BOOST_TYPEOF_REGISTER_TEMPLATE(boost::xpressive::detail::assert_word_matcher, (typename)(typename))
  92. BOOST_TYPEOF_REGISTER_TEMPLATE(boost::xpressive::detail::range_matcher, (typename)(typename))
  93. BOOST_TYPEOF_REGISTER_TEMPLATE(boost::xpressive::detail::keeper_matcher, (typename))
  94. BOOST_TYPEOF_REGISTER_TEMPLATE(boost::xpressive::detail::lookahead_matcher, (typename))
  95. BOOST_TYPEOF_REGISTER_TEMPLATE(boost::xpressive::detail::lookbehind_matcher, (typename))
  96. BOOST_TYPEOF_REGISTER_TEMPLATE(boost::xpressive::detail::set_matcher, (typename)(typename))
  97. BOOST_TYPEOF_REGISTER_TEMPLATE(boost::xpressive::detail::predicate_matcher, (typename))
  98. BOOST_TYPEOF_REGISTER_TEMPLATE(boost::xpressive::detail::action_matcher, (typename))
  99. BOOST_TYPEOF_REGISTER_TEMPLATE(boost::xpressive::detail::attr_matcher, (typename)(typename)(typename))
  100. BOOST_TYPEOF_REGISTER_TEMPLATE(boost::xpressive::detail::attr_begin_matcher, (typename))
  101. ///////////////////////////////////////////////////////////////////////////////
  102. // Ops
  103. //
  104. BOOST_TYPEOF_REGISTER_TYPE(boost::xpressive::op::push)
  105. BOOST_TYPEOF_REGISTER_TYPE(boost::xpressive::op::push_back)
  106. BOOST_TYPEOF_REGISTER_TYPE(boost::xpressive::op::pop)
  107. BOOST_TYPEOF_REGISTER_TYPE(boost::xpressive::op::push_front)
  108. BOOST_TYPEOF_REGISTER_TYPE(boost::xpressive::op::pop_back)
  109. BOOST_TYPEOF_REGISTER_TYPE(boost::xpressive::op::pop_front)
  110. BOOST_TYPEOF_REGISTER_TYPE(boost::xpressive::op::back)
  111. BOOST_TYPEOF_REGISTER_TYPE(boost::xpressive::op::front)
  112. BOOST_TYPEOF_REGISTER_TYPE(boost::xpressive::op::top)
  113. BOOST_TYPEOF_REGISTER_TYPE(boost::xpressive::op::first)
  114. BOOST_TYPEOF_REGISTER_TYPE(boost::xpressive::op::second)
  115. BOOST_TYPEOF_REGISTER_TYPE(boost::xpressive::op::matched)
  116. BOOST_TYPEOF_REGISTER_TYPE(boost::xpressive::op::length)
  117. BOOST_TYPEOF_REGISTER_TYPE(boost::xpressive::op::str)
  118. BOOST_TYPEOF_REGISTER_TYPE(boost::xpressive::op::insert)
  119. BOOST_TYPEOF_REGISTER_TYPE(boost::xpressive::op::make_pair)
  120. BOOST_TYPEOF_REGISTER_TEMPLATE(boost::xpressive::op::as, (typename))
  121. BOOST_TYPEOF_REGISTER_TEMPLATE(boost::xpressive::op::static_cast_, (typename))
  122. BOOST_TYPEOF_REGISTER_TEMPLATE(boost::xpressive::op::dynamic_cast_, (typename))
  123. BOOST_TYPEOF_REGISTER_TEMPLATE(boost::xpressive::op::const_cast_, (typename))
  124. BOOST_TYPEOF_REGISTER_TEMPLATE(boost::xpressive::op::construct, (typename))
  125. BOOST_TYPEOF_REGISTER_TEMPLATE(boost::xpressive::op::throw_, (typename))
  126. ///////////////////////////////////////////////////////////////////////////////
  127. // Modifiers
  128. //
  129. BOOST_TYPEOF_REGISTER_TYPE(boost::xpressive::detail::icase_modifier)
  130. BOOST_TYPEOF_REGISTER_TEMPLATE(boost::xpressive::detail::locale_modifier, (typename))
  131. ///////////////////////////////////////////////////////////////////////////////
  132. // Traits
  133. //
  134. BOOST_TYPEOF_REGISTER_TEMPLATE(boost::xpressive::null_regex_traits, (typename))
  135. BOOST_TYPEOF_REGISTER_TEMPLATE(boost::xpressive::cpp_regex_traits, (typename))
  136. BOOST_TYPEOF_REGISTER_TEMPLATE(boost::xpressive::c_regex_traits, (typename))
  137. BOOST_TYPEOF_REGISTER_TEMPLATE(boost::xpressive::regex_traits, (typename)(typename))
  138. #endif