X-Git-Url: http://git.efficios.com/?p=babeltrace.git;a=blobdiff_plain;f=formats%2Fctf%2Fevents.c;h=27643fcbc61f513ce6d7cc0b021e7d6aea4bd053;hp=5ac74e6e1617cff6961713498d7cb21cff282033;hb=e419579102094d83539d79ce6af83d9786d387ee;hpb=5c5facc70af60670ec8f53b9d90d13722a8477f4 diff --git a/formats/ctf/events.c b/formats/ctf/events.c index 5ac74e6e..27643fcb 100644 --- a/formats/ctf/events.c +++ b/formats/ctf/events.c @@ -23,6 +23,10 @@ #include #include #include +#include +#include +#include +#include #include /* @@ -32,6 +36,58 @@ */ __thread int bt_ctf_last_field_error = 0; +struct bt_ctf_iter *bt_ctf_iter_create(struct bt_context *ctx, + struct bt_iter_pos *begin_pos, + struct bt_iter_pos *end_pos) +{ + struct bt_ctf_iter *iter; + int ret; + + iter = g_new0(struct bt_ctf_iter, 1); + ret = bt_iter_init(&iter->parent, ctx, begin_pos, end_pos); + if (ret) { + g_free(iter); + return NULL; + } + return iter; +} + +void bt_ctf_iter_destroy(struct bt_ctf_iter *iter) +{ + bt_iter_fini(&iter->parent); + g_free(iter); +} + +struct bt_iter *bt_ctf_get_iter(struct bt_ctf_iter *iter) +{ + return &iter->parent; +} + +struct bt_ctf_event *bt_ctf_iter_read_event(struct bt_ctf_iter *iter) +{ + struct ctf_file_stream *file_stream; + struct bt_ctf_event *ret = &iter->current_ctf_event; + + file_stream = heap_maximum(iter->parent.stream_heap); + if (!file_stream) { + /* end of file for all streams */ + goto stop; + } + ret->stream = &file_stream->parent; + ret->event = g_ptr_array_index(ret->stream->events_by_id, + ret->stream->event_id); + + if (ret->stream->stream_id > iter->parent.callbacks->len) + goto end; + + process_callbacks(&iter->parent, ret->stream); + +end: + return ret; +stop: + return NULL; +} + struct definition *bt_ctf_get_top_level_scope(struct bt_ctf_event *event, enum bt_ctf_scope scope) {