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