X-Git-Url: http://git.efficios.com/?a=blobdiff_plain;f=lib%2Fctf-ir%2Ftrace.c;h=067e7db903d0937d494f6aecaa909270313bf06d;hb=5acf2ae6bdfb2bc6fa88e250a87ccc6ba3546d89;hp=90432dbac36273de8e896f428aa5e614f79bb6a7;hpb=1487a16a42ca7be6b85ef210644d9ac398d7c0dd;p=babeltrace.git diff --git a/lib/ctf-ir/trace.c b/lib/ctf-ir/trace.c index 90432dba..067e7db9 100644 --- a/lib/ctf-ir/trace.c +++ b/lib/ctf-ir/trace.c @@ -40,11 +40,10 @@ #include #include #include -#include -#include +#include #include #include -#include +#include #include #define DEFAULT_IDENTIFIER_SIZE 128 @@ -89,7 +88,7 @@ struct bt_ctf_trace *bt_ctf_trace_create(void) goto error; } - bt_ctf_trace_set_byte_order(trace, BT_CTF_BYTE_ORDER_NATIVE); + trace->native_byte_order = BT_CTF_BYTE_ORDER_NATIVE; bt_object_init(trace, bt_ctf_trace_destroy); trace->clocks = g_ptr_array_new_with_free_func( (GDestroyNotify) bt_put); @@ -389,16 +388,15 @@ int bt_ctf_trace_add_clock_class(struct bt_ctf_trace *trace, struct bt_ctf_clock_class *clock_class) { int ret = 0; - struct search_query query = { .value = clock_class, .found = 0 }; - if (!trace || !bt_ctf_clock_class_is_valid(clock_class)) { + if (!trace || trace->is_static || + !bt_ctf_clock_class_is_valid(clock_class)) { ret = -1; goto end; } /* Check for duplicate clock classes */ - g_ptr_array_foreach(trace->clocks, value_exists, &query); - if (query.found) { + if (bt_ctf_trace_has_clock_class(trace, clock_class)) { ret = -1; goto end; } @@ -460,7 +458,16 @@ int bt_ctf_trace_add_stream_class(struct bt_ctf_trace *trace, int event_class_count; struct bt_ctf_trace *current_parent_trace = NULL; - if (!trace || !stream_class) { + if (!trace || !stream_class || trace->is_static) { + ret = -1; + goto end; + } + + /* + * At the end of this function we freeze the trace, so its + * native byte order must NOT be BT_CTF_BYTE_ORDER_NATIVE. + */ + if (trace->native_byte_order == BT_CTF_BYTE_ORDER_NATIVE) { ret = -1; goto end; } @@ -709,6 +716,36 @@ end: return ret; } +int bt_ctf_trace_get_stream_count(struct bt_ctf_trace *trace) +{ + int ret; + + if (!trace) { + ret = -1; + goto end; + } + + ret = trace->streams->len; + +end: + return ret; +} + +struct bt_ctf_stream *bt_ctf_trace_get_stream(struct bt_ctf_trace *trace, + int index) +{ + struct bt_ctf_stream *stream = NULL; + + if (!trace || index >= trace->streams->len) { + goto end; + } + + stream = bt_get(g_ptr_array_index(trace->streams, index)); + +end: + return stream; +} + int bt_ctf_trace_get_stream_class_count(struct bt_ctf_trace *trace) { int ret; @@ -796,6 +833,19 @@ end: return clock_class; } +BT_HIDDEN +bool bt_ctf_trace_has_clock_class(struct bt_ctf_trace *trace, + struct bt_ctf_clock_class *clock_class) +{ + struct search_query query = { .value = clock_class, .found = 0 }; + + assert(trace); + assert(clock_class); + + g_ptr_array_foreach(trace->clocks, value_exists, &query); + return query.found; +} + BT_HIDDEN const char *get_byte_order_string(enum bt_ctf_byte_order byte_order) { @@ -995,7 +1045,7 @@ end: return ret; } -int bt_ctf_trace_set_byte_order(struct bt_ctf_trace *trace, +int bt_ctf_trace_set_native_byte_order(struct bt_ctf_trace *trace, enum bt_ctf_byte_order byte_order) { int ret = 0; @@ -1251,3 +1301,33 @@ end: bt_put(trace_packet_header_type); return ret; } + +bool bt_ctf_trace_is_static(struct bt_ctf_trace *trace) +{ + bool is_static = false; + + if (!trace) { + goto end; + } + + is_static = trace->is_static; + +end: + return is_static; +} + +int bt_ctf_trace_set_is_static(struct bt_ctf_trace *trace) +{ + int ret = 0; + + if (!trace) { + ret = -1; + goto end; + } + + trace->is_static = true; + bt_ctf_trace_freeze(trace); + +end: + return ret; +}