diff options
Diffstat (limited to '3rdParty/Boost/src/boost/proto/detail/preprocessed/funop.hpp')
-rw-r--r-- | 3rdParty/Boost/src/boost/proto/detail/preprocessed/funop.hpp | 367 |
1 files changed, 367 insertions, 0 deletions
diff --git a/3rdParty/Boost/src/boost/proto/detail/preprocessed/funop.hpp b/3rdParty/Boost/src/boost/proto/detail/preprocessed/funop.hpp new file mode 100644 index 0000000..8eb8298 --- /dev/null +++ b/3rdParty/Boost/src/boost/proto/detail/preprocessed/funop.hpp @@ -0,0 +1,367 @@ + /////////////////////////////////////////////////////////////////////////////// + // funop.hpp + // Contains definition of funop[n]\<\> 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) + + + template<typename Expr, typename Domain > + struct funop0 + { + typedef typename proto::base_expr< + Domain + , tag::function + , list1< + Expr & + + > + >::type type; + BOOST_FORCEINLINE + static type const call( + Expr &e + + ) + { + type that = { + e + + }; + return that; + } + }; + + + template<typename Expr , typename This, typename Domain> + struct funop<Expr(), This, Domain> + : funop0< + typename detail::same_cv<Expr, This>::type + , Domain + + > + {}; + + + template<typename Expr, typename Domain , typename A0> + struct funop1 + { + typedef typename proto::base_expr< + Domain + , tag::function + , list2< + Expr & + , typename proto::result_of::as_child<A0, Domain>::type + > + >::type type; + BOOST_FORCEINLINE + static type const call( + Expr &e + , A0 &a0 + ) + { + type that = { + e + , proto::as_child<Domain>(a0) + }; + return that; + } + }; + + + template<typename Expr , typename A0, typename This, typename Domain> + struct funop<Expr(A0), This, Domain> + : funop1< + typename detail::same_cv<Expr, This>::type + , Domain + , typename remove_reference<A0 >::type + > + {}; + + + template<typename Expr, typename Domain , typename A0 , typename A1> + struct funop2 + { + typedef typename proto::base_expr< + Domain + , tag::function + , list3< + Expr & + , typename proto::result_of::as_child<A0, Domain>::type , typename proto::result_of::as_child<A1, Domain>::type + > + >::type type; + BOOST_FORCEINLINE + static type const call( + Expr &e + , A0 &a0 , A1 &a1 + ) + { + type that = { + e + , proto::as_child<Domain>(a0) , proto::as_child<Domain>(a1) + }; + return that; + } + }; + + + template<typename Expr , typename A0 , typename A1, typename This, typename Domain> + struct funop<Expr(A0 , A1), This, Domain> + : funop2< + typename detail::same_cv<Expr, This>::type + , Domain + , typename remove_reference<A0 >::type , typename remove_reference<A1 >::type + > + {}; + + + template<typename Expr, typename Domain , typename A0 , typename A1 , typename A2> + struct funop3 + { + typedef typename proto::base_expr< + Domain + , tag::function + , list4< + Expr & + , typename proto::result_of::as_child<A0, Domain>::type , typename proto::result_of::as_child<A1, Domain>::type , typename proto::result_of::as_child<A2, Domain>::type + > + >::type type; + BOOST_FORCEINLINE + static type const call( + Expr &e + , A0 &a0 , A1 &a1 , A2 &a2 + ) + { + type that = { + e + , proto::as_child<Domain>(a0) , proto::as_child<Domain>(a1) , proto::as_child<Domain>(a2) + }; + return that; + } + }; + + + template<typename Expr , typename A0 , typename A1 , typename A2, typename This, typename Domain> + struct funop<Expr(A0 , A1 , A2), This, Domain> + : funop3< + typename detail::same_cv<Expr, This>::type + , Domain + , typename remove_reference<A0 >::type , typename remove_reference<A1 >::type , typename remove_reference<A2 >::type + > + {}; + + + template<typename Expr, typename Domain , typename A0 , typename A1 , typename A2 , typename A3> + struct funop4 + { + typedef typename proto::base_expr< + Domain + , tag::function + , list5< + Expr & + , typename proto::result_of::as_child<A0, Domain>::type , typename proto::result_of::as_child<A1, Domain>::type , typename proto::result_of::as_child<A2, Domain>::type , typename proto::result_of::as_child<A3, Domain>::type + > + >::type type; + BOOST_FORCEINLINE + static type const call( + Expr &e + , A0 &a0 , A1 &a1 , A2 &a2 , A3 &a3 + ) + { + type that = { + e + , proto::as_child<Domain>(a0) , proto::as_child<Domain>(a1) , proto::as_child<Domain>(a2) , proto::as_child<Domain>(a3) + }; + return that; + } + }; + + + template<typename Expr , typename A0 , typename A1 , typename A2 , typename A3, typename This, typename Domain> + struct funop<Expr(A0 , A1 , A2 , A3), This, Domain> + : funop4< + typename detail::same_cv<Expr, This>::type + , Domain + , typename remove_reference<A0 >::type , typename remove_reference<A1 >::type , typename remove_reference<A2 >::type , typename remove_reference<A3 >::type + > + {}; + + + template<typename Expr, typename Domain , typename A0 , typename A1 , typename A2 , typename A3 , typename A4> + struct funop5 + { + typedef typename proto::base_expr< + Domain + , tag::function + , list6< + Expr & + , typename proto::result_of::as_child<A0, Domain>::type , typename proto::result_of::as_child<A1, Domain>::type , typename proto::result_of::as_child<A2, Domain>::type , typename proto::result_of::as_child<A3, Domain>::type , typename proto::result_of::as_child<A4, Domain>::type + > + >::type type; + BOOST_FORCEINLINE + static type const call( + Expr &e + , A0 &a0 , A1 &a1 , A2 &a2 , A3 &a3 , A4 &a4 + ) + { + type that = { + e + , proto::as_child<Domain>(a0) , proto::as_child<Domain>(a1) , proto::as_child<Domain>(a2) , proto::as_child<Domain>(a3) , proto::as_child<Domain>(a4) + }; + return that; + } + }; + + + template<typename Expr , typename A0 , typename A1 , typename A2 , typename A3 , typename A4, typename This, typename Domain> + struct funop<Expr(A0 , A1 , A2 , A3 , A4), This, Domain> + : funop5< + typename detail::same_cv<Expr, This>::type + , Domain + , typename remove_reference<A0 >::type , typename remove_reference<A1 >::type , typename remove_reference<A2 >::type , typename remove_reference<A3 >::type , typename remove_reference<A4 >::type + > + {}; + + + template<typename Expr, typename Domain , typename A0 , typename A1 , typename A2 , typename A3 , typename A4 , typename A5> + struct funop6 + { + typedef typename proto::base_expr< + Domain + , tag::function + , list7< + Expr & + , typename proto::result_of::as_child<A0, Domain>::type , typename proto::result_of::as_child<A1, Domain>::type , typename proto::result_of::as_child<A2, Domain>::type , typename proto::result_of::as_child<A3, Domain>::type , typename proto::result_of::as_child<A4, Domain>::type , typename proto::result_of::as_child<A5, Domain>::type + > + >::type type; + BOOST_FORCEINLINE + static type const call( + Expr &e + , A0 &a0 , A1 &a1 , A2 &a2 , A3 &a3 , A4 &a4 , A5 &a5 + ) + { + type that = { + e + , proto::as_child<Domain>(a0) , proto::as_child<Domain>(a1) , proto::as_child<Domain>(a2) , proto::as_child<Domain>(a3) , proto::as_child<Domain>(a4) , proto::as_child<Domain>(a5) + }; + return that; + } + }; + + + template<typename Expr , typename A0 , typename A1 , typename A2 , typename A3 , typename A4 , typename A5, typename This, typename Domain> + struct funop<Expr(A0 , A1 , A2 , A3 , A4 , A5), This, Domain> + : funop6< + typename detail::same_cv<Expr, This>::type + , Domain + , typename remove_reference<A0 >::type , typename remove_reference<A1 >::type , typename remove_reference<A2 >::type , typename remove_reference<A3 >::type , typename remove_reference<A4 >::type , typename remove_reference<A5 >::type + > + {}; + + + template<typename Expr, typename Domain , typename A0 , typename A1 , typename A2 , typename A3 , typename A4 , typename A5 , typename A6> + struct funop7 + { + typedef typename proto::base_expr< + Domain + , tag::function + , list8< + Expr & + , typename proto::result_of::as_child<A0, Domain>::type , typename proto::result_of::as_child<A1, Domain>::type , typename proto::result_of::as_child<A2, Domain>::type , typename proto::result_of::as_child<A3, Domain>::type , typename proto::result_of::as_child<A4, Domain>::type , typename proto::result_of::as_child<A5, Domain>::type , typename proto::result_of::as_child<A6, Domain>::type + > + >::type type; + BOOST_FORCEINLINE + static type const call( + Expr &e + , A0 &a0 , A1 &a1 , A2 &a2 , A3 &a3 , A4 &a4 , A5 &a5 , A6 &a6 + ) + { + type that = { + e + , proto::as_child<Domain>(a0) , proto::as_child<Domain>(a1) , proto::as_child<Domain>(a2) , proto::as_child<Domain>(a3) , proto::as_child<Domain>(a4) , proto::as_child<Domain>(a5) , proto::as_child<Domain>(a6) + }; + return that; + } + }; + + + template<typename Expr , typename A0 , typename A1 , typename A2 , typename A3 , typename A4 , typename A5 , typename A6, typename This, typename Domain> + struct funop<Expr(A0 , A1 , A2 , A3 , A4 , A5 , A6), This, Domain> + : funop7< + typename detail::same_cv<Expr, This>::type + , Domain + , typename remove_reference<A0 >::type , typename remove_reference<A1 >::type , typename remove_reference<A2 >::type , typename remove_reference<A3 >::type , typename remove_reference<A4 >::type , typename remove_reference<A5 >::type , typename remove_reference<A6 >::type + > + {}; + + + template<typename Expr, typename Domain , typename A0 , typename A1 , typename A2 , typename A3 , typename A4 , typename A5 , typename A6 , typename A7> + struct funop8 + { + typedef typename proto::base_expr< + Domain + , tag::function + , list9< + Expr & + , typename proto::result_of::as_child<A0, Domain>::type , typename proto::result_of::as_child<A1, Domain>::type , typename proto::result_of::as_child<A2, Domain>::type , typename proto::result_of::as_child<A3, Domain>::type , typename proto::result_of::as_child<A4, Domain>::type , typename proto::result_of::as_child<A5, Domain>::type , typename proto::result_of::as_child<A6, Domain>::type , typename proto::result_of::as_child<A7, Domain>::type + > + >::type type; + BOOST_FORCEINLINE + static type const call( + Expr &e + , A0 &a0 , A1 &a1 , A2 &a2 , A3 &a3 , A4 &a4 , A5 &a5 , A6 &a6 , A7 &a7 + ) + { + type that = { + e + , proto::as_child<Domain>(a0) , proto::as_child<Domain>(a1) , proto::as_child<Domain>(a2) , proto::as_child<Domain>(a3) , proto::as_child<Domain>(a4) , proto::as_child<Domain>(a5) , proto::as_child<Domain>(a6) , proto::as_child<Domain>(a7) + }; + return that; + } + }; + + + template<typename Expr , typename A0 , typename A1 , typename A2 , typename A3 , typename A4 , typename A5 , typename A6 , typename A7, typename This, typename Domain> + struct funop<Expr(A0 , A1 , A2 , A3 , A4 , A5 , A6 , A7), This, Domain> + : funop8< + typename detail::same_cv<Expr, This>::type + , Domain + , typename remove_reference<A0 >::type , typename remove_reference<A1 >::type , typename remove_reference<A2 >::type , typename remove_reference<A3 >::type , typename remove_reference<A4 >::type , typename remove_reference<A5 >::type , typename remove_reference<A6 >::type , typename remove_reference<A7 >::type + > + {}; + + + template<typename Expr, typename Domain , typename A0 , typename A1 , typename A2 , typename A3 , typename A4 , typename A5 , typename A6 , typename A7 , typename A8> + struct funop9 + { + typedef typename proto::base_expr< + Domain + , tag::function + , list10< + Expr & + , typename proto::result_of::as_child<A0, Domain>::type , typename proto::result_of::as_child<A1, Domain>::type , typename proto::result_of::as_child<A2, Domain>::type , typename proto::result_of::as_child<A3, Domain>::type , typename proto::result_of::as_child<A4, Domain>::type , typename proto::result_of::as_child<A5, Domain>::type , typename proto::result_of::as_child<A6, Domain>::type , typename proto::result_of::as_child<A7, Domain>::type , typename proto::result_of::as_child<A8, Domain>::type + > + >::type type; + BOOST_FORCEINLINE + static type const call( + Expr &e + , A0 &a0 , A1 &a1 , A2 &a2 , A3 &a3 , A4 &a4 , A5 &a5 , A6 &a6 , A7 &a7 , A8 &a8 + ) + { + type that = { + e + , proto::as_child<Domain>(a0) , proto::as_child<Domain>(a1) , proto::as_child<Domain>(a2) , proto::as_child<Domain>(a3) , proto::as_child<Domain>(a4) , proto::as_child<Domain>(a5) , proto::as_child<Domain>(a6) , proto::as_child<Domain>(a7) , proto::as_child<Domain>(a8) + }; + return that; + } + }; + + + template<typename Expr , typename A0 , typename A1 , typename A2 , typename A3 , typename A4 , typename A5 , typename A6 , typename A7 , typename A8, typename This, typename Domain> + struct funop<Expr(A0 , A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8), This, Domain> + : funop9< + typename detail::same_cv<Expr, This>::type + , Domain + , typename remove_reference<A0 >::type , typename remove_reference<A1 >::type , typename remove_reference<A2 >::type , typename remove_reference<A3 >::type , typename remove_reference<A4 >::type , typename remove_reference<A5 >::type , typename remove_reference<A6 >::type , typename remove_reference<A7 >::type , typename remove_reference<A8 >::type + > + {}; |