icfp12/ovm/task.h

29 lines
573 B
C

#ifndef OVM_TASK_H
#define OVM_TASK_H
#include "base.h"
typedef struct {
gdouble scenario;
guint in_size, out_size;
gdouble *in, *out;
} task_t;
typedef void (*task_app_t)(task_t *task);
task_t* task_new(gdouble scenario, guint in_size, guint out_size);
void task_free(task_t *task);
void ovm_init();
void ovm_step(gdouble scenario, gdouble *in, gdouble *out);
static inline gdouble task_run(task_t *task, task_app_t app) {
ovm_init();
while (task->out[0] == 0.0) {
app(task);
ovm_step(task->scenario, task->in, task->out);
}
return task->out[0];
}
#endif