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