PageRenderTime 26ms CodeModel.GetById 18ms app.highlight 6ms RepoModel.GetById 1ms app.codeStats 0ms

/Src/Dependencies/Boost/boost/xpressive/detail/static/modifier.hpp

http://hadesmem.googlecode.com/
C++ Header | 66 lines | 45 code | 12 blank | 9 comment | 2 complexity | c0c527cefa927bcecdc4917bfa1780e3 MD5 | raw file
 1///////////////////////////////////////////////////////////////////////////////
 2// modifier.hpp
 3//
 4//  Copyright 2008 Eric Niebler. Distributed under the Boost
 5//  Software License, Version 1.0. (See accompanying file
 6//  LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
 7
 8#ifndef BOOST_XPRESSIVE_DETAIL_STATIC_MODIFIER_HPP_EAN_10_04_2005
 9#define BOOST_XPRESSIVE_DETAIL_STATIC_MODIFIER_HPP_EAN_10_04_2005
10
11// MS compatible compilers support #pragma once
12#if defined(_MSC_VER) && (_MSC_VER >= 1020)
13# pragma once
14# pragma warning(push)
15# pragma warning(disable : 4510) // default constructor could not be generated
16# pragma warning(disable : 4610) // user defined constructor required
17#endif
18
19#include <boost/xpressive/detail/detail_fwd.hpp>
20#include <boost/proto/traits.hpp>
21#include <boost/xpressive/regex_constants.hpp>
22
23namespace boost { namespace xpressive { namespace detail
24{
25
26    ///////////////////////////////////////////////////////////////////////////////
27    // modifier
28    template<typename Modifier>
29    struct modifier_op
30    {
31        typedef regex_constants::syntax_option_type opt_type;
32
33        template<typename Expr>
34        struct apply
35        {
36            typedef typename proto::binary_expr<
37                modifier_tag
38              , typename proto::terminal<Modifier>::type
39              , typename proto::result_of::as_child<Expr const>::type
40            >::type type;
41        };
42
43        template<typename Expr>
44        typename apply<Expr>::type const
45        operator ()(Expr const &expr) const
46        {
47            typename apply<Expr>::type that = {{this->mod_}, proto::as_child(expr)};
48            return that;
49        }
50
51        operator opt_type() const
52        {
53            return this->opt_;
54        }
55
56        Modifier mod_;
57        opt_type opt_;
58    };
59
60}}}
61
62#if defined(_MSC_VER) && (_MSC_VER >= 1020)
63# pragma warning(pop)
64#endif
65
66#endif