futhark-0.25.15: rts/c/event_list.h
// Start of event_list.h
typedef int (*event_report_fn)(struct str_builder*, void*);
struct event {
void* data;
event_report_fn f;
const char* name;
char *description;
};
struct event_list {
struct event *events;
int num_events;
int capacity;
};
static void event_list_init(struct event_list *l) {
l->capacity = 100;
l->num_events = 0;
l->events = calloc(l->capacity, sizeof(struct event));
}
static void event_list_free(struct event_list *l) {
free(l->events);
}
static void add_event_to_list(struct event_list *l,
const char* name,
char* description,
void* data,
event_report_fn f) {
if (l->num_events == l->capacity) {
l->capacity *= 2;
l->events = realloc(l->events, l->capacity * sizeof(struct event));
}
l->events[l->num_events].name = name;
l->events[l->num_events].description = description;
l->events[l->num_events].data = data;
l->events[l->num_events].f = f;
l->num_events++;
}
static int report_events_in_list(struct event_list *l,
struct str_builder* sb) {
int ret = 0;
for (int i = 0; i < l->num_events; i++) {
if (i != 0) {
str_builder_str(sb, ",");
}
str_builder_str(sb, "{\"name\":");
str_builder_json_str(sb, l->events[i].name);
str_builder_str(sb, ",\"description\":");
str_builder_json_str(sb, l->events[i].description);
free(l->events[i].description);
if (l->events[i].f(sb, l->events[i].data) != 0) {
ret = 1;
break;
}
str_builder(sb, "}");
}
event_list_free(l);
event_list_init(l);
return ret;
}
// End of event_list.h