X-Git-Url: http://git.efficios.com/?a=blobdiff_plain;f=include%2Fbabeltrace%2Fctf-ir%2Fstream-internal.h;h=14765f490d27c6c0d4fb007c936faef9ddc1d0fb;hb=3dca22768a95bef664012559aa9ac977091de6ac;hp=0e0e2498b4d43bf40c0303074a16cb845885b060;hpb=0686ef9496b70a2b1e401375ca6ffd529c4b2a34;p=babeltrace.git diff --git a/include/babeltrace/ctf-ir/stream-internal.h b/include/babeltrace/ctf-ir/stream-internal.h index 0e0e2498..14765f49 100644 --- a/include/babeltrace/ctf-ir/stream-internal.h +++ b/include/babeltrace/ctf-ir/stream-internal.h @@ -1,5 +1,5 @@ -#ifndef BABELTRACE_CTF_WRITER_STREAM_INTERNAL_H -#define BABELTRACE_CTF_WRITER_STREAM_INTERNAL_H +#ifndef BABELTRACE_CTF_IR_STREAM_INTERNAL_H +#define BABELTRACE_CTF_IR_STREAM_INTERNAL_H /* * BabelTrace - CTF Writer: Stream internal @@ -27,32 +27,98 @@ * SOFTWARE. */ +#include +#include #include +#include #include -#include -#include -#include #include -#include #include -struct bt_ctf_stream { +struct bt_stream_class; +struct bt_stream_common; + +typedef void (*bt_stream_common_destroy_listener_func)( + struct bt_stream_common *stream, void *data); + +struct bt_stream_common_destroy_listener { + bt_stream_common_destroy_listener_func func; + void *data; +}; + +struct bt_stream_common { struct bt_object base; - uint32_t id; - struct bt_ctf_stream_class *stream_class; + int64_t id; + struct bt_stream_class_common *stream_class; GString *name; - struct bt_ctf_field *packet_header; - struct bt_ctf_field *packet_context; - - /* Writer-specific members. */ - /* Array of pointers to bt_ctf_event for the current packet */ - GPtrArray *events; - struct ctf_stream_pos pos; - unsigned int flushed_packet_count; - uint64_t size; + + /* Array of struct bt_stream_common_destroy_listener */ + GArray *destroy_listeners; }; +struct bt_stream { + struct bt_stream_common common; +}; + +BT_HIDDEN +void bt_stream_common_add_destroy_listener(struct bt_stream_common *stream, + bt_stream_common_destroy_listener_func func, void *data); + +BT_HIDDEN +void bt_stream_common_remove_destroy_listener(struct bt_stream_common *stream, + bt_stream_common_destroy_listener_func func, void *data); + +BT_HIDDEN +int bt_stream_common_initialize( + struct bt_stream_common *stream, + struct bt_stream_class_common *stream_class, const char *name, + uint64_t id, bt_object_release_func release_func); + BT_HIDDEN -int bt_ctf_stream_set_fd(struct bt_ctf_stream *stream, int fd); +void bt_stream_common_finalize(struct bt_stream_common *stream); + +static inline +struct bt_stream_class_common *bt_stream_common_borrow_class( + struct bt_stream_common *stream) +{ + BT_ASSERT(stream); + return stream->stream_class; +} + +static inline +struct bt_stream_class *bt_stream_borrow_class(struct bt_stream *stream) +{ + BT_ASSERT(stream); + return BT_FROM_COMMON(bt_stream_common_borrow_class(BT_TO_COMMON(stream))); +} + +static inline +struct bt_stream_class_common *bt_stream_common_get_class( + struct bt_stream_common *stream) +{ + return bt_get(bt_stream_common_borrow_class(stream)); +} + +static inline +const char *bt_stream_common_get_name(struct bt_stream_common *stream) +{ + BT_ASSERT_PRE_NON_NULL(stream, "Stream"); + return stream->name ? stream->name->str : NULL; +} + +static inline +int64_t bt_stream_common_get_id(struct bt_stream_common *stream) +{ + int64_t ret; + + BT_ASSERT_PRE_NON_NULL(stream, "Stream"); + ret = stream->id; + if (ret < 0) { + BT_LOGV("Stream's ID is not set: addr=%p, name=\"%s\"", + stream, bt_stream_common_get_name(stream)); + } + + return ret; +} -#endif /* BABELTRACE_CTF_WRITER_STREAM_INTERNAL_H */ +#endif /* BABELTRACE_CTF_IR_STREAM_INTERNAL_H */