1 /////////////////////////////////////////////////////////////////////////////// 2 /// \file xpressive_fwd.hpp 3 /// Forward declarations for all of xpressive's public data types. 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_FWD_HPP_EAN_10_04_2005 10 #define BOOST_XPRESSIVE_XPRESSIVE_FWD_HPP_EAN_10_04_2005 11 12 // MS compatible compilers support #pragma once 13 #if defined(_MSC_VER) 14 # pragma once 15 #endif 16 17 #include <string> 18 #include <boost/config.hpp> 19 #include <boost/version.hpp> 20 #include <boost/iterator/iterator_traits.hpp> 21 22 #if BOOST_VERSION >= 103500 23 # define BOOST_PROTO_FUSION_V2 24 #endif 25 26 27 #if defined(BOOST_NO_STD_LOCALE) & !defined(BOOST_XPRESSIVE_USE_C_TRAITS) 28 # define BOOST_XPRESSIVE_USE_C_TRAITS 29 #endif 30 31 #if defined(BOOST_NO_CWCHAR) || defined(BOOST_NO_CWCTYPE) || defined(BOOST_NO_STD_WSTRING) 32 # ifndef BOOST_XPRESSIVE_NO_WREGEX 33 # define BOOST_XPRESSIVE_NO_WREGEX 34 # endif 35 #endif 36 37 // Stack protection under MS Windows 38 // Config logic taken from boost/regex/config.hpp 39 #ifndef BOOST_XPRESSIVE_HAS_MS_STACK_GUARD 40 # if (defined(_WIN32) || defined(_WIN64) || defined(_WINCE)) \ 41 && !(defined(__GNUC__) || defined(__BORLANDC__) && defined(__clang__)) \ 42 && !(defined(BOOST_BORLANDC) && (BOOST_BORLANDC >= 0x600)) \ 43 && !(defined(__MWERKS__) && (__MWERKS__ <= 0x3003)) 44 # define BOOST_XPRESSIVE_HAS_MS_STACK_GUARD 1 45 # else 46 # define BOOST_XPRESSIVE_HAS_MS_STACK_GUARD 0 47 # endif 48 #endif 49 50 #include <boost/proto/proto_fwd.hpp> 51 52 namespace boost { namespace xpressive 53 { 54 55 template<typename Char> 56 struct cpp_regex_traits; 57 58 template<typename Char> 59 struct c_regex_traits; 60 61 template<typename Elem> 62 struct null_regex_traits; 63 64 namespace detail 65 { 66 template<typename Char> 67 struct default_regex_traits 68 { 69 #ifdef BOOST_XPRESSIVE_USE_C_TRAITS 70 typedef c_regex_traits<Char> type; 71 #else 72 typedef cpp_regex_traits<Char> type; 73 #endif 74 }; 75 76 struct mark_placeholder; 77 typedef proto::expr<proto::tag::terminal, proto::term<mark_placeholder>, 0> basic_mark_tag; 78 79 struct regex_domain; 80 81 } // namespace detail 82 83 struct mark_tag; 84 85 typedef void const *regex_id_type; 86 87 struct regex_error; 88 89 struct regex_traits_version_1_tag; 90 91 struct regex_traits_version_2_tag; 92 93 // DEPRECATED 94 /// INTERNAL ONLY 95 /// 96 struct regex_traits_version_1_case_fold_tag; 97 98 template<typename Trait> 99 struct has_fold_case; 100 101 template<typename BidiIter> 102 struct basic_regex; 103 104 template<typename BidiIter> 105 struct match_results; 106 107 template<typename BidiIter> 108 struct regex_iterator; 109 110 template<typename BidiIter> 111 struct regex_token_iterator; 112 113 template<typename BidiIter> 114 struct regex_id_filter_predicate; 115 116 template<typename BidiIter> 117 struct sub_match; 118 119 template<typename RegexTraits> 120 struct compiler_traits; 121 122 template<typename Char, typename Impl = typename detail::default_regex_traits<Char>::type> 123 struct regex_traits; 124 125 template 126 < 127 typename BidiIter 128 , typename RegexTraits = regex_traits<typename iterator_value<BidiIter>::type> 129 , typename CompilerTraits = compiler_traits<RegexTraits> 130 > 131 struct regex_compiler; 132 133 template<typename T> 134 struct value; 135 136 template<typename T> 137 struct reference; 138 139 template<typename T> 140 struct local; 141 142 template<typename T, int I = 0, typename Dummy = proto::is_proto_expr> 143 struct placeholder; 144 145 namespace op 146 { 147 struct at; 148 struct push; 149 struct push_back; 150 struct push_front; 151 struct pop; 152 struct pop_back; 153 struct pop_front; 154 struct front; 155 struct back; 156 struct top; 157 struct first; 158 struct second; 159 struct matched; 160 struct length; 161 struct str; 162 struct insert; 163 struct make_pair; 164 template<typename T> 165 struct as; 166 template<typename T> 167 struct static_cast_; 168 template<typename T> 169 struct dynamic_cast_; 170 template<typename T> 171 struct const_cast_; 172 template<typename T> 173 struct construct; 174 template<typename Except> 175 struct throw_; 176 struct unwrap_reference; 177 } 178 179 /////////////////////////////////////////////////////////////////////////////// 180 // Common typedefs 181 // 182 typedef basic_regex<std::string::const_iterator> sregex; 183 typedef basic_regex<char const *> cregex; 184 185 #ifndef BOOST_XPRESSIVE_NO_WREGEX 186 typedef basic_regex<std::wstring::const_iterator> wsregex; 187 typedef basic_regex<wchar_t const *> wcregex; 188 #endif 189 190 typedef sub_match<std::string::const_iterator> ssub_match; 191 typedef sub_match<char const *> csub_match; 192 193 #ifndef BOOST_XPRESSIVE_NO_WREGEX 194 typedef sub_match<std::wstring::const_iterator> wssub_match; 195 typedef sub_match<wchar_t const *> wcsub_match; 196 #endif 197 198 typedef regex_compiler<std::string::const_iterator> sregex_compiler; 199 typedef regex_compiler<char const *> cregex_compiler; 200 201 #ifndef BOOST_XPRESSIVE_NO_WREGEX 202 typedef regex_compiler<std::wstring::const_iterator> wsregex_compiler; 203 typedef regex_compiler<wchar_t const *> wcregex_compiler; 204 #endif 205 206 typedef regex_iterator<std::string::const_iterator> sregex_iterator; 207 typedef regex_iterator<char const *> cregex_iterator; 208 209 #ifndef BOOST_XPRESSIVE_NO_WREGEX 210 typedef regex_iterator<std::wstring::const_iterator> wsregex_iterator; 211 typedef regex_iterator<wchar_t const *> wcregex_iterator; 212 #endif 213 214 typedef regex_token_iterator<std::string::const_iterator> sregex_token_iterator; 215 typedef regex_token_iterator<char const *> cregex_token_iterator; 216 217 #ifndef BOOST_XPRESSIVE_NO_WREGEX 218 typedef regex_token_iterator<std::wstring::const_iterator> wsregex_token_iterator; 219 typedef regex_token_iterator<wchar_t const *> wcregex_token_iterator; 220 #endif 221 222 typedef match_results<std::string::const_iterator> smatch; 223 typedef match_results<char const *> cmatch; 224 225 #ifndef BOOST_XPRESSIVE_NO_WREGEX 226 typedef match_results<std::wstring::const_iterator> wsmatch; 227 typedef match_results<wchar_t const *> wcmatch; 228 #endif 229 230 typedef regex_id_filter_predicate<std::string::const_iterator> sregex_id_filter_predicate; 231 typedef regex_id_filter_predicate<char const *> cregex_id_filter_predicate; 232 233 #ifndef BOOST_XPRESSIVE_NO_WREGEX 234 typedef regex_id_filter_predicate<std::wstring::const_iterator> wsregex_id_filter_predicate; 235 typedef regex_id_filter_predicate<wchar_t const *> wcregex_id_filter_predicate; 236 #endif 237 238 }} // namespace boost::xpressive 239 240 #endif 241