void connection::create_aggregate_reduce(const char *name, Result zero, const std::function<Result (Result, Args...)> &aggregator) { const std::function<Result (Result, Args...)> a(aggregator); create_aggregate(name, zero, [a](Result &state, Args... args) { state = a(std::forward<Result&>(state), std::forward<Args...>(args...)); }, [](const Result &state) -> Result { return state; } ); }
void connection::create_aggregate(const char *name, State zero, StepCallable stepfun, FinalCallable finalfun) { create_aggregate(name, std::forward<State>(zero), to_stdfunction(std::forward<StepCallable>(stepfun)), to_stdfunction(std::forward<FinalCallable>(finalfun))); }
serf_bucket_t *serf_bucket_aggregate_create( serf_bucket_alloc_t *allocator) { aggregate_context_t *ctx; ctx = create_aggregate(allocator); return serf_bucket_create(&serf_bucket_type_aggregate, allocator, ctx); }
void serf_bucket_aggregate_become(serf_bucket_t *bucket) { aggregate_context_t *ctx; ctx = create_aggregate(bucket->allocator); bucket->type = &serf_bucket_type_aggregate; bucket->data = ctx; /* The allocator remains the same. */ }
/** The main program */ int main(int argc, char **argv) { /* Name of the agg directory */ char *directory = NULL; int err; if(argc < 2) { usage(argv[0]); } directory = argv[1]; err = create_aggregate(directory); /* end of program */ if(!err) { fprintf(stdout, "Aggregate created\n"); } else { fprintf(stderr, "An error occured : %d\n", err); return err; } return EXIT_SUCCESS; }
void connection::create_aggregate(const std::string &name, State &&zero, StepCallable &&step_fun) { create_aggregate(name.c_str(), std::forward<State>(zero), std::forward<StepCallable>(step_fun)); }