Add bt_ctf_stream_class_create_empty()
authorPhilippe Proulx <eeppeliteloop@gmail.com>
Tue, 2 May 2017 19:19:20 +0000 (15:19 -0400)
committerJérémie Galarneau <jeremie.galarneau@efficios.com>
Sun, 28 May 2017 16:57:41 +0000 (12:57 -0400)
The new bt_ctf_stream_class_create_empty() function creates a new
stream class object with its packet context, event header, and event
context field types set to empty structure field types.

This is more appropriate for source components which do not need the
default fields that bt_ctf_stream_class_create() creates.
bt_ctf_stream_class_create() is kept as is for backward compatibility
with pre-2.0 CTF writer.

Signed-off-by: Philippe Proulx <eeppeliteloop@gmail.com>
Signed-off-by: Jérémie Galarneau <jeremie.galarneau@efficios.com>
include/babeltrace/ctf-ir/stream-class.h
lib/ctf-ir/stream-class.c

index 63d7e7d02dd3b9cda6ecf38aa493de94b21e23d2..e66ab7da8d235471ab1dfc05fc9d4e992a041814 100644 (file)
@@ -110,7 +110,10 @@ You cannot modify a frozen stream class: it is considered immutable,
 except for:
 
 - Adding an event class to it with
-  bt_ctf_stream_class_add_event_class().
+  bt_ctf_stream_class_add_event_class(). If the stream class's parent
+  \link ctfirtraceclass trace class\endlink is static, however,
+  you cannot call bt_ctf_stream_class_add_event_class()
+  (see bt_ctf_trace_is_static() and bt_ctf_trace_set_is_static()).
 - \link refs Reference counting\endlink.
 
 @sa ctfirstream
@@ -140,6 +143,28 @@ struct bt_ctf_clock;
 @{
 */
 
+/**
+@brief Creates an empty CTF IR stream class named \p name, or an
+       unnamed empty stream class if \p name is \c NULL.
+
+On success, the packet context, event header, and event context field
+types are empty structure field types. You can modify those default
+field types after the stream class is created with
+bt_ctf_stream_class_set_packet_context_type(),
+bt_ctf_stream_class_set_event_header_type(), and
+bt_ctf_stream_class_set_event_context_type().
+
+@param[in] name        Name of the stream class to create (copied on success),
+               or \c NULL to create an unnamed stream class.
+@returns       Created empty stream class, or \c NULL on error.
+
+@postsuccessrefcountret1
+
+@sa bt_ctf_stream_class_create(): Creates a default stream class.
+*/
+extern struct bt_ctf_stream_class *bt_ctf_stream_class_create_empty(
+               const char *name);
+
 /**
 @brief Creates a default CTF IR stream class named \p name­, or a
        default unnamed stream class if \p name is \c NULL.
@@ -163,11 +188,13 @@ You can modify those default field types after the stream class is
 created with bt_ctf_stream_class_set_packet_context_type() and
 bt_ctf_stream_class_set_event_header_type().
 
-@param[in] name        Name of the stream class to create (can be \c NULL to
-               create an unnamed stream class).
-@returns       Created stream class, or \c NULL on error.
+@param[in] name        Name of the stream class to create (copied on success),
+               or \c NULL to create an unnamed stream class.
+@returns       Created default stream class, or \c NULL on error.
 
 @postsuccessrefcountret1
+
+@sa bt_ctf_stream_class_create_empty(): Creates an empty stream class.
 */
 extern struct bt_ctf_stream_class *bt_ctf_stream_class_create(const char *name);
 
index 97b6e6593ab964b06e381eb1a3e21c03fa34d3e1..4da65f329575e220754f4d970bf0b375376037ec 100644 (file)
@@ -56,7 +56,33 @@ int init_packet_context(struct bt_ctf_stream_class *stream_class);
 
 struct bt_ctf_stream_class *bt_ctf_stream_class_create(const char *name)
 {
+       struct bt_ctf_stream_class *stream_class =
+               bt_ctf_stream_class_create_empty(name);
        int ret;
+
+       if (!stream_class) {
+               goto error;
+       }
+
+       ret = init_event_header(stream_class);
+       if (ret) {
+               goto error;
+       }
+
+       ret = init_packet_context(stream_class);
+       if (ret) {
+               goto error;
+       }
+
+       return stream_class;
+
+error:
+       BT_PUT(stream_class);
+       return stream_class;
+}
+
+struct bt_ctf_stream_class *bt_ctf_stream_class_create_empty(const char *name)
+{
        struct bt_ctf_stream_class *stream_class = NULL;
 
        if (name && bt_ctf_validate_identifier(name)) {
@@ -78,13 +104,18 @@ struct bt_ctf_stream_class *bt_ctf_stream_class_create(const char *name)
        stream_class->event_classes_ht = g_hash_table_new_full(g_int64_hash,
                        g_int64_equal, g_free, NULL);
 
-       ret = init_event_header(stream_class);
-       if (ret) {
+       stream_class->packet_context_type = bt_ctf_field_type_structure_create();
+       if (!stream_class->packet_context_type) {
                goto error;
        }
 
-       ret = init_packet_context(stream_class);
-       if (ret) {
+       stream_class->event_header_type = bt_ctf_field_type_structure_create();
+       if (!stream_class->event_header_type) {
+               goto error;
+       }
+
+       stream_class->event_context_type = bt_ctf_field_type_structure_create();
+       if (!stream_class->event_context_type) {
                goto error;
        }
 
@@ -92,7 +123,7 @@ struct bt_ctf_stream_class *bt_ctf_stream_class_create(const char *name)
        return stream_class;
 
 error:
-        BT_PUT(stream_class);
+       BT_PUT(stream_class);
        return stream_class;
 }
 
@@ -828,10 +859,7 @@ int init_event_header(struct bt_ctf_stream_class *stream_class)
                goto end;
        }
 
-       if (stream_class->event_header_type) {
-               bt_put(stream_class->event_header_type);
-       }
-       stream_class->event_header_type = event_header_type;
+       BT_MOVE(stream_class->event_header_type, event_header_type);
 end:
        if (ret) {
                bt_put(event_header_type);
@@ -890,8 +918,7 @@ int init_packet_context(struct bt_ctf_stream_class *stream_class)
                goto end;
        }
 
-       bt_put(stream_class->packet_context_type);
-       stream_class->packet_context_type = packet_context_type;
+       BT_MOVE(stream_class->packet_context_type, packet_context_type);
 end:
        if (ret) {
                bt_put(packet_context_type);
This page took 0.027226 seconds and 4 git commands to generate.