2009-06-26 21:13:17 +00:00
|
|
|
#ifndef OVM_TASK_H
|
|
|
|
#define OVM_TASK_H
|
|
|
|
|
|
|
|
#include "base.h"
|
|
|
|
|
|
|
|
typedef struct {
|
|
|
|
gdouble scenario;
|
2009-06-26 21:58:27 +00:00
|
|
|
guint64 timestamp;
|
2009-06-26 21:13:17 +00:00
|
|
|
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();
|
2009-06-26 21:58:27 +00:00
|
|
|
for ( ; task->out[0] == 0.0 && task->timestamp < 3000000; task->timestamp++) {
|
2009-06-26 21:13:17 +00:00
|
|
|
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
|