diff options
author | Kevin Smith <git@kismith.co.uk> | 2013-01-12 18:41:34 (GMT) |
---|---|---|
committer | Swift Review <review@swift.im> | 2013-01-13 10:36:26 (GMT) |
commit | f3bc816af1b0d61452de973963e453bf3b3f95a2 (patch) | |
tree | e895f8afa3580e6cff6f5ad2017d45bf147a17c2 /3rdParty/Boost/src/boost/proto/detail/make_expr_.hpp | |
parent | 188fc285c6555eadd3c9d50ab8a94adcade78d89 (diff) | |
download | swift-f3bc816af1b0d61452de973963e453bf3b3f95a2.zip swift-f3bc816af1b0d61452de973963e453bf3b3f95a2.tar.bz2 |
Adding in the spirit Boost stuff
Change-Id: I4f127ce61667243b64081b0aa309028d5077045f
Diffstat (limited to '3rdParty/Boost/src/boost/proto/detail/make_expr_.hpp')
-rw-r--r-- | 3rdParty/Boost/src/boost/proto/detail/make_expr_.hpp | 105 |
1 files changed, 105 insertions, 0 deletions
diff --git a/3rdParty/Boost/src/boost/proto/detail/make_expr_.hpp b/3rdParty/Boost/src/boost/proto/detail/make_expr_.hpp new file mode 100644 index 0000000..9e37649 --- /dev/null +++ b/3rdParty/Boost/src/boost/proto/detail/make_expr_.hpp @@ -0,0 +1,105 @@ +#if !defined(BOOST_PROTO_DONT_USE_PREPROCESSED_FILES) + + #include <boost/proto/detail/preprocessed/make_expr_.hpp> + +#elif !defined(BOOST_PP_IS_ITERATING) + + #if defined(__WAVE__) && defined(BOOST_PROTO_CREATE_PREPROCESSED_FILES) + #pragma wave option(preserve: 2, line: 0, output: "preprocessed/make_expr_.hpp") + #endif + + /////////////////////////////////////////////////////////////////////////////// + /// \file make_expr_.hpp + /// Contains definition of make_expr_\<\> class template. + // + // 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) + + #if defined(__WAVE__) && defined(BOOST_PROTO_CREATE_PREPROCESSED_FILES) + #pragma wave option(preserve: 1) + #endif + + template< + typename Tag + , typename Domain + BOOST_PP_ENUM_TRAILING_BINARY_PARAMS( + BOOST_PROTO_MAX_ARITY + , typename A + , = void BOOST_PP_INTERCEPT + ) + , typename _ = void + > + struct make_expr_ + {}; + + template<typename Domain, typename A> + struct make_expr_<tag::terminal, Domain, A + BOOST_PP_ENUM_TRAILING_PARAMS(BOOST_PROTO_MAX_ARITY, void BOOST_PP_INTERCEPT)> + { + typedef typename proto::detail::protoify<A, Domain>::result_type result_type; + + BOOST_FORCEINLINE + result_type operator()(typename add_reference<A>::type a) const + { + return proto::detail::protoify<A, Domain>()(a); + } + }; + + template<typename A> + struct make_expr_<tag::terminal, deduce_domain, A + BOOST_PP_ENUM_TRAILING_PARAMS(BOOST_PROTO_MAX_ARITY, void BOOST_PP_INTERCEPT)> + : make_expr_<tag::terminal, default_domain, A> + {}; + + #define BOOST_PP_ITERATION_PARAMS_1 \ + (3, (1, BOOST_PROTO_MAX_ARITY, <boost/proto/detail/make_expr_.hpp>)) + #include BOOST_PP_ITERATE() + + #if defined(__WAVE__) && defined(BOOST_PROTO_CREATE_PREPROCESSED_FILES) + #pragma wave option(output: null) + #endif + +#else // BOOST_PP_IS_ITERATING + + #define N BOOST_PP_ITERATION() + #define M BOOST_PP_SUB(BOOST_PROTO_MAX_ARITY, N) + + template<typename Tag, typename Domain BOOST_PP_ENUM_TRAILING_PARAMS(N, typename A)> + struct make_expr_<Tag, Domain BOOST_PP_ENUM_TRAILING_PARAMS(N, A) + BOOST_PP_ENUM_TRAILING_PARAMS(M, void BOOST_PP_INTERCEPT), void> + { + typedef + BOOST_PP_CAT(list, N)< + BOOST_PP_ENUM(N, BOOST_PROTO_AS_CHILD_TYPE, (A, ~, Domain)) + > + proto_args; + + typedef typename base_expr<Domain, Tag, proto_args>::type expr_type; + typedef typename Domain::proto_generator proto_generator; + typedef typename proto_generator::template result<proto_generator(expr_type)>::type result_type; + + BOOST_FORCEINLINE + result_type operator()(BOOST_PP_ENUM_BINARY_PARAMS(N, typename add_reference<A, >::type a)) const + { + expr_type const that = { + BOOST_PP_ENUM(N, BOOST_PROTO_AS_CHILD, (A, a, Domain)) + }; + return proto_generator()(that); + } + }; + + template<typename Tag BOOST_PP_ENUM_TRAILING_PARAMS(N, typename A)> + struct make_expr_<Tag, deduce_domain BOOST_PP_ENUM_TRAILING_PARAMS(N, A) + BOOST_PP_ENUM_TRAILING_PARAMS(M, void BOOST_PP_INTERCEPT), void> + : make_expr_< + Tag + , typename BOOST_PP_CAT(deduce_domain, N)<BOOST_PP_ENUM_PARAMS(N, A)>::type + BOOST_PP_ENUM_TRAILING_PARAMS(N, A) + > + {}; + + #undef N + #undef M + +#endif |