typeof.hpp 5.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150
  1. /*=============================================================================
  2. Copyright (c) 2006 Tobias Schwinger
  3. http://spirit.sourceforge.net/
  4. Distributed under the Boost Software License, Version 1.0. (See accompanying
  5. file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
  6. =============================================================================*/
  7. #if !defined(BOOST_SPIRIT_UTILITY_TYPEOF_HPP)
  8. #define BOOST_SPIRIT_UTILITY_TYPEOF_HPP
  9. #include <boost/typeof/typeof.hpp>
  10. #include <boost/spirit/home/classic/namespace.hpp>
  11. #include <boost/spirit/home/classic/core/typeof.hpp>
  12. #include <boost/spirit/home/classic/utility/escape_char_fwd.hpp>
  13. #include <boost/spirit/home/classic/utility/confix_fwd.hpp>
  14. #include <boost/spirit/home/classic/utility/lists_fwd.hpp>
  15. #include <boost/spirit/home/classic/utility/distinct_fwd.hpp>
  16. #include <boost/spirit/home/classic/utility/grammar_def_fwd.hpp>
  17. namespace boost { namespace spirit {
  18. BOOST_SPIRIT_CLASSIC_NAMESPACE_BEGIN
  19. // chset.hpp
  20. template<typename CharT> class chset;
  21. // functor_parser.hpp
  22. template<typename FunctorT> struct functor_parser;
  23. // loops.hpp
  24. template<class ParserT, typename ExactT> class fixed_loop;
  25. template<class ParserT, typename MinT, typename MaxT> class finite_loop;
  26. template<class ParserT, typename MinT> class infinite_loop;
  27. // regex.hpp
  28. template<typename CharT> struct rxstrlit;
  29. // flush_multi_pass.hpp
  30. class flush_multi_pass_parser;
  31. // scoped_lock.hpp
  32. template<class MutexT, class ParserT> struct scoped_lock_parser;
  33. BOOST_SPIRIT_CLASSIC_NAMESPACE_END
  34. }} // namespace BOOST_SPIRIT_CLASSIC_NS
  35. #include BOOST_TYPEOF_INCREMENT_REGISTRATION_GROUP()
  36. // chset.hpp
  37. BOOST_TYPEOF_REGISTER_TEMPLATE(BOOST_SPIRIT_CLASSIC_NS::chset,1)
  38. BOOST_TYPEOF_REGISTER_TYPE(BOOST_SPIRIT_CLASSIC_NS::chset<char>)
  39. BOOST_TYPEOF_REGISTER_TYPE(BOOST_SPIRIT_CLASSIC_NS::chset<wchar_t>)
  40. // escape_char.hpp (has forward header)
  41. BOOST_TYPEOF_REGISTER_TEMPLATE(BOOST_SPIRIT_CLASSIC_NS::escape_char_parser,(BOOST_TYPEOF_INTEGRAL(unsigned long))(typename))
  42. BOOST_TYPEOF_REGISTER_TEMPLATE(BOOST_SPIRIT_CLASSIC_NS::escape_char_action,(class)(typename)(BOOST_TYPEOF_INTEGRAL(unsigned long))(typename))
  43. BOOST_TYPEOF_REGISTER_TEMPLATE(BOOST_SPIRIT_CLASSIC_NS::escape_char_parser,(BOOST_TYPEOF_INTEGRAL(unsigned long)))
  44. BOOST_TYPEOF_REGISTER_TEMPLATE(BOOST_SPIRIT_CLASSIC_NS::escape_char_action,(class)(typename)(BOOST_TYPEOF_INTEGRAL(unsigned long)))
  45. // functor_parser.hpp
  46. BOOST_TYPEOF_REGISTER_TEMPLATE(BOOST_SPIRIT_CLASSIC_NS::functor_parser,1)
  47. // loops.hpp
  48. BOOST_TYPEOF_REGISTER_TEMPLATE(BOOST_SPIRIT_CLASSIC_NS::fixed_loop,2)
  49. BOOST_TYPEOF_REGISTER_TEMPLATE(BOOST_SPIRIT_CLASSIC_NS::finite_loop,3)
  50. BOOST_TYPEOF_REGISTER_TEMPLATE(BOOST_SPIRIT_CLASSIC_NS::infinite_loop,2)
  51. // regex.hpp
  52. BOOST_TYPEOF_REGISTER_TEMPLATE(BOOST_SPIRIT_CLASSIC_NS::rxstrlit,1)
  53. BOOST_TYPEOF_REGISTER_TYPE(BOOST_SPIRIT_CLASSIC_NS::rxstrlit<char>)
  54. BOOST_TYPEOF_REGISTER_TYPE(BOOST_SPIRIT_CLASSIC_NS::rxstrlit<wchar_t>)
  55. // confix.hpp (has forward header)
  56. BOOST_TYPEOF_REGISTER_TEMPLATE(BOOST_SPIRIT_CLASSIC_NS::confix_parser, 6)
  57. BOOST_TYPEOF_REGISTER_TEMPLATE(BOOST_SPIRIT_CLASSIC_NS::confix_parser, 5)
  58. BOOST_TYPEOF_REGISTER_TEMPLATE(BOOST_SPIRIT_CLASSIC_NS::confix_parser, 4)
  59. BOOST_TYPEOF_REGISTER_TEMPLATE(BOOST_SPIRIT_CLASSIC_NS::confix_parser, 3)
  60. BOOST_TYPEOF_REGISTER_TEMPLATE(BOOST_SPIRIT_CLASSIC_NS::comment_nest_parser, 2)
  61. BOOST_TYPEOF_REGISTER_TYPE(BOOST_SPIRIT_CLASSIC_NS::is_nested)
  62. BOOST_TYPEOF_REGISTER_TYPE(BOOST_SPIRIT_CLASSIC_NS::non_nested)
  63. BOOST_TYPEOF_REGISTER_TYPE(BOOST_SPIRIT_CLASSIC_NS::is_lexeme)
  64. BOOST_TYPEOF_REGISTER_TYPE(BOOST_SPIRIT_CLASSIC_NS::non_lexeme)
  65. // lists.hpp (has forward header)
  66. BOOST_TYPEOF_REGISTER_TEMPLATE(BOOST_SPIRIT_CLASSIC_NS::list_parser,4)
  67. BOOST_TYPEOF_REGISTER_TEMPLATE(BOOST_SPIRIT_CLASSIC_NS::list_parser,3)
  68. BOOST_TYPEOF_REGISTER_TEMPLATE(BOOST_SPIRIT_CLASSIC_NS::list_parser,2)
  69. BOOST_TYPEOF_REGISTER_TYPE(BOOST_SPIRIT_CLASSIC_NS::no_list_endtoken)
  70. // distinct.hpp (has forward header)
  71. BOOST_TYPEOF_REGISTER_TEMPLATE(BOOST_SPIRIT_CLASSIC_NS::distinct_parser,2)
  72. BOOST_TYPEOF_REGISTER_TEMPLATE(BOOST_SPIRIT_CLASSIC_NS::distinct_parser,1)
  73. BOOST_TYPEOF_REGISTER_TEMPLATE(BOOST_SPIRIT_CLASSIC_NS::dynamic_distinct_parser,1)
  74. BOOST_TYPEOF_REGISTER_TYPE(BOOST_SPIRIT_CLASSIC_NS::distinct_parser<>)
  75. // flush_multi_pass.hpp
  76. BOOST_TYPEOF_REGISTER_TYPE(BOOST_SPIRIT_CLASSIC_NS::flush_multi_pass_parser)
  77. // scoped_lock.hpp
  78. BOOST_TYPEOF_REGISTER_TEMPLATE(BOOST_SPIRIT_CLASSIC_NS::scoped_lock_parser,2)
  79. // grammar_gen.hpp (has forward header)
  80. BOOST_TYPEOF_REGISTER_TEMPLATE(BOOST_SPIRIT_CLASSIC_NS::grammar_def,BOOST_SPIRIT_GRAMMAR_STARTRULE_TYPE_LIMIT)
  81. #if BOOST_SPIRIT_GRAMMAR_STARTRULE_TYPE_LIMIT > 12
  82. BOOST_TYPEOF_REGISTER_TEMPLATE(BOOST_SPIRIT_CLASSIC_NS::grammar_def,12)
  83. #endif
  84. #if BOOST_SPIRIT_GRAMMAR_STARTRULE_TYPE_LIMIT > 9
  85. BOOST_TYPEOF_REGISTER_TEMPLATE(BOOST_SPIRIT_CLASSIC_NS::grammar_def, 9)
  86. #endif
  87. #if BOOST_SPIRIT_GRAMMAR_STARTRULE_TYPE_LIMIT > 6
  88. BOOST_TYPEOF_REGISTER_TEMPLATE(BOOST_SPIRIT_CLASSIC_NS::grammar_def, 6)
  89. #endif
  90. #if BOOST_SPIRIT_GRAMMAR_STARTRULE_TYPE_LIMIT > 3
  91. BOOST_TYPEOF_REGISTER_TEMPLATE(BOOST_SPIRIT_CLASSIC_NS::grammar_def, 3)
  92. #endif
  93. #endif