composite.hpp
来自「Boost provides free peer-reviewed portab」· HPP 代码 · 共 1,423 行 · 第 1/4 页
HPP
1,423 行
typename actor_result<C, TupleT>::type rc = c.eval(args); typename actor_result<D, TupleT>::type rd = d.eval(args); typename actor_result<E, TupleT>::type re = e.eval(args); typename actor_result<F, TupleT>::type rf = f.eval(args); typename actor_result<G, TupleT>::type rg = g.eval(args); typename actor_result<H, TupleT>::type rh = h.eval(args); typename actor_result<I, TupleT>::type ri = i.eval(args); typename actor_result<J, TupleT>::type rj = j.eval(args); typename actor_result<K, TupleT>::type rk = k.eval(args); typename actor_result<L, TupleT>::type rl = l.eval(args); typename actor_result<M, TupleT>::type rm = m.eval(args); return op(ra, rb, rc, rd, re, rf, rg, rh, ri, rj, rk, rl, rm); } mutable OperationT op; // operation A a; B b; C c; D d; E e; F f; G g; H h; I i; J j; K k; L l; M m; // actors};/////////////////////////////////////////////////////////////////////////////////// composite <14 actors> class/////////////////////////////////////////////////////////////////////////////////template <typename OperationT, typename TupleT, typename A, typename B, typename C, typename D, typename E, typename F, typename G, typename H, typename I, typename J, typename K, typename L, typename M, typename N>struct composite14_result { typedef typename OperationT::template result< typename actor_result<A, TupleT>::plain_type, typename actor_result<B, TupleT>::plain_type, typename actor_result<C, TupleT>::plain_type, typename actor_result<D, TupleT>::plain_type, typename actor_result<E, TupleT>::plain_type, typename actor_result<F, TupleT>::plain_type, typename actor_result<G, TupleT>::plain_type, typename actor_result<H, TupleT>::plain_type, typename actor_result<I, TupleT>::plain_type, typename actor_result<J, TupleT>::plain_type, typename actor_result<K, TupleT>::plain_type, typename actor_result<L, TupleT>::plain_type, typename actor_result<M, TupleT>::plain_type, typename actor_result<N, TupleT>::plain_type >::type type;};//////////////////////////////////template <typename OperationT, typename A, typename B, typename C, typename D, typename E, typename F, typename G, typename H, typename I, typename J, typename K, typename L, typename M, typename N>struct composite<OperationT, A, B, C, D, E, F, G, H, I, J, K, L, M, N, nil_t, nil_t> { typedef composite<OperationT, A, B, C, D, E, F, G, H, I, J, K, L, M, N> self_t; template <typename TupleT> struct result { typedef typename composite14_result< OperationT, TupleT, A, B, C, D, E, F, G, H, I, J, K, L, M, N >::type type; }; composite(OperationT const& op_, A const& a_, B const& b_, C const& c_, D const& d_, E const& e_, F const& f_, G const& g_, H const& h_, I const& i_, J const& j_, K const& k_, L const& l_, M const& m_, N const& n_) : op(op_), a(a_), b(b_), c(c_), d(d_), e(e_), f(f_), g(g_), h(h_), i(i_), j(j_), k(k_), l(l_), m(m_), n(n_) {} template <typename TupleT> typename actor_result<self_t, TupleT>::type eval(TupleT const& args) const { typename actor_result<A, TupleT>::type ra = a.eval(args); typename actor_result<B, TupleT>::type rb = b.eval(args); typename actor_result<C, TupleT>::type rc = c.eval(args); typename actor_result<D, TupleT>::type rd = d.eval(args); typename actor_result<E, TupleT>::type re = e.eval(args); typename actor_result<F, TupleT>::type rf = f.eval(args); typename actor_result<G, TupleT>::type rg = g.eval(args); typename actor_result<H, TupleT>::type rh = h.eval(args); typename actor_result<I, TupleT>::type ri = i.eval(args); typename actor_result<J, TupleT>::type rj = j.eval(args); typename actor_result<K, TupleT>::type rk = k.eval(args); typename actor_result<L, TupleT>::type rl = l.eval(args); typename actor_result<M, TupleT>::type rm = m.eval(args); typename actor_result<N, TupleT>::type rn = n.eval(args); return op(ra, rb, rc, rd, re, rf, rg, rh, ri, rj, rk, rl, rm, rn); } mutable OperationT op; // operation A a; B b; C c; D d; E e; F f; G g; H h; I i; J j; K k; L l; M m; N n; // actors};/////////////////////////////////////////////////////////////////////////////////// composite <15 actors> class/////////////////////////////////////////////////////////////////////////////////template <typename OperationT, typename TupleT, typename A, typename B, typename C, typename D, typename E, typename F, typename G, typename H, typename I, typename J, typename K, typename L, typename M, typename N, typename O>struct composite15_result { typedef typename OperationT::template result< typename actor_result<A, TupleT>::plain_type, typename actor_result<B, TupleT>::plain_type, typename actor_result<C, TupleT>::plain_type, typename actor_result<D, TupleT>::plain_type, typename actor_result<E, TupleT>::plain_type, typename actor_result<F, TupleT>::plain_type, typename actor_result<G, TupleT>::plain_type, typename actor_result<H, TupleT>::plain_type, typename actor_result<I, TupleT>::plain_type, typename actor_result<J, TupleT>::plain_type, typename actor_result<K, TupleT>::plain_type, typename actor_result<L, TupleT>::plain_type, typename actor_result<M, TupleT>::plain_type, typename actor_result<N, TupleT>::plain_type, typename actor_result<O, TupleT>::plain_type >::type type;};//////////////////////////////////template <typename OperationT, typename A, typename B, typename C, typename D, typename E, typename F, typename G, typename H, typename I, typename J, typename K, typename L, typename M, typename N, typename O>struct composite<OperationT, A, B, C, D, E, F, G, H, I, J, K, L, M, N, O, nil_t> { typedef composite<OperationT, A, B, C, D, E, F, G, H, I, J, K, L, M, N, O> self_t; template <typename TupleT> struct result { typedef typename composite15_result< OperationT, TupleT, A, B, C, D, E, F, G, H, I, J, K, L, M, N, O >::type type; }; composite(OperationT const& op_, A const& a_, B const& b_, C const& c_, D const& d_, E const& e_, F const& f_, G const& g_, H const& h_, I const& i_, J const& j_, K const& k_, L const& l_, M const& m_, N const& n_, O const& o_) : op(op_), a(a_), b(b_), c(c_), d(d_), e(e_), f(f_), g(g_), h(h_), i(i_), j(j_), k(k_), l(l_), m(m_), n(n_), o(o_) {} template <typename TupleT> typename actor_result<self_t, TupleT>::type eval(TupleT const& args) const { typename actor_result<A, TupleT>::type ra = a.eval(args); typename actor_result<B, TupleT>::type rb = b.eval(args); typename actor_result<C, TupleT>::type rc = c.eval(args); typename actor_result<D, TupleT>::type rd = d.eval(args); typename actor_result<E, TupleT>::type re = e.eval(args); typename actor_result<F, TupleT>::type rf = f.eval(args); typename actor_result<G, TupleT>::type rg = g.eval(args); typename actor_result<H, TupleT>::type rh = h.eval(args); typename actor_result<I, TupleT>::type ri = i.eval(args); typename actor_result<J, TupleT>::type rj = j.eval(args); typename actor_result<K, TupleT>::type rk = k.eval(args); typename actor_result<L, TupleT>::type rl = l.eval(args); typename actor_result<M, TupleT>::type rm = m.eval(args); typename actor_result<N, TupleT>::type rn = n.eval(args); typename actor_result<O, TupleT>::type ro = o.eval(args); return op(ra, rb, rc, rd, re, rf, rg, rh, ri, rj, rk, rl, rm, rn, ro); } mutable OperationT op; // operation A a; B b; C c; D d; E e; F f; G g; H h; I i; J j; K k; L l; M m; N n; O o; // actors};#endif#endif#endif#endifnamespace impl { /////////////////////////////////////////////////////////////////////////// // // make_composite is basically a type computer that answers the // question "Given types T0..TN, what composite type should I // create <composite_type> and if I were to generate an actual // composite, what type <type> should I return?" // /////////////////////////////////////////////////////////////////////////// template < typename OperationT , typename A = nil_t , typename B = nil_t , typename C = nil_t#if PHOENIX_LIMIT > 3 , typename D = nil_t , typename E = nil_t , typename F = nil_t#if PHOENIX_LIMIT > 6 , typename G = nil_t , typename H = nil_t , typename I = nil_t#if PHOENIX_LIMIT > 9 , typename J = nil_t , typename K = nil_t , typename L = nil_t#if PHOENIX_LIMIT > 12 , typename M = nil_t , typename N = nil_t , typename O = nil_t#endif#endif#endif#endif > struct make_composite { typedef composite<OperationT , typename as_actor<A>::type , typename as_actor<B>::type , typename as_actor<C>::type#if PHOENIX_LIMIT > 3 , typename as_actor<D>::type , typename as_actor<E>::type , typename as_actor<F>::type#if PHOENIX_LIMIT > 6 , typename as_actor<G>::type , typename as_actor<H>::type , typename as_actor<I>::type#if PHOENIX_LIMIT > 9 , typename as_actor<J>::type , typename as_actor<K>::type , typename as_actor<L>::type#if PHOENIX_LIMIT > 12 , typename as_actor<M>::type , typename as_actor<N>::type , typename as_actor<O>::type#endif#endif#endif#endif > composite_type; typedef actor<composite_type> type; }; /////////////////////////////////////////////////////////////////////////// // // make_unary, make_binary, make_binary1, make_binary2 and // make_binary3 utilities are provided here for easy creation of // unary and binary composites. // /////////////////////////////////////////////////////////////////////////// ////////////////////////////////// input is an actor template <typename OperationT, typename BaseT> struct make_unary { typedef typename make_composite <OperationT, actor<BaseT> >::type type; static type construct(actor<BaseT> const& _0) { typedef typename make_composite <OperationT, actor<BaseT> >::composite_type ret_t; return ret_t(OperationT(), _0); } }; ////////////////////////////////// LHS is an actor, RHS is unknown template <typename OperationT, typename BaseT, typename B> struct make_binary1 { typedef typename make_composite <OperationT, actor<BaseT>, B>::type type; static type construct(actor<BaseT> const& _0, B const& _1) { typedef typename make_composite <OperationT, actor<BaseT>, B>::composite_type ret_t; return ret_t(OperationT(), _0, as_actor<B>::convert(_1)); } }; ////////////////////////////////// LHS is unknown, RHS is an actor template <typename OperationT, typename A, typename BaseT> struct make_binary2 { typedef typename make_composite <OperationT, A, actor<BaseT> >::type type; static type construct(A const& _0, actor<BaseT> const& _1) { typedef typename make_composite <OperationT, A, actor<BaseT> >::composite_type ret_t; return ret_t(OperationT(), as_actor<A>::convert(_0), _1); } }; ////////////////////////////////// Both LHS and RHS are actors template <typename OperationT, typename BaseA, typename BaseB> struct make_binary3 { typedef typename make_composite <OperationT, actor<BaseA>, actor<BaseB> >::type type; static type construct(actor<BaseA> const& _0, actor<BaseB> const& _1) { typedef typename make_composite <OperationT, actor<BaseA>, actor<BaseB> >::composite_type ret_t; return ret_t(OperationT(), _0, _1); } };} // namespace impl} // namespace phoenix#endif
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?