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