/////////////////////////////////////////////////////////////////////////////// // detail_fwd.hpp // // Copyright 2008 Eric Niebler. Distributed under the Boost // Software License, Version 1.0. (See accompanying file // LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) #ifndef BOOST_XPRESSIVE_DETAIL_DETAIL_FWD_HPP_EAN_10_04_2005 #define BOOST_XPRESSIVE_DETAIL_DETAIL_FWD_HPP_EAN_10_04_2005 // MS compatible compilers support #pragma once #if defined(_MSC_VER) && (_MSC_VER >= 1020) # pragma once #endif #include #include #include #include // for INT_MAX #include #include #include #include #include namespace boost { namespace xpressive { namespace detail { typedef unsigned int uint_t; template struct generic_quant_tag; struct modifier_tag; struct check_tag; typedef mpl::size_t unknown_width; struct type_info_less; typedef std::map action_args_type; struct action_context; template struct replacement_context; /////////////////////////////////////////////////////////////////////////////// // placeholders // struct mark_placeholder; struct posix_charset_placeholder; template struct assert_word_placeholder; template struct range_placeholder; struct assert_bol_placeholder; struct assert_eol_placeholder; struct logical_newline_placeholder; struct self_placeholder; template struct attribute_placeholder; /////////////////////////////////////////////////////////////////////////////// // matchers // struct end_matcher; struct independent_end_matcher; struct assert_bos_matcher; struct assert_eos_matcher; template struct assert_bol_matcher; template struct assert_eol_matcher; template struct assert_word_matcher; struct true_matcher; template struct alternate_matcher; struct alternate_end_matcher; template struct posix_charset_matcher; template struct sequence; template struct mark_matcher; struct mark_begin_matcher; struct mark_end_matcher; template struct regex_matcher; template struct regex_byref_matcher; template struct compound_charset; template > struct charset_matcher; template struct range_matcher; template struct set_matcher; template struct simple_repeat_matcher; struct repeat_begin_matcher; template struct repeat_end_matcher; template struct literal_matcher; template struct string_matcher; template struct action_matcher; template struct predicate_matcher; template struct optional_matcher; template struct optional_mark_matcher; template struct attr_matcher; template struct attr_begin_matcher; struct attr_end_matcher; template struct is_modifiable; template struct alternates_list; template struct modifier_op; struct icase_modifier; template struct xpression_visitor; template struct regex_impl; struct epsilon_matcher; template struct nested_results; template struct regex_id_filter_predicate; template struct keeper_matcher; template struct lookahead_matcher; template struct lookbehind_matcher; template struct word_boundary; template sequence make_dynamic(Matcher const &matcher); template struct xpression_linker; template struct xpression_peeker; struct any_matcher; template struct logical_newline_matcher; typedef proto::terminal::type logical_newline_xpression; struct set_initializer; typedef proto::terminal::type set_initializer_type; struct lookahead_tag; struct lookbehind_tag; struct keeper_tag; template struct locale_modifier; template struct matcher_wrapper; template struct regex_traits_type; template struct let_; template void bind_args(let_ const &, match_results &); /////////////////////////////////////////////////////////////////////////////// // Misc. struct no_next; template struct core_access; template struct match_state; template struct matchable; template struct matchable_ex; template struct dynamic_xpression; template struct shared_matchable; template struct alternates_vector; template struct static_xpression; typedef static_xpression end_xpression; typedef static_xpression alternate_end_xpression; typedef static_xpression independent_end_xpression; typedef static_xpression true_xpression; template struct static_xpression; template struct stacked_xpression; template struct is_static_xpression; template struct sub_match_impl; template struct results_cache; template struct sequence_stack; template struct results_extras; template struct match_context; template struct sub_match_vector; template struct action_arg; struct actionable; template struct traits; template Traits const &traits_cast(match_state const &state); template struct basic_chset; template struct named_mark; template struct memento; template void set_char(compound_charset &chset, Char ch, Traits const &traits, bool icase); template void set_range(compound_charset &chset, Char from, Char to, Traits const &traits, bool icase); template void set_class(compound_charset &chset, typename Traits::char_class_type char_class, bool no, Traits const &traits); template void set_char(basic_chset &chset, Char ch, Traits const &traits, bool icase); template void set_range(basic_chset &chset, Char from, Char to, Traits const &traits, bool icase); template void set_class(basic_chset &chset, typename Traits::char_class_type char_class, bool no, Traits const &traits); template static_xpression const make_static(Matcher const &matcher); template static_xpression const make_static(Matcher const &matcher, Next const &next); int get_mark_number(basic_mark_tag const &); template void static_compile(Xpr const &xpr, shared_ptr > const &impl); struct quant_spec; template void make_simple_repeat(quant_spec const &spec, sequence &seq, Xpr const &xpr); template void make_simple_repeat(quant_spec const &spec, sequence &seq); template void make_repeat(quant_spec const &spec, sequence &seq, int mark_nbr); template void make_repeat(quant_spec const &spec, sequence &seq); template void make_optional(quant_spec const &spec, sequence &seq); template void make_optional(quant_spec const &spec, sequence &seq, int mark_nbr); template struct string_type { typedef std::vector type; }; template<> struct string_type { typedef std::string type; }; #ifndef BOOST_XPRESSIVE_NO_WREGEX template<> struct string_type { typedef std::wstring type; }; #endif }}} // namespace boost::xpressive::detail namespace boost { namespace xpressive { namespace grammar_detail { using proto::_; using proto::or_; using proto::if_; using proto::call; using proto::when; using proto::otherwise; using proto::switch_; using proto::make; using proto::_arg; using proto::_left; using proto::_right; using proto::not_; using proto::_state; using proto::_visitor; using proto::callable; using proto::fold; using proto::reverse_fold; using proto::fold_tree; using proto::reverse_fold_tree; using proto::terminal; using proto::shift_right; using proto::bitwise_or; using proto::logical_not; using proto::dereference; using proto::posit; using proto::negate; using proto::complement; using proto::comma; using proto::assign; using proto::subscript; using proto::nary_expr; using proto::unary_expr; using proto::binary_expr; using proto::_deep_copy; using proto::vararg; namespace tag = proto::tag; }}} namespace boost { namespace xpressive { namespace op { struct push; struct push_back; struct pop; struct push_front; struct pop_back; struct pop_front; struct back; struct front; struct top; struct first; struct second; struct matched; struct length; struct str; struct insert; struct make_pair; template struct as; template struct static_cast_; template struct dynamic_cast_; template struct const_cast_; template struct construct; template struct throw_; }}} // namespace boost::xpressive::op /// INTERNAL ONLY namespace boost { namespace xpressive { /// INTERNAL ONLY template typename Traits::char_class_type lookup_classname(Traits const &traits, char const (&cname)[N], bool icase = false); }} // namespace boost::xpressive #endif