Chris@16: /////////////////////////////////////////////////////////////////////////////// Chris@16: // funop.hpp Chris@16: // Contains definition of funop[n]\<\> class template. Chris@16: // Chris@16: // Copyright 2008 Eric Niebler. Distributed under the Boost Chris@16: // Software License, Version 1.0. (See accompanying file Chris@16: // LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) Chris@16: Chris@16: Chris@16: template Chris@16: struct funop0 Chris@16: { Chris@16: typedef typename proto::base_expr< Chris@16: Domain Chris@16: , tag::function Chris@16: , list1< Chris@16: Expr & Chris@16: Chris@16: > Chris@16: >::type type; Chris@16: BOOST_FORCEINLINE Chris@16: static type const call( Chris@16: Expr &e Chris@16: Chris@16: ) Chris@16: { Chris@16: type that = { Chris@16: e Chris@16: Chris@16: }; Chris@16: return that; Chris@16: } Chris@16: }; Chris@16: Chris@16: Chris@16: template Chris@16: struct funop Chris@16: : funop0< Chris@16: typename detail::same_cv::type Chris@16: , Domain Chris@16: Chris@16: > Chris@16: {}; Chris@16: Chris@16: Chris@16: template Chris@16: struct funop1 Chris@16: { Chris@16: typedef typename proto::base_expr< Chris@16: Domain Chris@16: , tag::function Chris@16: , list2< Chris@16: Expr & Chris@16: , typename proto::result_of::as_child::type Chris@16: > Chris@16: >::type type; Chris@16: BOOST_FORCEINLINE Chris@16: static type const call( Chris@16: Expr &e Chris@16: , A0 &a0 Chris@16: ) Chris@16: { Chris@16: type that = { Chris@16: e Chris@16: , proto::as_child(a0) Chris@16: }; Chris@16: return that; Chris@16: } Chris@16: }; Chris@16: Chris@16: Chris@16: template Chris@16: struct funop Chris@16: : funop1< Chris@16: typename detail::same_cv::type Chris@16: , Domain Chris@16: , typename remove_reference::type Chris@16: > Chris@16: {}; Chris@16: Chris@16: Chris@16: template Chris@16: struct funop2 Chris@16: { Chris@16: typedef typename proto::base_expr< Chris@16: Domain Chris@16: , tag::function Chris@16: , list3< Chris@16: Expr & Chris@16: , typename proto::result_of::as_child::type , typename proto::result_of::as_child::type Chris@16: > Chris@16: >::type type; Chris@16: BOOST_FORCEINLINE Chris@16: static type const call( Chris@16: Expr &e Chris@16: , A0 &a0 , A1 &a1 Chris@16: ) Chris@16: { Chris@16: type that = { Chris@16: e Chris@16: , proto::as_child(a0) , proto::as_child(a1) Chris@16: }; Chris@16: return that; Chris@16: } Chris@16: }; Chris@16: Chris@16: Chris@16: template Chris@16: struct funop Chris@16: : funop2< Chris@16: typename detail::same_cv::type Chris@16: , Domain Chris@16: , typename remove_reference::type , typename remove_reference::type Chris@16: > Chris@16: {}; Chris@16: Chris@16: Chris@16: template Chris@16: struct funop3 Chris@16: { Chris@16: typedef typename proto::base_expr< Chris@16: Domain Chris@16: , tag::function Chris@16: , list4< Chris@16: Expr & Chris@16: , typename proto::result_of::as_child::type , typename proto::result_of::as_child::type , typename proto::result_of::as_child::type Chris@16: > Chris@16: >::type type; Chris@16: BOOST_FORCEINLINE Chris@16: static type const call( Chris@16: Expr &e Chris@16: , A0 &a0 , A1 &a1 , A2 &a2 Chris@16: ) Chris@16: { Chris@16: type that = { Chris@16: e Chris@16: , proto::as_child(a0) , proto::as_child(a1) , proto::as_child(a2) Chris@16: }; Chris@16: return that; Chris@16: } Chris@16: }; Chris@16: Chris@16: Chris@16: template Chris@16: struct funop Chris@16: : funop3< Chris@16: typename detail::same_cv::type Chris@16: , Domain Chris@16: , typename remove_reference::type , typename remove_reference::type , typename remove_reference::type Chris@16: > Chris@16: {}; Chris@16: Chris@16: Chris@16: template Chris@16: struct funop4 Chris@16: { Chris@16: typedef typename proto::base_expr< Chris@16: Domain Chris@16: , tag::function Chris@16: , list5< Chris@16: Expr & Chris@16: , typename proto::result_of::as_child::type , typename proto::result_of::as_child::type , typename proto::result_of::as_child::type , typename proto::result_of::as_child::type Chris@16: > Chris@16: >::type type; Chris@16: BOOST_FORCEINLINE Chris@16: static type const call( Chris@16: Expr &e Chris@16: , A0 &a0 , A1 &a1 , A2 &a2 , A3 &a3 Chris@16: ) Chris@16: { Chris@16: type that = { Chris@16: e Chris@16: , proto::as_child(a0) , proto::as_child(a1) , proto::as_child(a2) , proto::as_child(a3) Chris@16: }; Chris@16: return that; Chris@16: } Chris@16: }; Chris@16: Chris@16: Chris@16: template Chris@16: struct funop Chris@16: : funop4< Chris@16: typename detail::same_cv::type Chris@16: , Domain Chris@16: , typename remove_reference::type , typename remove_reference::type , typename remove_reference::type , typename remove_reference::type Chris@16: > Chris@16: {}; Chris@16: Chris@16: Chris@16: template Chris@16: struct funop5 Chris@16: { Chris@16: typedef typename proto::base_expr< Chris@16: Domain Chris@16: , tag::function Chris@16: , list6< Chris@16: Expr & Chris@16: , typename proto::result_of::as_child::type , typename proto::result_of::as_child::type , typename proto::result_of::as_child::type , typename proto::result_of::as_child::type , typename proto::result_of::as_child::type Chris@16: > Chris@16: >::type type; Chris@16: BOOST_FORCEINLINE Chris@16: static type const call( Chris@16: Expr &e Chris@16: , A0 &a0 , A1 &a1 , A2 &a2 , A3 &a3 , A4 &a4 Chris@16: ) Chris@16: { Chris@16: type that = { Chris@16: e Chris@16: , proto::as_child(a0) , proto::as_child(a1) , proto::as_child(a2) , proto::as_child(a3) , proto::as_child(a4) Chris@16: }; Chris@16: return that; Chris@16: } Chris@16: }; Chris@16: Chris@16: Chris@16: template Chris@16: struct funop Chris@16: : funop5< Chris@16: typename detail::same_cv::type Chris@16: , Domain Chris@16: , typename remove_reference::type , typename remove_reference::type , typename remove_reference::type , typename remove_reference::type , typename remove_reference::type Chris@16: > Chris@16: {}; Chris@16: Chris@16: Chris@16: template Chris@16: struct funop6 Chris@16: { Chris@16: typedef typename proto::base_expr< Chris@16: Domain Chris@16: , tag::function Chris@16: , list7< Chris@16: Expr & Chris@16: , typename proto::result_of::as_child::type , typename proto::result_of::as_child::type , typename proto::result_of::as_child::type , typename proto::result_of::as_child::type , typename proto::result_of::as_child::type , typename proto::result_of::as_child::type Chris@16: > Chris@16: >::type type; Chris@16: BOOST_FORCEINLINE Chris@16: static type const call( Chris@16: Expr &e Chris@16: , A0 &a0 , A1 &a1 , A2 &a2 , A3 &a3 , A4 &a4 , A5 &a5 Chris@16: ) Chris@16: { Chris@16: type that = { Chris@16: e Chris@16: , proto::as_child(a0) , proto::as_child(a1) , proto::as_child(a2) , proto::as_child(a3) , proto::as_child(a4) , proto::as_child(a5) Chris@16: }; Chris@16: return that; Chris@16: } Chris@16: }; Chris@16: Chris@16: Chris@16: template Chris@16: struct funop Chris@16: : funop6< Chris@16: typename detail::same_cv::type Chris@16: , Domain Chris@16: , typename remove_reference::type , typename remove_reference::type , typename remove_reference::type , typename remove_reference::type , typename remove_reference::type , typename remove_reference::type Chris@16: > Chris@16: {}; Chris@16: Chris@16: Chris@16: template Chris@16: struct funop7 Chris@16: { Chris@16: typedef typename proto::base_expr< Chris@16: Domain Chris@16: , tag::function Chris@16: , list8< Chris@16: Expr & Chris@16: , typename proto::result_of::as_child::type , typename proto::result_of::as_child::type , typename proto::result_of::as_child::type , typename proto::result_of::as_child::type , typename proto::result_of::as_child::type , typename proto::result_of::as_child::type , typename proto::result_of::as_child::type Chris@16: > Chris@16: >::type type; Chris@16: BOOST_FORCEINLINE Chris@16: static type const call( Chris@16: Expr &e Chris@16: , A0 &a0 , A1 &a1 , A2 &a2 , A3 &a3 , A4 &a4 , A5 &a5 , A6 &a6 Chris@16: ) Chris@16: { Chris@16: type that = { Chris@16: e Chris@16: , proto::as_child(a0) , proto::as_child(a1) , proto::as_child(a2) , proto::as_child(a3) , proto::as_child(a4) , proto::as_child(a5) , proto::as_child(a6) Chris@16: }; Chris@16: return that; Chris@16: } Chris@16: }; Chris@16: Chris@16: Chris@16: template Chris@16: struct funop Chris@16: : funop7< Chris@16: typename detail::same_cv::type Chris@16: , Domain Chris@16: , typename remove_reference::type , typename remove_reference::type , typename remove_reference::type , typename remove_reference::type , typename remove_reference::type , typename remove_reference::type , typename remove_reference::type Chris@16: > Chris@16: {}; Chris@16: Chris@16: Chris@16: template Chris@16: struct funop8 Chris@16: { Chris@16: typedef typename proto::base_expr< Chris@16: Domain Chris@16: , tag::function Chris@16: , list9< Chris@16: Expr & Chris@16: , typename proto::result_of::as_child::type , typename proto::result_of::as_child::type , typename proto::result_of::as_child::type , typename proto::result_of::as_child::type , typename proto::result_of::as_child::type , typename proto::result_of::as_child::type , typename proto::result_of::as_child::type , typename proto::result_of::as_child::type Chris@16: > Chris@16: >::type type; Chris@16: BOOST_FORCEINLINE Chris@16: static type const call( Chris@16: Expr &e Chris@16: , A0 &a0 , A1 &a1 , A2 &a2 , A3 &a3 , A4 &a4 , A5 &a5 , A6 &a6 , A7 &a7 Chris@16: ) Chris@16: { Chris@16: type that = { Chris@16: e Chris@16: , proto::as_child(a0) , proto::as_child(a1) , proto::as_child(a2) , proto::as_child(a3) , proto::as_child(a4) , proto::as_child(a5) , proto::as_child(a6) , proto::as_child(a7) Chris@16: }; Chris@16: return that; Chris@16: } Chris@16: }; Chris@16: Chris@16: Chris@16: template Chris@16: struct funop Chris@16: : funop8< Chris@16: typename detail::same_cv::type Chris@16: , Domain Chris@16: , typename remove_reference::type , typename remove_reference::type , typename remove_reference::type , typename remove_reference::type , typename remove_reference::type , typename remove_reference::type , typename remove_reference::type , typename remove_reference::type Chris@16: > Chris@16: {}; Chris@16: Chris@16: Chris@16: template Chris@16: struct funop9 Chris@16: { Chris@16: typedef typename proto::base_expr< Chris@16: Domain Chris@16: , tag::function Chris@16: , list10< Chris@16: Expr & Chris@16: , typename proto::result_of::as_child::type , typename proto::result_of::as_child::type , typename proto::result_of::as_child::type , typename proto::result_of::as_child::type , typename proto::result_of::as_child::type , typename proto::result_of::as_child::type , typename proto::result_of::as_child::type , typename proto::result_of::as_child::type , typename proto::result_of::as_child::type Chris@16: > Chris@16: >::type type; Chris@16: BOOST_FORCEINLINE Chris@16: static type const call( Chris@16: Expr &e Chris@16: , A0 &a0 , A1 &a1 , A2 &a2 , A3 &a3 , A4 &a4 , A5 &a5 , A6 &a6 , A7 &a7 , A8 &a8 Chris@16: ) Chris@16: { Chris@16: type that = { Chris@16: e Chris@16: , proto::as_child(a0) , proto::as_child(a1) , proto::as_child(a2) , proto::as_child(a3) , proto::as_child(a4) , proto::as_child(a5) , proto::as_child(a6) , proto::as_child(a7) , proto::as_child(a8) Chris@16: }; Chris@16: return that; Chris@16: } Chris@16: }; Chris@16: Chris@16: Chris@16: template Chris@16: struct funop Chris@16: : funop9< Chris@16: typename detail::same_cv::type Chris@16: , Domain Chris@16: , typename remove_reference::type , typename remove_reference::type , typename remove_reference::type , typename remove_reference::type , typename remove_reference::type , typename remove_reference::type , typename remove_reference::type , typename remove_reference::type , typename remove_reference::type Chris@16: > Chris@16: {};