You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and dots ('.'), can be up to 35 characters long. Letters must be lowercase.
66 lines
1.9 KiB
66 lines
1.9 KiB
/////////////////////////////////////////////////////////////////////////////// |
|
// 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
|
|
|