Add bt_ctf_trace_get_stream_count() and bt_ctf_trace_get_stream()
[babeltrace.git] / include / babeltrace / ctf-ir / trace.h
index b2cda19bcf711e505c30edcec253ef7764764059..858d9681624c6311671f4a1cac9068f26b8b5ae4 100644 (file)
@@ -33,7 +33,7 @@
 #include <babeltrace/ctf-ir/field-types.h>
 #include <babeltrace/ctf-ir/visitor.h>
 #include <babeltrace/values.h>
 #include <babeltrace/ctf-ir/field-types.h>
 #include <babeltrace/ctf-ir/visitor.h>
 #include <babeltrace/values.h>
-#include <babeltrace/plugin/notification/notification.h>
+#include <babeltrace/graph/notification.h>
 #include <stdint.h>
 
 #ifdef __cplusplus
 #include <stdint.h>
 
 #ifdef __cplusplus
@@ -45,6 +45,10 @@ extern "C" {
 @ingroup ctfir
 @brief CTF IR trace class.
 
 @ingroup ctfir
 @brief CTF IR trace class.
 
+@code
+#include <babeltrace/ctf-ir/trace.h>
+@endcode
+
 A CTF IR <strong><em>trace class</em></strong> is a descriptor of
 traces.
 
 A CTF IR <strong><em>trace class</em></strong> is a descriptor of
 traces.
 
@@ -59,7 +63,7 @@ A trace class has the following properties:
 
 - A \b name.
 - A <strong>default byte order</strong>: all the
 
 - A \b name.
 - A <strong>default byte order</strong>: all the
-  \link ctfirfieldtype field types\endlink eventually part of the trace
+  \link ctfirfieldtypes field types\endlink eventually part of the trace
   class with a byte order set to #BT_CTF_BYTE_ORDER_NATIVE have this
   "real" byte order.
 - An \b environment, which is a custom key-value mapping. Keys are
   class with a byte order set to #BT_CTF_BYTE_ORDER_NATIVE have this
   "real" byte order.
 - An \b environment, which is a custom key-value mapping. Keys are
@@ -72,6 +76,10 @@ can add an event class to a stream class with
 bt_ctf_stream_class_add_event_class(). You can add a stream class to a
 trace class with bt_ctf_trace_add_stream_class().
 
 bt_ctf_stream_class_add_event_class(). You can add a stream class to a
 trace class with bt_ctf_trace_add_stream_class().
 
+You can access the streams of a trace, that is, the streams which were
+created from the trace's stream classes with bt_ctf_stream_create(),
+with bt_ctf_trace_get_stream().
+
 A trace class owns the <strong>trace packet header</strong>
 \link ctfirfieldtypes field type\endlink, which represents the
 \c trace.packet.header CTF scope. This field type describes the
 A trace class owns the <strong>trace packet header</strong>
 \link ctfirfieldtypes field type\endlink, which represents the
 \c trace.packet.header CTF scope. This field type describes the
@@ -90,12 +98,12 @@ As a reminder, here's the structure of a CTF packet:
 @imgpacketstructure
 
 A trace class also contains zero or more
 @imgpacketstructure
 
 A trace class also contains zero or more
-\link ctfirclockclass clock classes\endlink.
+\link ctfirclockclass CTF IR clock classes\endlink.
 
 @todo
 Elaborate about clock classes irt clock values.
 
 
 @todo
 Elaborate about clock classes irt clock values.
 
-As with any Babeltrace object, CTF IR stream class objects have
+As with any Babeltrace object, CTF IR trace class objects have
 <a href="https://en.wikipedia.org/wiki/Reference_counting">reference
 counts</a>. See \ref refs to learn more about the reference counting
 management of Babeltrace objects.
 <a href="https://en.wikipedia.org/wiki/Reference_counting">reference
 counts</a>. See \ref refs to learn more about the reference counting
 management of Babeltrace objects.
@@ -105,14 +113,14 @@ success:
 
 - bt_ctf_trace_add_stream_class()
 - bt_ctf_writer_create_stream()
 
 - bt_ctf_trace_add_stream_class()
 - bt_ctf_writer_create_stream()
-  (\link ctfirwriter CTF writer\endlink mode only)
+  (\link ctfwriter CTF writer\endlink mode only)
 
 You cannot modify a frozen trace class: it is considered immutable,
 except for:
 
 - Adding a stream class to it with
   bt_ctf_trace_add_stream_class().
 
 You cannot modify a frozen trace class: it is considered immutable,
 except for:
 
 - Adding a stream class to it with
   bt_ctf_trace_add_stream_class().
-- Adding a clock class to it with bt_ctf_trace_add_clock().
+- Adding a CTF IR clock class to it with bt_ctf_trace_add_clock_class().
 - \link refs Reference counting\endlink.
 
 You can add a custom listener with bt_ctf_trace_add_listener() to get
 - \link refs Reference counting\endlink.
 
 You can add a custom listener with bt_ctf_trace_add_listener() to get
@@ -140,7 +148,7 @@ or if a clock class is added.
 struct bt_ctf_trace;
 struct bt_ctf_stream;
 struct bt_ctf_stream_class;
 struct bt_ctf_trace;
 struct bt_ctf_stream;
 struct bt_ctf_stream_class;
-struct bt_ctf_clock;
+struct bt_ctf_clock_class;
 
 /**
 @name Creation function
 
 /**
 @name Creation function
@@ -166,7 +174,7 @@ The created trace class has the following initial properties:
 - <strong>Name</strong>: none. You can set a name
   with bt_ctf_trace_set_name().
 - <strong>Default byte order</strong>: #BT_CTF_BYTE_ORDER_NATIVE. You
 - <strong>Name</strong>: none. You can set a name
   with bt_ctf_trace_set_name().
 - <strong>Default byte order</strong>: #BT_CTF_BYTE_ORDER_NATIVE. You
-  can set a default byte order with bt_ctf_trace_set_byte_order().
+  can set a default byte order with bt_ctf_trace_set_native_byte_order().
 
   Note that you \em must set the default byte order if any field type
   contained in the created trace class, in its stream classes, or in
 
   Note that you \em must set the default byte order if any field type
   contained in the created trace class, in its stream classes, or in
@@ -246,31 +254,31 @@ extern enum bt_ctf_byte_order bt_ctf_trace_get_byte_order(
 
 /**
 @brief Sets the default byte order of the CTF IR trace class
 
 /**
 @brief Sets the default byte order of the CTF IR trace class
-       \p trace_class to \p name.
+       \p trace_class to \p native_byte_order.
 
 
-\p byte_order \em must be one of:
+\p native_byte_order \em must be one of:
 
 - #BT_CTF_BYTE_ORDER_LITTLE_ENDIAN
 - #BT_CTF_BYTE_ORDER_BIG_ENDIAN
 - #BT_CTF_BYTE_ORDER_NETWORK
 
 
 - #BT_CTF_BYTE_ORDER_LITTLE_ENDIAN
 - #BT_CTF_BYTE_ORDER_BIG_ENDIAN
 - #BT_CTF_BYTE_ORDER_NETWORK
 
-@param[in] trace_class Trace class of which to set the default byte
-                       order.
-@param[in] byte_order  Default byte order of the trace class.
-@returns               0 on success, or a negative value on error.
+@param[in] trace_class         Trace class of which to set the default byte
+                               order.
+@param[in] native_byte_order   Default byte order of the trace class.
+@returns                       0 on success, or a negative value on error.
 
 @prenotnull{trace_class}
 @prenotnull{name}
 @prehot{trace_class}
 
 @prenotnull{trace_class}
 @prenotnull{name}
 @prehot{trace_class}
-@pre \p byte_order is either #BT_CTF_BYTE_ORDER_LITTLE_ENDIAN,
+@pre \p native_byte_order is either #BT_CTF_BYTE_ORDER_LITTLE_ENDIAN,
        #BT_CTF_BYTE_ORDER_BIG_ENDIAN, or
        #BT_CTF_BYTE_ORDER_NETWORK.
 @postrefcountsame{trace_class}
 
 @sa bt_ctf_trace_get_name(): Returns the name of a given trace class.
 */
        #BT_CTF_BYTE_ORDER_BIG_ENDIAN, or
        #BT_CTF_BYTE_ORDER_NETWORK.
 @postrefcountsame{trace_class}
 
 @sa bt_ctf_trace_get_name(): Returns the name of a given trace class.
 */
-extern int bt_ctf_trace_set_byte_order(struct bt_ctf_trace *trace_class,
-               enum bt_ctf_byte_order byte_order);
+extern int bt_ctf_trace_set_native_byte_order(struct bt_ctf_trace *trace_class,
+               enum bt_ctf_byte_order native_byte_order);
 
 /**
 @brief Returns the number of entries contained in the environment of
 
 /**
 @brief Returns the number of entries contained in the environment of
@@ -474,10 +482,13 @@ extern int bt_ctf_trace_set_environment_field_string(
 @param[in] trace_class Trace class of which to get the packet
                        header field type.
 @returns               Packet header field type of \p trace_class,
 @param[in] trace_class Trace class of which to get the packet
                        header field type.
 @returns               Packet header field type of \p trace_class,
-                       or \c NULL on error.
+                       or \c NULL if \p trace_class has no packet header field
+                       type or on error.
 
 @prenotnull{trace_class}
 
 @prenotnull{trace_class}
-@postsuccessrefcountretinc
+@postrefcountsame{trace_class}
+@post <strong>On success, if the return value is a field type</strong>, its
+       reference count is incremented.
 
 @sa bt_ctf_trace_set_packet_header_type(): Sets the packet
        header field type of a given trace class.
 
 @sa bt_ctf_trace_set_packet_header_type(): Sets the packet
        header field type of a given trace class.
@@ -487,22 +498,29 @@ extern struct bt_ctf_field_type *bt_ctf_trace_get_packet_header_type(
 
 /**
 @brief Sets the packet header field type of the CTF IR trace class
 
 /**
 @brief Sets the packet header field type of the CTF IR trace class
-       \p trace_class to \p packet_context_type.
+       \p trace_class to \p packet_header_type, or unsets the current packet
+       header field type from \p trace_class.
+
+If \p packet_header_type is \c NULL, then this function unsets the current
+packet header field type from \p trace_class, effectively making \p trace_class
+a trace without a packet header field type.
 
 
-As of Babeltrace \btversion, \p packet_context_type \em must be a
-CTF IR structure field type object.
+As of Babeltrace \btversion, if \p packet_header_type is not \c NULL,
+\p packet_header_type \em must be a CTF IR structure field type object.
 
 @param[in] trace_class         Trace class of which to set the packet
                                header field type.
 
 @param[in] trace_class         Trace class of which to set the packet
                                header field type.
-@param[in] packet_header_type  Packet header field type.
+@param[in] packet_header_type  Packet header field type, or \c NULL to unset
+                               the current packet header field type.
 @returns                       0 on success, or a negative value on error.
 
 @prenotnull{trace_class}
 @returns                       0 on success, or a negative value on error.
 
 @prenotnull{trace_class}
-@prenotnull{packet_header_type}
 @prehot{trace_class}
 @prehot{trace_class}
-@preisstructft{packet_header_type}
+@pre <strong>\p packet_header_type, if not \c NULL</strong>, is a CTF IR
+       structure field type.
 @postrefcountsame{trace_class}
 @postrefcountsame{trace_class}
-@postsuccessrefcountinc{packet_header_type}
+@post <strong>On success, if \p packet_header_type is not \c NULL</strong>,
+       the reference count of \p packet_header_type is incremented.
 
 @sa bt_ctf_trace_get_packet_header_type(): Returns the packet
        header field type of a given trace class.
 
 @sa bt_ctf_trace_get_packet_header_type(): Returns the packet
        header field type of a given trace class.
@@ -513,75 +531,80 @@ extern int bt_ctf_trace_set_packet_header_type(struct bt_ctf_trace *trace_class,
 /** @} */
 
 /**
 /** @} */
 
 /**
-@name Clock class children functions
+@name Contained clock classes functions
 @{
 */
 
 /**
 @{
 */
 
 /**
-@brief Returns the number of clock classes contained in the
+@brief Returns the number of CTF IR clock classes contained in the
        CTF IR trace class \p trace_class.
 
 @param[in] trace_class Trace class of which to get the number
        CTF IR trace class \p trace_class.
 
 @param[in] trace_class Trace class of which to get the number
-                       of children clock classes.
-@returns               Number of children clock classes
+                       of contained clock classes.
+@returns               Number of contained clock classes
                        contained in \p trace_class, or a negative
                        value on error.
 
 @prenotnull{trace_class}
 @postrefcountsame{trace_class}
 */
                        contained in \p trace_class, or a negative
                        value on error.
 
 @prenotnull{trace_class}
 @postrefcountsame{trace_class}
 */
-extern int bt_ctf_trace_get_clock_count(struct bt_ctf_trace *trace_class);
+extern int bt_ctf_trace_get_clock_class_count(struct bt_ctf_trace *trace_class);
 
 /**
 
 /**
-@brief  Returns the clock class at index \p index in the CTF IR trace
-       class \p trace_class.
+@brief  Returns the CTF IR clock class at index \p index in the CTF
+       IR trace class \p trace_class.
 
 
-@param[in] trace_class Trace class of which to get the clock class.
-@param[in] index       Index of the clock class to find.
-@returns               Clock class at index \p index, or \c NULL
-                       on error.
+@param[in] trace_class Trace class of which to get the clock class
+                       contained at index \p index.
+@param[in] index       Index of the clock class to find in
+                       \p trace_class.
+@returns               Clock class at index \p index in \p trace_class,
+                       or \c NULL on error.
 
 @prenotnull{trace_class}
 @pre \p index is lesser than the number of clock classes contained in
        the trace class \p trace_class (see
 
 @prenotnull{trace_class}
 @pre \p index is lesser than the number of clock classes contained in
        the trace class \p trace_class (see
-       bt_ctf_trace_get_clock_count()).
+       bt_ctf_trace_get_clock_class_count()).
 @postrefcountsame{trace_class}
 @postsuccessrefcountretinc
 
 @postrefcountsame{trace_class}
 @postsuccessrefcountretinc
 
-@sa bt_ctf_trace_get_clock_by_name(): Finds a clock class by name.
-@sa bt_ctf_trace_add_clock(): Adds a clock class to a trace class.
+@sa bt_ctf_trace_get_clock_class_by_name(): Finds a clock class by name
+       in a given trace class.
+@sa bt_ctf_trace_add_clock_class(): Adds a clock class to a trace class.
 */
 */
-extern struct bt_ctf_clock *bt_ctf_trace_get_clock(
+extern struct bt_ctf_clock_class *bt_ctf_trace_get_clock_class(
                struct bt_ctf_trace *trace_class, int index);
 
 /**
                struct bt_ctf_trace *trace_class, int index);
 
 /**
-@brief  Returns the clock class named \c name found in the CTF IR trace
-       class \p trace_class.
+@brief  Returns the CTF IR clock class named \c name found in the CTF
+       IR trace class \p trace_class.
 
 
-@param[in] trace_class Trace class of which to get the clock class.
-@param[in] name                Name of the clock class to find.
-@returns               Clock class named \p name, or \c NULL
-                       on error.
+@param[in] trace_class Trace class of which to get the clock class
+                       named \p name.
+@param[in] name                Name of the clock class to find in \p trace_class.
+@returns               Clock class named \p name in \p trace_class,
+                       or \c NULL on error.
 
 @prenotnull{trace_class}
 @prenotnull{name}
 @postrefcountsame{trace_class}
 @postsuccessrefcountretinc
 
 
 @prenotnull{trace_class}
 @prenotnull{name}
 @postrefcountsame{trace_class}
 @postsuccessrefcountretinc
 
-@sa bt_ctf_trace_get_clock(): Returns the clock class contained in a
-       given trace class at a given index.
-@sa bt_ctf_trace_add_clock(): Adds a clock class to a trace class.
+@sa bt_ctf_trace_get_clock_class(): Returns the clock class contained
+       in a given trace class at a given index.
+@sa bt_ctf_trace_add_clock_class(): Adds a clock class to a trace class.
 */
 */
-extern struct bt_ctf_clock *bt_ctf_trace_get_clock_by_name(
+extern struct bt_ctf_clock_class *bt_ctf_trace_get_clock_class_by_name(
                struct bt_ctf_trace *trace_class, const char *name);
 
 /**
 @brief Adds the CTF IR clock class \p clock_class to the CTF IR
        trace class \p trace_class.
 
                struct bt_ctf_trace *trace_class, const char *name);
 
 /**
 @brief Adds the CTF IR clock class \p clock_class to the CTF IR
        trace class \p trace_class.
 
-On success, \p clock_class becomes the child of \p trace_class.
+On success, \p trace_class contains \p clock_class.
 
 
-You can call this function even if \p trace_class is frozen.
+You can call this function even if \p trace_class or \p clock_class
+are frozen.
 
 @param[in] trace_class Trace class to which to add \p clock_class.
 @param[in] clock_class Clock class to add to \p trace_class.
 
 @param[in] trace_class Trace class to which to add \p clock_class.
 @param[in] clock_class Clock class to add to \p trace_class.
@@ -591,13 +614,16 @@ You can call this function even if \p trace_class is frozen.
 @prenotnull{clock_class}
 @postrefcountsame{trace_class}
 @postsuccessrefcountinc{clock_class}
 @prenotnull{clock_class}
 @postrefcountsame{trace_class}
 @postsuccessrefcountinc{clock_class}
+@post <strong>On success, if \p trace_class is frozen</strong>,
+       \p clock_class is frozen.
 
 
-@sa bt_ctf_trace_get_clock(): Returns the clock class contained in a
-       given trace class at a given index.
-@sa bt_ctf_trace_get_clock_by_name(): Finds a clock class by name.
+@sa bt_ctf_trace_get_clock_class(): Returns the clock class contained
+       in a given trace class at a given index.
+@sa bt_ctf_trace_get_clock_class_by_name(): Finds a clock class by name
+       in a given trace class.
 */
 */
-extern int bt_ctf_trace_add_clock(struct bt_ctf_trace *trace_class,
-               struct bt_ctf_clock *clock_class);
+extern int bt_ctf_trace_add_clock_class(struct bt_ctf_trace *trace_class,
+               struct bt_ctf_clock_class *clock_class);
 
 /** @} */
 
 
 /** @} */
 
@@ -635,7 +661,6 @@ extern int bt_ctf_trace_get_stream_class_count(struct bt_ctf_trace *trace_class)
        the trace class \p trace_class (see
        bt_ctf_trace_get_stream_class_count()).
 @postrefcountsame{trace_class}
        the trace class \p trace_class (see
        bt_ctf_trace_get_stream_class_count()).
 @postrefcountsame{trace_class}
-@postsuccessrefcountretinc
 
 @sa bt_ctf_trace_get_stream_class_by_id(): Finds a stream class by ID.
 @sa bt_ctf_trace_add_stream_class(): Adds a stream class to a trace class.
 
 @sa bt_ctf_trace_get_stream_class_by_id(): Finds a stream class by ID.
 @sa bt_ctf_trace_add_stream_class(): Adds a stream class to a trace class.
@@ -656,8 +681,8 @@ extern struct bt_ctf_stream_class *bt_ctf_trace_get_stream_class(
 @postrefcountsame{trace_class}
 @postsuccessrefcountretinc
 
 @postrefcountsame{trace_class}
 @postsuccessrefcountretinc
 
-@sa bt_ctf_trace_get_clock(): Returns the stream class contained in a
-       given trace class at a given index.
+@sa bt_ctf_trace_get_stream_class(): Returns the stream class contained
+       in a given trace class at a given index.
 @sa bt_ctf_trace_add_stream_class(): Adds a stream class to a trace class.
 */
 extern struct bt_ctf_stream_class *bt_ctf_trace_get_stream_class_by_id(
 @sa bt_ctf_trace_add_stream_class(): Adds a stream class to a trace class.
 */
 extern struct bt_ctf_stream_class *bt_ctf_trace_get_stream_class_by_id(
@@ -673,6 +698,13 @@ You can only add a given stream class to one trace class.
 
 You can call this function even if \p trace_class is frozen.
 
 
 You can call this function even if \p trace_class is frozen.
 
+This function tries to resolve the needed
+\link ctfirfieldtypes CTF IR field type\endlink of the dynamic field
+types that are found anywhere in the root field types of
+\p stream_class and of all its currently contained
+\link ctfireventclass CTF IR event classes\endlink. If any automatic
+resolving fails, then this function fails.
+
 @param[in] trace_class Trace class to which to add \p stream_class.
 @param[in] stream_class        Stream class to add to \p trace_class.
 @returns               0 on success, or a negative value on error.
 @param[in] trace_class Trace class to which to add \p stream_class.
 @param[in] stream_class        Stream class to add to \p trace_class.
 @returns               0 on success, or a negative value on error.
@@ -681,9 +713,10 @@ You can call this function even if \p trace_class is frozen.
 @prenotnull{stream_class}
 @postrefcountsame{trace_class}
 @postsuccessrefcountinc{stream_class}
 @prenotnull{stream_class}
 @postrefcountsame{trace_class}
 @postsuccessrefcountinc{stream_class}
+@postsuccessfrozen{stream_class}
 
 
-@sa bt_ctf_trace_get_clock(): Returns the stream class contained in a
-       given trace class at a given index.
+@sa bt_ctf_trace_get_stream_class(): Returns the stream class contained
+       in a given trace class at a given index.
 @sa bt_ctf_trace_get_stream_class_by_id(): Finds a stream class by ID.
 */
 extern int bt_ctf_trace_add_stream_class(struct bt_ctf_trace *trace_class,
 @sa bt_ctf_trace_get_stream_class_by_id(): Finds a stream class by ID.
 */
 extern int bt_ctf_trace_add_stream_class(struct bt_ctf_trace *trace_class,
@@ -692,40 +725,49 @@ extern int bt_ctf_trace_add_stream_class(struct bt_ctf_trace *trace_class,
 /** @} */
 
 /**
 /** @} */
 
 /**
-@name Misc. functions
+@name Stream children functions
 @{
 */
 
 /**
 @{
 */
 
 /**
-@brief User function type to use with bt_ctf_trace_add_listener().
+@brief  Returns the number of streams contained in the CTF IR trace
+       class \p trace_class.
 
 
-@param[in] element     New element which is part of the trace class
-                       hierarchy.
-@param[in] data                User data.
+@param[in] trace_class Trace class of which to get the number
+                       of children streams.
+@returns               Number of children streams
+                       contained in \p trace_class, or a negative
+                       value on error.
 
 
-@prenotnull{element}
+@prenotnull{trace_class}
+@postrefcountsame{trace_class}
 */
 */
-typedef void (*bt_ctf_listener_cb)(
-               struct bt_ctf_ir_element *element, void *data);
+extern int bt_ctf_trace_get_stream_count(struct bt_ctf_trace *trace_class);
 
 /**
 
 /**
-@brief Adds the trace class modification listener \p listener to
-       the CTF IR trace class \p trace_class.
-
-Once you add \p listener to \p trace_class, whenever \p trace_class
-is modified, \p listener is called with the new element and with
-\p data (user data).
+@brief  Returns the stream at index \p index in the CTF IR trace
+       class \p trace_class.
 
 
-@param[in] trace_class Trace class to which to add \p listener.
-@param[in] listener    Modification listener function.
-@param[in] data                User data.
-@returns               0 on success, or a negative value on error.
+@param[in] trace_class Trace class of which to get the stream.
+@param[in] index       Index of the stream to find.
+@returns               Stream at index \p index, or \c NULL
+                       on error.
 
 @prenotnull{trace_class}
 
 @prenotnull{trace_class}
-@prenotnull{listener}
+@pre \p index is lesser than the number of streams contained in
+       the trace class \p trace_class (see
+       bt_ctf_trace_get_stream_count()).
+@postrefcountsame{trace_class}
+*/
+extern struct bt_ctf_stream *bt_ctf_trace_get_stream(
+               struct bt_ctf_trace *trace_class, int index);
+
+/** @} */
+
+/**
+@name Misc. functions
+@{
 */
 */
-extern int bt_ctf_trace_add_listener(struct bt_ctf_trace *trace_class,
-               bt_ctf_listener_cb listener, void *data);
 
 /**
 @brief Accepts the visitor \p visitor to visit the hierarchy of the
 
 /**
 @brief Accepts the visitor \p visitor to visit the hierarchy of the
@@ -746,7 +788,9 @@ class, the stream class itself, and all its children event classes.
 @prenotnull{visitor}
 */
 extern int bt_ctf_trace_visit(struct bt_ctf_trace *trace_class,
 @prenotnull{visitor}
 */
 extern int bt_ctf_trace_visit(struct bt_ctf_trace *trace_class,
-               bt_ctf_ir_visitor visitor, void *data);
+               bt_ctf_visitor visitor, void *data);
+
+/** @} */
 
 /** @} */
 
 
 /** @} */
 
This page took 0.029387 seconds and 4 git commands to generate.