| /////////////////////////////////////////////////////////////////////////////// |
| // modifier.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_STATIC_MODIFIER_HPP_EAN_10_04_2005 |
| #define BOOST_XPRESSIVE_DETAIL_STATIC_MODIFIER_HPP_EAN_10_04_2005 |
| |
| // MS compatible compilers support #pragma once |
| #if defined(_MSC_VER) && (_MSC_VER >= 1020) |
| # pragma once |
| # pragma warning(push) |
| # pragma warning(disable : 4510) // default constructor could not be generated |
| # pragma warning(disable : 4610) // user defined constructor required |
| #endif |
| |
| #include <boost/xpressive/detail/detail_fwd.hpp> |
| #include <boost/proto/traits.hpp> |
| #include <boost/xpressive/regex_constants.hpp> |
| |
| namespace boost { namespace xpressive { namespace detail |
| { |
| |
| /////////////////////////////////////////////////////////////////////////////// |
| // modifier |
| template<typename Modifier> |
| struct modifier_op |
| { |
| typedef regex_constants::syntax_option_type opt_type; |
| |
| template<typename Expr> |
| struct apply |
| { |
| typedef typename proto::binary_expr< |
| modifier_tag |
| , typename proto::terminal<Modifier>::type |
| , typename proto::result_of::as_child<Expr const>::type |
| >::type type; |
| }; |
| |
| template<typename Expr> |
| typename apply<Expr>::type const |
| operator ()(Expr const &expr) const |
| { |
| typename apply<Expr>::type that = {{this->mod_}, proto::as_child(expr)}; |
| return that; |
| } |
| |
| operator opt_type() const |
| { |
| return this->opt_; |
| } |
| |
| Modifier mod_; |
| opt_type opt_; |
| }; |
| |
| }}} |
| |
| #if defined(_MSC_VER) && (_MSC_VER >= 1020) |
| # pragma warning(pop) |
| #endif |
| |
| #endif |