sl@0: /////////////////////////////////////////////////////////////////////////////// sl@0: /// \file xpressive_fwd.hpp sl@0: /// Forward declarations for all of xpressive's public data types. sl@0: // sl@0: // Copyright 2004 Eric Niebler. Distributed under the Boost sl@0: // Software License, Version 1.0. (See accompanying file sl@0: // LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) sl@0: sl@0: #ifndef BOOST_XPRESSIVE_XPRESSIVE_FWD_HPP_EAN_10_04_2005 sl@0: #define BOOST_XPRESSIVE_XPRESSIVE_FWD_HPP_EAN_10_04_2005 sl@0: sl@0: // MS compatible compilers support #pragma once sl@0: #if defined(_MSC_VER) && (_MSC_VER >= 1020) sl@0: # pragma once sl@0: #endif sl@0: sl@0: #include <string> sl@0: #include <boost/config.hpp> sl@0: #include <boost/iterator/iterator_traits.hpp> sl@0: sl@0: #ifdef BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION sl@0: # error Sorry, xpressive requires a compiler that supports partial template specialization. sl@0: #endif sl@0: sl@0: #if defined(BOOST_NO_STD_LOCALE) & !defined(BOOST_XPRESSIVE_USE_C_TRAITS) sl@0: # define BOOST_XPRESSIVE_USE_C_TRAITS sl@0: #endif sl@0: sl@0: #if defined(BOOST_NO_CWCHAR) | defined(BOOST_NO_CWCTYPE) | defined(BOOST_NO_STD_WSTRING) sl@0: # ifndef BOOST_XPRESSIVE_NO_WREGEX sl@0: # define BOOST_XPRESSIVE_NO_WREGEX sl@0: # endif sl@0: #endif sl@0: sl@0: #include <boost/xpressive/proto/proto_fwd.hpp> sl@0: sl@0: namespace boost { namespace xpressive sl@0: { sl@0: template<typename Char, typename Impl> sl@0: struct regex_traits; sl@0: sl@0: template<typename Char> sl@0: struct cpp_regex_traits; sl@0: sl@0: template<typename Char> sl@0: struct c_regex_traits; sl@0: sl@0: template<typename Elem> sl@0: struct null_regex_traits; sl@0: sl@0: namespace detail sl@0: { sl@0: template<typename Char> sl@0: struct default_regex_traits sl@0: { sl@0: #ifdef BOOST_XPRESSIVE_USE_C_TRAITS sl@0: typedef c_regex_traits<Char> type; sl@0: #else sl@0: typedef cpp_regex_traits<Char> type; sl@0: #endif sl@0: }; sl@0: sl@0: struct mark_placeholder; sl@0: sl@0: typedef proto::unary_op<detail::mark_placeholder, proto::noop_tag> mark_tag; sl@0: sl@0: } // namespace detail sl@0: sl@0: using detail::mark_tag; sl@0: sl@0: typedef void const *regex_id_type; sl@0: sl@0: struct regex_error; sl@0: sl@0: struct regex_traits_version_1_tag; sl@0: sl@0: struct regex_traits_version_1_case_fold_tag; sl@0: sl@0: template<typename BidiIter> sl@0: struct basic_regex; sl@0: sl@0: template<typename BidiIter> sl@0: struct match_results; sl@0: sl@0: template<typename BidiIter> sl@0: struct regex_iterator; sl@0: sl@0: template<typename BidiIter> sl@0: struct regex_token_iterator; sl@0: sl@0: template<typename BidiIter> sl@0: struct regex_id_filter_predicate; sl@0: sl@0: template<typename BidiIter> sl@0: struct sub_match; sl@0: sl@0: template<typename Action, typename Saved = Action> sl@0: struct action; sl@0: sl@0: template<typename RegexTraits> sl@0: struct compiler_traits; sl@0: sl@0: template<typename Char, typename Impl = typename detail::default_regex_traits<Char>::type> sl@0: struct regex_traits; sl@0: sl@0: template sl@0: < sl@0: typename BidiIter sl@0: , typename RegexTraits = regex_traits<typename iterator_value<BidiIter>::type> sl@0: , typename CompilerTraits = compiler_traits<RegexTraits> sl@0: > sl@0: struct regex_compiler; sl@0: sl@0: /////////////////////////////////////////////////////////////////////////////// sl@0: // Common typedefs sl@0: // sl@0: typedef basic_regex<std::string::const_iterator> sregex; sl@0: typedef basic_regex<char const *> cregex; sl@0: sl@0: #ifndef BOOST_XPRESSIVE_NO_WREGEX sl@0: typedef basic_regex<std::wstring::const_iterator> wsregex; sl@0: typedef basic_regex<wchar_t const *> wcregex; sl@0: #endif sl@0: sl@0: typedef regex_compiler<std::string::const_iterator> sregex_compiler; sl@0: typedef regex_compiler<char const *> cregex_compiler; sl@0: sl@0: #ifndef BOOST_XPRESSIVE_NO_WREGEX sl@0: typedef regex_compiler<std::wstring::const_iterator> wsregex_compiler; sl@0: typedef regex_compiler<wchar_t const *> wcregex_compiler; sl@0: #endif sl@0: sl@0: typedef regex_iterator<std::string::const_iterator> sregex_iterator; sl@0: typedef regex_iterator<char const *> cregex_iterator; sl@0: sl@0: #ifndef BOOST_XPRESSIVE_NO_WREGEX sl@0: typedef regex_iterator<std::wstring::const_iterator> wsregex_iterator; sl@0: typedef regex_iterator<wchar_t const *> wcregex_iterator; sl@0: #endif sl@0: sl@0: typedef regex_token_iterator<std::string::const_iterator> sregex_token_iterator; sl@0: typedef regex_token_iterator<char const *> cregex_token_iterator; sl@0: sl@0: #ifndef BOOST_XPRESSIVE_NO_WREGEX sl@0: typedef regex_token_iterator<std::wstring::const_iterator> wsregex_token_iterator; sl@0: typedef regex_token_iterator<wchar_t const *> wcregex_token_iterator; sl@0: #endif sl@0: sl@0: typedef match_results<std::string::const_iterator> smatch; sl@0: typedef match_results<char const *> cmatch; sl@0: sl@0: #ifndef BOOST_XPRESSIVE_NO_WREGEX sl@0: typedef match_results<std::wstring::const_iterator> wsmatch; sl@0: typedef match_results<wchar_t const *> wcmatch; sl@0: #endif sl@0: sl@0: typedef regex_id_filter_predicate<std::string::const_iterator> sregex_id_filter_predicate; sl@0: typedef regex_id_filter_predicate<char const *> cregex_id_filter_predicate; sl@0: sl@0: #ifndef BOOST_XPRESSIVE_NO_WREGEX sl@0: typedef regex_id_filter_predicate<std::wstring::const_iterator> wsregex_id_filter_predicate; sl@0: typedef regex_id_filter_predicate<wchar_t const *> wcregex_id_filter_predicate; sl@0: #endif sl@0: sl@0: }} // namespace boost::xpressive sl@0: sl@0: #endif