19#ifdef PYSTON_GRAPH_FUNCTION_IMPL
23template <
typename R,
size_t N,
typename... Evaluated>
24struct FunctionEvalHelper {
25 template <
typename Functor,
typename ChildrenSet>
26 static R eval(
const Context& context,
const Arguments& args,
const Functor& functor,
const ChildrenSet& children,
27 Evaluated&&... evaluated) {
28 auto&& a = std::get<N - 1>(children)->eval(context, args);
29 return FunctionEvalHelper<R, N - 1,
decltype(a), Evaluated...>::eval(
34template <
typename R,
typename... Evaluated>
35struct FunctionEvalHelper<R, 0, Evaluated...> {
36 template <
typename Functor,
typename ChildrenSet>
37 static R eval(
const Context& context,
const Arguments&,
const Functor& functor,
const ChildrenSet&,
38 Evaluated&&... evaluated) {
44struct FunctionVisitHelper {
45 template <
typename ChildrenSet>
46 static void visit(Visitor& visitor,
const ChildrenSet& children) {
47 FunctionVisitHelper<N - 1>::visit(visitor, children);
48 std::get<N - 1>(children)->visit(visitor);
53struct FunctionVisitHelper<0> {
54 template <
typename ChildrenSet>
55 static void visit(Visitor&,
const ChildrenSet&) {}
58template <
typename R,
typename... Args>
60 return FunctionEvalHelper<R,
sizeof...(Args)>::eval(context, args, m_functor, m_children);
63template <
typename R,
typename... Args>
66 FunctionVisitHelper<
sizeof...(Args)>::visit(visitor, m_children);
R eval(const Context &context, const Arguments &args) const final
void visit(Visitor &visitor) const final
std::map< std::string, boost::any > Context
std::vector< Value > Arguments