#include "node_accumulator.h"
#include <stdlib.h>

struct accum_state {
    double accumulated;
};

static void accum_nodes(void *state, const double* params, const double *inputs, double *outputs) {
    struct accum_state* my_state = (struct accum_state*)state;
    my_state->accumulated += inputs[ACCUM_IN];
    outputs[ACCUMULATED] = my_state->accumulated;
}

static void reset(void *state) {
    ((struct accum_state*)state)->accumulated = 0;
}


static const char* const in_names[2] = {"Accumulator in"};
static const char* const out_names[1] = {"Accumulated"};
static const char* const param_names[0] = {};
const struct graph_node_type node_accum_type = {
        .input_names = in_names,
        .output_names = out_names,
        .param_names = param_names,
        .n_inputs = 1,
        .n_outputs = 1,
        .n_params = 0,
        .execute = accum_nodes,
        .reset = reset,
        .state_size = sizeof(struct accum_state),
        .type_id = BLOCK_ACCUMULATE
};