📄 composite.hpp
字号:
///////////////////////////////////////////////////////////////////////////////
template <typename OperationT, typename TupleT,
typename A, typename B, typename C, typename D>
struct composite4_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
>::type type;
};
//////////////////////////////////
template <typename OperationT,
typename A, typename B, typename C, typename D>
struct composite<OperationT,
A, B, C, D, nil_t, nil_t,
#if PHOENIX_LIMIT > 6
nil_t, nil_t, nil_t,
#if PHOENIX_LIMIT > 9
nil_t, nil_t, nil_t,
#if PHOENIX_LIMIT > 12
nil_t, nil_t, nil_t,
#endif
#endif
#endif
nil_t // Unused
> {
typedef composite<OperationT, A, B, C, D> self_t;
template <typename TupleT>
struct result {
typedef typename composite4_result<
OperationT, TupleT, A, B, C, D
>::type type;
};
composite(OperationT const& op_,
A const& a_, B const& b_, C const& c_, D const& d_)
: op(op_), a(a_), b(b_), c(c_), d(d_) {}
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);
return op(ra, rb, rc, rd);
}
mutable OperationT op; // operation
A a; B b; C c; D d; // actors
};
///////////////////////////////////////////////////////////////////////////////
//
// composite <5 actors> class
//
///////////////////////////////////////////////////////////////////////////////
template <typename OperationT, typename TupleT,
typename A, typename B, typename C, typename D, typename E>
struct composite5_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
>::type type;
};
//////////////////////////////////
template <typename OperationT,
typename A, typename B, typename C, typename D, typename E>
struct composite<OperationT,
A, B, C, D, E, nil_t,
#if PHOENIX_LIMIT > 6
nil_t, nil_t, nil_t,
#if PHOENIX_LIMIT > 9
nil_t, nil_t, nil_t,
#if PHOENIX_LIMIT > 12
nil_t, nil_t, nil_t,
#endif
#endif
#endif
nil_t // Unused
> {
typedef composite<OperationT, A, B, C, D, E> self_t;
template <typename TupleT>
struct result {
typedef typename composite5_result<
OperationT, TupleT, A, B, C, D, E
>::type type;
};
composite(OperationT const& op_,
A const& a_, B const& b_, C const& c_, D const& d_, E const& e_)
: op(op_), a(a_), b(b_), c(c_), d(d_), e(e_) {}
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);
return op(ra, rb, rc, rd, re);
}
mutable OperationT op; // operation
A a; B b; C c; D d; E e; // actors
};
///////////////////////////////////////////////////////////////////////////////
//
// composite <6 actors> class
//
///////////////////////////////////////////////////////////////////////////////
template <typename OperationT, typename TupleT,
typename A, typename B, typename C, typename D, typename E,
typename F>
struct composite6_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
>::type type;
};
//////////////////////////////////
template <typename OperationT,
typename A, typename B, typename C, typename D, typename E,
typename F>
struct composite<OperationT,
A, B, C, D, E, F,
#if PHOENIX_LIMIT > 6
nil_t, nil_t, nil_t,
#if PHOENIX_LIMIT > 9
nil_t, nil_t, nil_t,
#if PHOENIX_LIMIT > 12
nil_t, nil_t, nil_t,
#endif
#endif
#endif
nil_t // Unused
> {
typedef composite<OperationT, A, B, C, D, E, F> self_t;
template <typename TupleT>
struct result {
typedef typename composite6_result<
OperationT, TupleT, A, B, C, D, E, F
>::type type;
};
composite(OperationT const& op_,
A const& a_, B const& b_, C const& c_, D const& d_, E const& e_,
F const& f_)
: op(op_), a(a_), b(b_), c(c_), d(d_), e(e_),
f(f_) {}
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);
return op(ra, rb, rc, rd, re, rf);
}
mutable OperationT op; // operation
A a; B b; C c; D d; E e; F f; // actors
};
#if PHOENIX_LIMIT > 6
///////////////////////////////////////////////////////////////////////////////
//
// composite <7 actors> class
//
///////////////////////////////////////////////////////////////////////////////
template <typename OperationT, typename TupleT,
typename A, typename B, typename C, typename D, typename E,
typename F, typename G>
struct composite7_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
>::type type;
};
//////////////////////////////////
template <typename OperationT,
typename A, typename B, typename C, typename D, typename E,
typename F, typename G>
struct composite<OperationT,
A, B, C, D, E, F, G, nil_t, nil_t,
#if PHOENIX_LIMIT > 9
nil_t, nil_t, nil_t,
#if PHOENIX_LIMIT > 12
nil_t, nil_t, nil_t,
#endif
#endif
nil_t // Unused
> {
typedef composite<OperationT, A, B, C, D, E, F, G> self_t;
template <typename TupleT>
struct result {
typedef typename composite7_result<
OperationT, TupleT, A, B, C, D, E, F, G
>::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_)
: op(op_), a(a_), b(b_), c(c_), d(d_), e(e_),
f(f_), g(g_) {}
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);
return op(ra, rb, rc, rd, re, rf, rg);
}
mutable OperationT op; // operation
A a; B b; C c; D d; E e; F f; G g; // actors
};
///////////////////////////////////////////////////////////////////////////////
//
// composite <8 actors> class
//
///////////////////////////////////////////////////////////////////////////////
template <typename OperationT, typename TupleT,
typename A, typename B, typename C, typename D, typename E,
typename F, typename G, typename H>
struct composite8_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
>::type type;
};
//////////////////////////////////
template <typename OperationT,
typename A, typename B, typename C, typename D, typename E,
typename F, typename G, typename H>
struct composite<OperationT,
A, B, C, D, E, F, G, H, nil_t,
#if PHOENIX_LIMIT > 9
nil_t, nil_t, nil_t,
#if PHOENIX_LIMIT > 12
nil_t, nil_t, nil_t,
#endif
#endif
nil_t // Unused
> {
typedef composite<OperationT, A, B, C, D, E, F, G, H> self_t;
template <typename TupleT>
struct result {
typedef typename composite8_result<
OperationT, TupleT, A, B, C, D, E, F, G, H
>::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_)
: op(op_), a(a_), b(b_), c(c_), d(d_), e(e_),
f(f_), g(g_), h(h_) {}
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);
return op(ra, rb, rc, rd, re, rf, rg, rh);
}
mutable OperationT op; // operation
A a; B b; C c; D d; E e; F f; G g; H h; // actors
};
///////////////////////////////////////////////////////////////////////////////
//
// composite <9 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>
struct composite9_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,
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -