Chris@16: /////////////////////////////////////////////////////////////////////////////// Chris@16: /// \file and_n.hpp Chris@16: /// Definitions of and_N, and_impl 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: Chris@16: template Chris@16: struct and_2 Chris@16: : mpl::bool_ Chris@16: {}; Chris@16: template Chris@16: struct and_2 Chris@16: : mpl::false_ Chris@16: {}; Chris@16: template Chris@16: struct _and_impl, Expr, State, Data> Chris@16: : proto::transform_impl Chris@16: { Chris@16: typedef typename proto::when ::template impl Gimpl0; typedef typename proto::when ::template impl Gimpl1; Chris@16: typedef typename Gimpl1::result_type result_type; Chris@16: result_type operator()( Chris@16: typename _and_impl::expr_param e Chris@16: , typename _and_impl::state_param s Chris@16: , typename _and_impl::data_param d Chris@16: ) const Chris@16: { Chris@16: Chris@16: Chris@16: Chris@16: Chris@16: Gimpl0()(e,s,d); Chris@16: return Gimpl1()(e,s,d); Chris@16: } Chris@16: }; Chris@16: Chris@16: Chris@16: Chris@16: template Chris@16: struct and_3 Chris@16: : and_2< Chris@16: P0::value , Chris@16: P1 Chris@16: > Chris@16: {}; Chris@16: template Chris@16: struct and_3 Chris@16: : mpl::false_ Chris@16: {}; Chris@16: template Chris@16: struct _and_impl, Expr, State, Data> Chris@16: : proto::transform_impl Chris@16: { Chris@16: typedef typename proto::when ::template impl Gimpl0; typedef typename proto::when ::template impl Gimpl1; typedef typename proto::when ::template impl Gimpl2; Chris@16: typedef typename Gimpl2::result_type result_type; Chris@16: result_type operator()( Chris@16: typename _and_impl::expr_param e Chris@16: , typename _and_impl::state_param s Chris@16: , typename _and_impl::data_param d Chris@16: ) const Chris@16: { Chris@16: Chris@16: Chris@16: Chris@16: Chris@16: Gimpl0()(e,s,d); Gimpl1()(e,s,d); Chris@16: return Gimpl2()(e,s,d); Chris@16: } Chris@16: }; Chris@16: Chris@16: Chris@16: Chris@16: template Chris@16: struct and_4 Chris@16: : and_3< Chris@16: P0::value , Chris@16: P1 , P2 Chris@16: > Chris@16: {}; Chris@16: template Chris@16: struct and_4 Chris@16: : mpl::false_ Chris@16: {}; Chris@16: template Chris@16: struct _and_impl, Expr, State, Data> Chris@16: : proto::transform_impl Chris@16: { Chris@16: typedef typename proto::when ::template impl Gimpl0; typedef typename proto::when ::template impl Gimpl1; typedef typename proto::when ::template impl Gimpl2; typedef typename proto::when ::template impl Gimpl3; Chris@16: typedef typename Gimpl3::result_type result_type; Chris@16: result_type operator()( Chris@16: typename _and_impl::expr_param e Chris@16: , typename _and_impl::state_param s Chris@16: , typename _and_impl::data_param d Chris@16: ) const Chris@16: { Chris@16: Chris@16: Chris@16: Chris@16: Chris@16: Gimpl0()(e,s,d); Gimpl1()(e,s,d); Gimpl2()(e,s,d); Chris@16: return Gimpl3()(e,s,d); Chris@16: } Chris@16: }; Chris@16: Chris@16: Chris@16: Chris@16: template Chris@16: struct and_5 Chris@16: : and_4< Chris@16: P0::value , Chris@16: P1 , P2 , P3 Chris@16: > Chris@16: {}; Chris@16: template Chris@16: struct and_5 Chris@16: : mpl::false_ Chris@16: {}; Chris@16: template Chris@16: struct _and_impl, Expr, State, Data> Chris@16: : proto::transform_impl Chris@16: { Chris@16: typedef typename proto::when ::template impl Gimpl0; typedef typename proto::when ::template impl Gimpl1; typedef typename proto::when ::template impl Gimpl2; typedef typename proto::when ::template impl Gimpl3; typedef typename proto::when ::template impl Gimpl4; Chris@16: typedef typename Gimpl4::result_type result_type; Chris@16: result_type operator()( Chris@16: typename _and_impl::expr_param e Chris@16: , typename _and_impl::state_param s Chris@16: , typename _and_impl::data_param d Chris@16: ) const Chris@16: { Chris@16: Chris@16: Chris@16: Chris@16: Chris@16: Gimpl0()(e,s,d); Gimpl1()(e,s,d); Gimpl2()(e,s,d); Gimpl3()(e,s,d); Chris@16: return Gimpl4()(e,s,d); Chris@16: } Chris@16: }; Chris@16: Chris@16: Chris@16: Chris@16: template Chris@16: struct and_6 Chris@16: : and_5< Chris@16: P0::value , Chris@16: P1 , P2 , P3 , P4 Chris@16: > Chris@16: {}; Chris@16: template Chris@16: struct and_6 Chris@16: : mpl::false_ Chris@16: {}; Chris@16: template Chris@16: struct _and_impl, Expr, State, Data> Chris@16: : proto::transform_impl Chris@16: { Chris@16: typedef typename proto::when ::template impl Gimpl0; typedef typename proto::when ::template impl Gimpl1; typedef typename proto::when ::template impl Gimpl2; typedef typename proto::when ::template impl Gimpl3; typedef typename proto::when ::template impl Gimpl4; typedef typename proto::when ::template impl Gimpl5; Chris@16: typedef typename Gimpl5::result_type result_type; Chris@16: result_type operator()( Chris@16: typename _and_impl::expr_param e Chris@16: , typename _and_impl::state_param s Chris@16: , typename _and_impl::data_param d Chris@16: ) const Chris@16: { Chris@16: Chris@16: Chris@16: Chris@16: Chris@16: Gimpl0()(e,s,d); Gimpl1()(e,s,d); Gimpl2()(e,s,d); Gimpl3()(e,s,d); Gimpl4()(e,s,d); Chris@16: return Gimpl5()(e,s,d); Chris@16: } Chris@16: }; Chris@16: Chris@16: Chris@16: Chris@16: template Chris@16: struct and_7 Chris@16: : and_6< Chris@16: P0::value , Chris@16: P1 , P2 , P3 , P4 , P5 Chris@16: > Chris@16: {}; Chris@16: template Chris@16: struct and_7 Chris@16: : mpl::false_ Chris@16: {}; Chris@16: template Chris@16: struct _and_impl, Expr, State, Data> Chris@16: : proto::transform_impl Chris@16: { Chris@16: typedef typename proto::when ::template impl Gimpl0; typedef typename proto::when ::template impl Gimpl1; typedef typename proto::when ::template impl Gimpl2; typedef typename proto::when ::template impl Gimpl3; typedef typename proto::when ::template impl Gimpl4; typedef typename proto::when ::template impl Gimpl5; typedef typename proto::when ::template impl Gimpl6; Chris@16: typedef typename Gimpl6::result_type result_type; Chris@16: result_type operator()( Chris@16: typename _and_impl::expr_param e Chris@16: , typename _and_impl::state_param s Chris@16: , typename _and_impl::data_param d Chris@16: ) const Chris@16: { Chris@16: Chris@16: Chris@16: Chris@16: Chris@16: Gimpl0()(e,s,d); Gimpl1()(e,s,d); Gimpl2()(e,s,d); Gimpl3()(e,s,d); Gimpl4()(e,s,d); Gimpl5()(e,s,d); Chris@16: return Gimpl6()(e,s,d); Chris@16: } Chris@16: }; Chris@16: Chris@16: Chris@16: Chris@16: template Chris@16: struct and_8 Chris@16: : and_7< Chris@16: P0::value , Chris@16: P1 , P2 , P3 , P4 , P5 , P6 Chris@16: > Chris@16: {}; Chris@16: template Chris@16: struct and_8 Chris@16: : mpl::false_ Chris@16: {}; Chris@16: template Chris@16: struct _and_impl, Expr, State, Data> Chris@16: : proto::transform_impl Chris@16: { Chris@16: typedef typename proto::when ::template impl Gimpl0; typedef typename proto::when ::template impl Gimpl1; typedef typename proto::when ::template impl Gimpl2; typedef typename proto::when ::template impl Gimpl3; typedef typename proto::when ::template impl Gimpl4; typedef typename proto::when ::template impl Gimpl5; typedef typename proto::when ::template impl Gimpl6; typedef typename proto::when ::template impl Gimpl7; Chris@16: typedef typename Gimpl7::result_type result_type; Chris@16: result_type operator()( Chris@16: typename _and_impl::expr_param e Chris@16: , typename _and_impl::state_param s Chris@16: , typename _and_impl::data_param d Chris@16: ) const Chris@16: { Chris@16: Chris@16: Chris@16: Chris@16: Chris@16: Gimpl0()(e,s,d); Gimpl1()(e,s,d); Gimpl2()(e,s,d); Gimpl3()(e,s,d); Gimpl4()(e,s,d); Gimpl5()(e,s,d); Gimpl6()(e,s,d); Chris@16: return Gimpl7()(e,s,d); Chris@16: } Chris@16: }; Chris@16: Chris@16: Chris@16: Chris@16: template Chris@16: struct and_9 Chris@16: : and_8< Chris@16: P0::value , Chris@16: P1 , P2 , P3 , P4 , P5 , P6 , P7 Chris@16: > Chris@16: {}; Chris@16: template Chris@16: struct and_9 Chris@16: : mpl::false_ Chris@16: {}; Chris@16: template Chris@16: struct _and_impl, Expr, State, Data> Chris@16: : proto::transform_impl Chris@16: { Chris@16: typedef typename proto::when ::template impl Gimpl0; typedef typename proto::when ::template impl Gimpl1; typedef typename proto::when ::template impl Gimpl2; typedef typename proto::when ::template impl Gimpl3; typedef typename proto::when ::template impl Gimpl4; typedef typename proto::when ::template impl Gimpl5; typedef typename proto::when ::template impl Gimpl6; typedef typename proto::when ::template impl Gimpl7; typedef typename proto::when ::template impl Gimpl8; Chris@16: typedef typename Gimpl8::result_type result_type; Chris@16: result_type operator()( Chris@16: typename _and_impl::expr_param e Chris@16: , typename _and_impl::state_param s Chris@16: , typename _and_impl::data_param d Chris@16: ) const Chris@16: { Chris@16: Chris@16: Chris@16: Chris@16: Chris@16: Gimpl0()(e,s,d); Gimpl1()(e,s,d); Gimpl2()(e,s,d); Gimpl3()(e,s,d); Gimpl4()(e,s,d); Gimpl5()(e,s,d); Gimpl6()(e,s,d); Gimpl7()(e,s,d); Chris@16: return Gimpl8()(e,s,d); Chris@16: } Chris@16: }; Chris@16: Chris@16: Chris@16: Chris@16: template Chris@16: struct and_10 Chris@16: : and_9< Chris@16: P0::value , Chris@16: P1 , P2 , P3 , P4 , P5 , P6 , P7 , P8 Chris@16: > Chris@16: {}; Chris@16: template Chris@16: struct and_10 Chris@16: : mpl::false_ Chris@16: {}; Chris@16: template Chris@16: struct _and_impl, Expr, State, Data> Chris@16: : proto::transform_impl Chris@16: { Chris@16: typedef typename proto::when ::template impl Gimpl0; typedef typename proto::when ::template impl Gimpl1; typedef typename proto::when ::template impl Gimpl2; typedef typename proto::when ::template impl Gimpl3; typedef typename proto::when ::template impl Gimpl4; typedef typename proto::when ::template impl Gimpl5; typedef typename proto::when ::template impl Gimpl6; typedef typename proto::when ::template impl Gimpl7; typedef typename proto::when ::template impl Gimpl8; typedef typename proto::when ::template impl Gimpl9; Chris@16: typedef typename Gimpl9::result_type result_type; Chris@16: result_type operator()( Chris@16: typename _and_impl::expr_param e Chris@16: , typename _and_impl::state_param s Chris@16: , typename _and_impl::data_param d Chris@16: ) const Chris@16: { Chris@16: Chris@16: Chris@16: Chris@16: Chris@16: Gimpl0()(e,s,d); Gimpl1()(e,s,d); Gimpl2()(e,s,d); Gimpl3()(e,s,d); Gimpl4()(e,s,d); Gimpl5()(e,s,d); Gimpl6()(e,s,d); Gimpl7()(e,s,d); Gimpl8()(e,s,d); Chris@16: return Gimpl9()(e,s,d); Chris@16: } Chris@16: };