X-Git-Url: http://drtracing.org/?a=blobdiff_plain;f=include%2Fbabeltrace%2Fctf-ir%2Fstream-class-internal.h;h=24c75848370e8c95dce52f3a77f6c66c69bb5694;hb=2a3ced3c38855ea18eb9b29e58563a7301b98216;hp=0a1420d5dee824117427aa7c9a087e471a31aa3e;hpb=adc315b840e3970b9f6e255c91e38ec29f05adab;p=babeltrace.git diff --git a/include/babeltrace/ctf-ir/stream-class-internal.h b/include/babeltrace/ctf-ir/stream-class-internal.h index 0a1420d5..24c75848 100644 --- a/include/babeltrace/ctf-ir/stream-class-internal.h +++ b/include/babeltrace/ctf-ir/stream-class-internal.h @@ -4,7 +4,7 @@ /* * BabelTrace - CTF IR: Stream class internal * - * Copyright 2013 EfficiOS Inc. + * Copyright 2013, 2014 Jérémie Galarneau * * Author: Jérémie Galarneau * @@ -27,45 +27,96 @@ * SOFTWARE. */ -#include #include #include #include +#include +#include #include -#include +#include +#include #include -struct bt_ctf_stream_class { - struct bt_ctf_ref ref_count; +struct bt_stream_class { + struct bt_object base; GString *name; struct bt_ctf_clock *clock; - GPtrArray *event_classes; /* Array of pointers to bt_ctf_event_class */ + GPtrArray *event_classes; /* Array of pointers to bt_event_class */ + /* event class id (int64_t) to event class */ + GHashTable *event_classes_ht; int id_set; - uint32_t id; - uint32_t next_event_id; - uint32_t next_stream_id; - struct bt_ctf_field_type *event_header_type; - struct bt_ctf_field *event_header; - struct bt_ctf_field_type *packet_context_type; - struct bt_ctf_field *packet_context; - struct bt_ctf_field_type *event_context_type; - struct bt_ctf_field *event_context; + int64_t id; + int64_t next_event_id; + int64_t next_stream_id; + struct bt_field_type *packet_context_type; + struct bt_field_type *event_header_type; + struct bt_field_type *event_context_type; int frozen; + int byte_order; + + /* + * This flag indicates if the stream class is valid. A valid + * stream class is _always_ frozen. + */ + int valid; + + /* + * Unique clock class mapped to any field type within this + * stream class, including all the stream class's event class + * field types. This is only set if the stream class is frozen. + * + * If the stream class is frozen and this is still NULL, it is + * still possible that it becomes non-NULL because + * bt_stream_class_add_event_class() can add an event class + * containing a field type mapped to some clock class. In this + * case, this is the mapped clock class, and at this point, both + * the new event class and the stream class are frozen, so the + * next added event classes are expected to contain field types + * which only map to this specific clock class. + * + * If this is a CTF writer stream class, then this is the + * backing clock class of the `clock` member above. + */ + struct bt_clock_class *clock_class; }; BT_HIDDEN -void bt_ctf_stream_class_freeze(struct bt_ctf_stream_class *stream_class); +void bt_stream_class_freeze(struct bt_stream_class *stream_class); + +BT_HIDDEN +int bt_stream_class_serialize(struct bt_stream_class *stream_class, + struct metadata_context *context); BT_HIDDEN -int bt_ctf_stream_class_set_id(struct bt_ctf_stream_class *stream_class, - uint32_t id); +void bt_stream_class_set_byte_order( + struct bt_stream_class *stream_class, int byte_order); +/* Set stream_class id without checking if the stream class is frozen */ BT_HIDDEN -int bt_ctf_stream_class_serialize(struct bt_ctf_stream_class *stream_class, - struct metadata_context *context); +void _bt_stream_class_set_id(struct bt_stream_class *stream_class, + int64_t id); BT_HIDDEN -int bt_ctf_stream_class_set_byte_order(struct bt_ctf_stream_class *stream_class, - enum bt_ctf_byte_order byte_order); +int bt_stream_class_set_id_no_check( + struct bt_stream_class *stream_class, int64_t id); + +BT_HIDDEN +int bt_stream_class_map_clock_class( + struct bt_stream_class *stream_class, + struct bt_field_type *packet_context_type, + struct bt_field_type *event_header_type); + +BT_HIDDEN +int bt_stream_class_validate_single_clock_class( + struct bt_stream_class *stream_class, + struct bt_clock_class **expected_clock_class); + +static inline +struct bt_trace *bt_stream_class_borrow_trace( + struct bt_stream_class *stream_class) +{ + assert(stream_class); + return (void *) bt_object_borrow_parent(stream_class); +} #endif /* BABELTRACE_CTF_IR_STREAM_CLASS_INTERNAL_H */