lib: add internal object pool API and use it; adapt plugins/tests
[babeltrace.git] / include / babeltrace / ctf-ir / stream-class.h
index 2111ca1f8af985edf86ecec35bf23500e5843350..225ea45079a28c4d023194975ea9acc39adb56db 100644 (file)
  */
 
 #include <stdint.h>
+
+/* For bt_get() */
+#include <babeltrace/ref.h>
+
+/* For bt_visitor */
 #include <babeltrace/ctf-ir/visitor.h>
 
 #ifdef __cplusplus
@@ -65,9 +70,9 @@ contains zero or more stream classes,
 and a stream class contains zero or more
 \link ctfireventclass event classes\endlink.
 You can add an event class
-to a stream class with bt_ctf_stream_class_add_event_class().
+to a stream class with bt_stream_class_add_event_class().
 You can add a stream class to a trace class with
-bt_ctf_trace_add_stream_class().
+bt_trace_add_stream_class().
 
 A stream class owns three \link ctfirfieldtypes field types\endlink:
 
@@ -90,8 +95,8 @@ As a reminder, here's the structure of a CTF packet:
 @imgpacketstructure
 
 Before you can create a stream from a stream class with
-bt_ctf_stream_create(), you \em must add the prepared stream class to a
-trace class by calling bt_ctf_trace_add_stream_class().
+bt_stream_create(), you \em must add the prepared stream class to a
+trace class by calling bt_trace_add_stream_class().
 
 As with any Babeltrace object, CTF IR stream class objects have
 <a href="https://en.wikipedia.org/wiki/Reference_counting">reference
@@ -101,16 +106,19 @@ management of Babeltrace objects.
 The following functions \em freeze their stream class parameter on
 success:
 
-- bt_ctf_trace_add_stream_class()
-- bt_ctf_event_create()
-- bt_ctf_writer_create_stream()
+- bt_trace_add_stream_class()
+- bt_event_create()
+- bt_writer_create_stream()
   (\link ctfwriter CTF writer\endlink mode only)
 
 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_stream_class_add_event_class(). If the stream class's parent
+  \link ctfirtraceclass trace class\endlink is static, however,
+  you cannot call bt_stream_class_add_event_class()
+  (see bt_trace_is_static() and bt_trace_set_is_static()).
 - \link refs Reference counting\endlink.
 
 @sa ctfirstream
@@ -127,13 +135,15 @@ except for:
 */
 
 /**
-@struct bt_ctf_stream_class
+@struct bt_stream_class
 @brief A CTF IR stream class.
 @sa ctfirstreamclass
 */
-struct bt_ctf_stream_class;
-struct bt_ctf_event_class;
-struct bt_ctf_clock;
+struct bt_stream_class;
+struct bt_event_class;
+struct bt_clock;
+struct bt_event_header_field;
+struct bt_packet_context_field;
 
 /**
 @name Creation and parent access functions
@@ -160,16 +170,21 @@ has the following fields:
 - <code>timestamp</code>: a 64-bit unsigned integer field type.
 
 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().
+created with bt_stream_class_set_packet_context_field_type() and
+bt_stream_class_set_event_header_field_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_stream_class_create_empty(): Creates an empty stream class.
 */
-extern struct bt_ctf_stream_class *bt_ctf_stream_class_create(const char *name);
+extern struct bt_stream_class *bt_stream_class_create(const char *name);
+
+extern struct bt_trace *bt_stream_class_borrow_trace(
+               struct bt_stream_class *stream_class);
 
 /**
 @brief Returns the parent CTF IR trace class of the CTF IR stream
@@ -178,7 +193,7 @@ extern struct bt_ctf_stream_class *bt_ctf_stream_class_create(const char *name);
 It is possible that the stream class was not added to a trace class
 yet, in which case this function returns \c NULL. You can add a
 stream class to a trace class with
-bt_ctf_trace_add_stream_class().
+bt_trace_add_stream_class().
 
 @param[in] stream_class        Stream class of which to get the parent
                        trace class.
@@ -190,11 +205,15 @@ bt_ctf_trace_add_stream_class().
 @postrefcountsame{stream_class}
 @postsuccessrefcountretinc
 
-@sa bt_ctf_trace_add_stream_class(): Add a stream class to
+@sa bt_trace_add_stream_class(): Add a stream class to
        a trace class.
 */
-extern struct bt_ctf_trace *bt_ctf_stream_class_get_trace(
-               struct bt_ctf_stream_class *stream_class);
+static inline
+struct bt_trace *bt_stream_class_get_trace(
+               struct bt_stream_class *stream_class)
+{
+       return bt_get(bt_stream_class_borrow_trace(stream_class));
+}
 
 /** @} */
 
@@ -217,33 +236,36 @@ string.
 @prenotnull{stream_class}
 @postrefcountsame{stream_class}
 
-@sa bt_ctf_stream_class_set_name(): Sets the name of a given
+@sa bt_stream_class_set_name(): Sets the name of a given
        stream class.
 */
-extern const char *bt_ctf_stream_class_get_name(
-               struct bt_ctf_stream_class *stream_class);
+extern const char *bt_stream_class_get_name(
+               struct bt_stream_class *stream_class);
 
 /**
 @brief Sets the name of the CTF IR stream class
-       \p stream_class to \p name.
+       \p stream_class to \p name, or resets the name of
+       \p stream_class.
 
-\p name must be unique amongst the names of all the stream classes
-of the trace class to which you eventually add \p stream_class.
+If \p name is not \c NULL, it must be unique amongst the names of all
+the stream classes of the trace class to which you eventually add
+\p stream_class.
 
 @param[in] stream_class        Stream class of which to set the name.
-@param[in] name                Name of the stream class (copied on success).
+@param[in] name                Name of the stream class (copied on success), or
+                       \c NULL to reset the name of \p stream_class
+                       (make it unnamed).
 @returns               0 on success, or a negative value on error.
 
 @prenotnull{stream_class}
-@prenotnull{name}
 @prehot{stream_class}
 @postrefcountsame{stream_class}
 
-@sa bt_ctf_stream_class_get_name(): Returns the name of a given
+@sa bt_stream_class_get_name(): Returns the name of a given
        stream class.
 */
-extern int bt_ctf_stream_class_set_name(
-               struct bt_ctf_stream_class *stream_class, const char *name);
+extern int bt_stream_class_set_name(
+               struct bt_stream_class *stream_class, const char *name);
 
 /**
 @brief Returns the numeric ID of the CTF IR stream class \p stream_class.
@@ -255,11 +277,11 @@ extern int bt_ctf_stream_class_set_name(
 @prenotnull{stream_class}
 @postrefcountsame{stream_class}
 
-@sa bt_ctf_stream_class_set_id(): Sets the numeric ID of a given
+@sa bt_stream_class_set_id(): Sets the numeric ID of a given
        stream class.
 */
-extern int64_t bt_ctf_stream_class_get_id(
-               struct bt_ctf_stream_class *stream_class);
+extern int64_t bt_stream_class_get_id(
+               struct bt_stream_class *stream_class);
 
 /**
 @brief Sets the numeric ID of the CTF IR stream class
@@ -274,13 +296,14 @@ of the trace class to which you eventually add \p stream_class.
 
 @prenotnull{stream_class}
 @prehot{stream_class}
+@pre \p id is lesser than or equal to 9223372036854775807 (\c INT64_MAX).
 @postrefcountsame{stream_class}
 
-@sa bt_ctf_stream_class_get_id(): Returns the numeric ID of a given
+@sa bt_stream_class_get_id(): Returns the numeric ID of a given
        stream class.
 */
-extern int bt_ctf_stream_class_set_id(
-               struct bt_ctf_stream_class *stream_class, uint32_t id);
+extern int bt_stream_class_set_id(
+               struct bt_stream_class *stream_class, uint64_t id);
 
 /** @} */
 
@@ -289,6 +312,9 @@ extern int bt_ctf_stream_class_set_id(
 @{
 */
 
+extern struct bt_field_type *bt_stream_class_borrow_packet_context_field_type(
+               struct bt_stream_class *stream_class);
+
 /**
 @brief Returns the packet context field type of the CTF IR stream class
        \p stream_class.
@@ -304,11 +330,20 @@ extern int bt_ctf_stream_class_set_id(
 @post <strong>On success, if the return value is a field type</strong>, its
        reference count is incremented.
 
-@sa bt_ctf_stream_class_set_packet_context_type(): Sets the packet
+@sa bt_stream_class_set_packet_context_field_type(): Sets the packet
        context field type of a given stream class.
 */
-extern struct bt_ctf_field_type *bt_ctf_stream_class_get_packet_context_type(
-               struct bt_ctf_stream_class *stream_class);
+static inline
+struct bt_field_type *bt_stream_class_get_packet_context_field_type(
+               struct bt_stream_class *stream_class)
+{
+       return bt_get(bt_stream_class_borrow_packet_context_field_type(
+               stream_class));
+}
+
+extern
+struct bt_packet_context_field *bt_stream_class_create_packet_context_field(
+               struct bt_stream_class *stream_class);
 
 /**
 @brief Sets the packet context field type of the CTF IR stream class
@@ -336,12 +371,16 @@ As of Babeltrace \btversion, if \p packet_context_type is not \c NULL,
 @post <strong>On success, if \p packet_context_type is not \c NULL</strong>,
        the reference count of \p packet_context_type is incremented.
 
-@sa bt_ctf_stream_class_get_packet_context_type(): Returns the packet
+@sa bt_stream_class_get_packet_context_field_type(): Returns the packet
        context field type of a given stream class.
 */
-extern int bt_ctf_stream_class_set_packet_context_type(
-               struct bt_ctf_stream_class *stream_class,
-               struct bt_ctf_field_type *packet_context_type);
+extern int bt_stream_class_set_packet_context_field_type(
+               struct bt_stream_class *stream_class,
+               struct bt_field_type *packet_context_type);
+
+extern struct bt_field_type *
+bt_stream_class_borrow_event_header_field_type(
+               struct bt_stream_class *stream_class);
 
 /**
 @brief Returns the event header field type of the CTF IR stream class
@@ -358,12 +397,16 @@ extern int bt_ctf_stream_class_set_packet_context_type(
 @post <strong>On success, if the return value is a field type</strong>, its
        reference count is incremented.
 
-@sa bt_ctf_stream_class_set_event_header_type(): Sets the event
+@sa bt_stream_class_set_event_header_field_type(): Sets the event
        header field type of a given stream class.
 */
-extern struct bt_ctf_field_type *
-bt_ctf_stream_class_get_event_header_type(
-               struct bt_ctf_stream_class *stream_class);
+static inline
+struct bt_field_type *bt_stream_class_get_event_header_field_type(
+               struct bt_stream_class *stream_class)
+{
+       return bt_get(bt_stream_class_borrow_event_header_field_type(
+               stream_class));
+}
 
 /**
 @brief Sets the event header field type of the CTF IR stream class
@@ -391,12 +434,19 @@ As of Babeltrace \btversion, if \p event_header_type is not \c NULL,
 @post <strong>On success, if \p event_header_type is not \c NULL</strong>,
        the reference count of \p event_header_type is incremented.
 
-@sa bt_ctf_stream_class_get_event_header_type(): Returns the event
+@sa bt_stream_class_get_event_header_field_type(): Returns the event
        header field type of a given stream class.
 */
-extern int bt_ctf_stream_class_set_event_header_type(
-               struct bt_ctf_stream_class *stream_class,
-               struct bt_ctf_field_type *event_header_type);
+extern int bt_stream_class_set_event_header_field_type(
+               struct bt_stream_class *stream_class,
+               struct bt_field_type *event_header_type);
+
+extern struct bt_event_header_field *bt_stream_class_create_event_header_field(
+               struct bt_stream_class *stream_class);
+
+extern struct bt_field_type *
+bt_stream_class_borrow_event_context_field_type(
+               struct bt_stream_class *stream_class);
 
 /**
 @brief Returns the event context field type of the CTF IR stream class
@@ -414,12 +464,17 @@ extern int bt_ctf_stream_class_set_event_header_type(
        its reference count is incremented.
 
 
-@sa bt_ctf_stream_class_set_event_context_type(): Sets the event
+@sa bt_stream_class_set_event_context_field_type(): Sets the event
        context field type of a given stream class.
 */
-extern struct bt_ctf_field_type *
-bt_ctf_stream_class_get_event_context_type(
-               struct bt_ctf_stream_class *stream_class);
+static inline
+struct bt_field_type *
+bt_stream_class_get_event_context_field_type(
+               struct bt_stream_class *stream_class)
+{
+       return bt_get(bt_stream_class_borrow_event_context_field_type(
+               stream_class));
+}
 
 /**
 @brief Sets the event context field type of the CTF IR stream class
@@ -447,12 +502,12 @@ As of Babeltrace \btversion, if \p event_context_type is not \c NULL,
 @post <strong>On success, if \p event_context_type is not \c NULL</strong>,
        the reference count of \p event_context_type is incremented.
 
-@sa bt_ctf_stream_class_get_event_context_type(): Returns the event context
+@sa bt_stream_class_get_event_context_field_type(): Returns the event context
        field type of a given stream class.
 */
-extern int bt_ctf_stream_class_set_event_context_type(
-               struct bt_ctf_stream_class *stream_class,
-               struct bt_ctf_field_type *event_context_type);
+extern int bt_stream_class_set_event_context_field_type(
+               struct bt_stream_class *stream_class,
+               struct bt_field_type *event_context_type);
 
 /** @} */
 
@@ -474,8 +529,11 @@ extern int bt_ctf_stream_class_set_event_context_type(
 @prenotnull{stream_class}
 @postrefcountsame{stream_class}
 */
-extern int bt_ctf_stream_class_get_event_class_count(
-               struct bt_ctf_stream_class *stream_class);
+extern int64_t bt_stream_class_get_event_class_count(
+               struct bt_stream_class *stream_class);
+
+extern struct bt_event_class *bt_stream_class_borrow_event_class_by_index(
+               struct bt_stream_class *stream_class, uint64_t index);
 
 /**
 @brief  Returns the event class at index \p index in the CTF IR stream
@@ -489,37 +547,23 @@ extern int bt_ctf_stream_class_get_event_class_count(
 @prenotnull{stream_class}
 @pre \p index is lesser than the number of event classes contained in the
        stream class \p stream_class (see
-       bt_ctf_stream_class_get_event_class_count()).
+       bt_stream_class_get_event_class_count()).
 @postrefcountsame{stream_class}
 @postsuccessrefcountretinc
 
-@sa bt_ctf_stream_class_get_event_class_by_id(): Finds an event class
+@sa bt_stream_class_get_event_class_by_id(): Finds an event class
        by ID.
-@sa bt_ctf_stream_class_get_event_class_by_name(): Finds an event class
-       by name.
 */
-extern struct bt_ctf_event_class *bt_ctf_stream_class_get_event_class(
-               struct bt_ctf_stream_class *stream_class, int index);
-
-/**
-@brief  Returns the event class named \c name found in the CTF IR stream
-       class \p stream_class.
-
-@param[in] stream_class        Stream class of which to get the event class.
-@param[in] name                Name of the event class to find.
-@returns               Event class named \p name, or \c NULL
-                       on error.
-
-@prenotnull{stream_class}
-@prenotnull{name}
-@postrefcountsame{stream_class}
-@postsuccessrefcountretinc
+static inline
+struct bt_event_class *bt_stream_class_get_event_class_by_index(
+               struct bt_stream_class *stream_class, uint64_t index)
+{
+       return bt_get(bt_stream_class_borrow_event_class_by_index(stream_class,
+               index));
+}
 
-@sa bt_ctf_stream_class_get_event_class_by_id(): Finds an event class
-       by ID.
-*/
-extern struct bt_ctf_event_class *bt_ctf_stream_class_get_event_class_by_name(
-               struct bt_ctf_stream_class *stream_class, const char *name);
+extern struct bt_event_class *bt_stream_class_borrow_event_class_by_id(
+               struct bt_stream_class *stream_class, uint64_t id);
 
 /**
 @brief  Returns the event class with ID \c id found in the CTF IR stream
@@ -533,12 +577,14 @@ extern struct bt_ctf_event_class *bt_ctf_stream_class_get_event_class_by_name(
 @prenotnull{stream_class}
 @postrefcountsame{stream_class}
 @postsuccessrefcountretinc
-
-@sa bt_ctf_stream_class_get_event_class_by_name(): Finds an event class
-       by name.
 */
-extern struct bt_ctf_event_class *bt_ctf_stream_class_get_event_class_by_id(
-               struct bt_ctf_stream_class *stream_class, uint32_t id);
+static inline
+struct bt_event_class *bt_stream_class_get_event_class_by_id(
+               struct bt_stream_class *stream_class, uint64_t id)
+{
+       return bt_get(bt_stream_class_borrow_event_class_by_id(stream_class,
+               id));
+}
 
 /**
 @brief Adds the CTF IR event class \p event_class to the
@@ -561,10 +607,10 @@ types of \p event_class. If any automatic resolving fails:
   types of \p event_class or \p stream_class, this function fails.
 - If \p stream_class is the child of a
   \link ctfirtraceclass CTF IR trace class\endlink (it was added
-  with bt_ctf_trace_add_stream_class()), this function fails.
+  with bt_trace_add_stream_class()), this function fails.
 - If \p stream_class is not the child of a trace class yet, the
   automatic resolving is reported to the next call to
-  bt_ctf_trace_add_stream_class() with \p stream_class.
+  bt_trace_add_stream_class() with \p stream_class.
 
 @param[in] stream_class        Stream class to which to add \p event_class.
 @param[in] event_class Event class to add to \p stream_class.
@@ -577,9 +623,9 @@ types of \p event_class. If any automatic resolving fails:
 @postsuccessrefcountinc{event_class}
 @postsuccessfrozen{event_class}
 */
-extern int bt_ctf_stream_class_add_event_class(
-               struct bt_ctf_stream_class *stream_class,
-               struct bt_ctf_event_class *event_class);
+extern int bt_stream_class_add_event_class(
+               struct bt_stream_class *stream_class,
+               struct bt_event_class *event_class);
 
 /** @} */
 
@@ -606,8 +652,8 @@ event classes.
 @prenotnull{stream_class}
 @prenotnull{visitor}
 */
-extern int bt_ctf_stream_class_visit(struct bt_ctf_stream_class *stream_class,
-               bt_ctf_visitor visitor, void *data);
+extern int bt_stream_class_visit(struct bt_stream_class *stream_class,
+               bt_visitor visitor, void *data);
 
 /** @} */
 
This page took 0.030306 seconds and 4 git commands to generate.