icfp12/ovm/task.h

29 lines
573 B
C
Raw Normal View History

2009-06-26 21:13:17 +00:00
#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);
2009-06-26 21:23:39 +00:00
static inline gdouble task_run(task_t *task, task_app_t app) {
2009-06-26 21:13:17 +00:00
ovm_init();
while (task->out[0] == 0.0) {
app(task);
ovm_step(task->scenario, task->in, task->out);
}
2009-06-26 21:23:39 +00:00
return task->out[0];
2009-06-26 21:13:17 +00:00
}
#endif