Make API CTF-agnostic
[babeltrace.git] / include / babeltrace / ctf-ir / packet.h
index 72f5068a9d256ba0fbb3987fc94e5abbab1a8126..7ff057f5cf2489f53025ebc3a96697fba4d523a1 100644 (file)
 
 #include <stdint.h>
 
+/* For enum bt_property_availability */
+#include <babeltrace/property.h>
+
+/* For enum bt_clock_value_status */
+#include <babeltrace/ctf-ir/clock-value.h>
+
 #ifdef __cplusplus
 extern "C" {
 #endif
 
-/**
-@defgroup ctfirpacket CTF IR packet
-@ingroup ctfir
-@brief CTF IR packet.
-
-@code
-#include <babeltrace/ctf-ir/packet.h>
-@endcode
-
-A CTF IR <strong><em>packet</em></strong> is a container of packet
-fields, that is, of the <strong>trace packet header</strong> and
-<strong>stream packet context</strong> fields.
-
-As a reminder, here's the structure of a CTF packet:
-
-@imgpacketstructure
-
-You can create a CTF IR packet \em from a
-\link ctfirstream CTF IR stream\endlink with bt_ctf_packet_create(). The
-stream you use to create a packet object becomes its parent.
-
-When you set the trace packet header and stream packet context fields of
-a packet with resp. bt_ctf_packet_set_header() and
-bt_ctf_packet_set_context(), their field type \em must be equivalent to
-the field types returned by resp. bt_ctf_trace_get_packet_header_type()
-and bt_ctf_stream_class_get_packet_context_type() for its parent trace
-class and stream class.
-
-You can attach a packet object to a \link ctfirevent CTF IR
-event\endlink object with bt_ctf_event_set_packet().
-
-As with any Babeltrace object, CTF IR packet 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.
-
-bt_notification_event_create() \em freezes its event parameter on
-success, which in turns freezes the event's associated packet object.
-This is the only way that a CTF IR packet object can be frozen.
-You cannot modify a frozen packet: it is considered immutable,
-except for \link refs reference counting\endlink.
-
-@sa ctfirstream
-@sa ctfirstreamclass
-@sa ctfirtraceclass
-
-@file
-@brief CTF IR packet type and functions.
-@sa ctfirpacket
-
-@addtogroup ctfirpacket
-@{
-*/
-
-/**
-@struct bt_ctf_packet
-@brief A CTF IR packet.
-@sa ctfirpacket
-*/
-struct bt_ctf_packet;
-struct bt_ctf_stream;
-
-/**
-@name Creation and parent access functions
-@{
-*/
-
-/**
-@brief Creates a default CTF IR packet with \p stream as its parent
-       CTF IR stream.
-
-On success, the packet object's trace packet header and stream packet
-context fields are not set. You can set them with resp.
-bt_ctf_packet_set_header() and bt_ctf_packet_set_context().
-
-@param[in] stream      Parent CTF IR stream of the packet to create.
-@returns               Created packet, or \c NULL on error.
-
-@prenotnull{stream}
-@postsuccessrefcountret1
-*/
-extern struct bt_ctf_packet *bt_ctf_packet_create(
-               struct bt_ctf_stream *stream);
-
-/**
-@brief Returns the parent CTF IR stream of the CTF IR packet \p packet.
-
-This function returns a reference to the stream which was used to create
-the packet object in the first place with bt_ctf_packet_create().
-
-@param[in] packet      Packet of which to get the parent stream.
-@returns               Parent stream of \p packet, or \c NULL on error.
-
-@prenotnull{packet}
-@postrefcountsame{packet}
-@postsuccessrefcountretinc
-*/
-extern struct bt_ctf_stream *bt_ctf_packet_get_stream(
-               struct bt_ctf_packet *packet);
-
-/** @} */
-
-/**
-@name Contained fields functions
-@{
-*/
-
-/**
-@brief Returns the trace packet header field of the CTF IR packet
-       \p packet.
-
-@param[in] packet      Packet of which to get the trace packet header
-                       field.
-@returns               Trace packet header field of \p packet,
-                       or \c NULL if the trace packet header
-                       field is not set or on error.
-
-@prenotnull{packet}
-@postrefcountsame{packet}
-@postsuccessrefcountretinc
-
-@sa bt_ctf_packet_set_header(): Sets the trace packet header
-       field of a given packet.
-*/
-extern struct bt_ctf_field *bt_ctf_packet_get_header(
-               struct bt_ctf_packet *packet);
-
-/**
-@brief Sets the trace packet header field of the CTF IR packet \p packet to
-       \p header, or unsets the current trace packet header field from
-       \p packet.
-
-If \p header is not \c NULL, the field type of \p header, as returned by
-bt_ctf_field_get_type(), \em must be equivalent to the field type returned by
-bt_ctf_trace_get_packet_header_type() for the parent trace class of
-\p packet.
-
-@param[in] packet      Packet of which to set the trace packet header field.
-@param[in] header      Trace packet header field.
-@returns               0 on success, or a negative value on error.
-
-@prenotnull{packet}
-@prehot{packet}
-@pre <strong>\p header, if not \c NULL</strong>, has a field type equivalent to
-       the field type returned by bt_ctf_trace_get_packet_header_type() for the
-       parent trace class of \p packet.
-@postrefcountsame{event}
-@post <strong>On success, if \p header is not \c NULL</strong>, the reference
-       count of \p header is incremented.
-
-@sa bt_ctf_packet_get_header(): Returns the trace packet header field of a given
-       packet.
-*/
-extern int bt_ctf_packet_set_header(
-               struct bt_ctf_packet *packet, struct bt_ctf_field *header);
-
-/**
-@brief Returns the stream packet context field of the CTF IR packet
-       \p packet.
-
-@param[in] packet      Packet of which to get the stream packet context
-                       field.
-@returns               Stream packet context field of \p packet,
-                       or \c NULL if the stream packet context
-                       field is not set or on error.
-
-@prenotnull{packet}
-@postrefcountsame{packet}
-@postsuccessrefcountretinc
-
-@sa bt_ctf_packet_set_context(): Sets the stream packet context
-       field of a given packet.
-*/
-extern struct bt_ctf_field *bt_ctf_packet_get_context(
-               struct bt_ctf_packet *packet);
-
-/**
-@brief Sets the stream packet context field of the CTF IR packet \p packet to
-       \p context, or unsets the current packet context field from \p packet.
-
-If \p context is not \c NULL, the field type of \p context, as returned by
-bt_ctf_field_get_type(), \em must be equivalent to the field type returned by
-bt_ctf_stream_class_get_packet_context_type() for the parent stream class of
-\p packet.
-
-@param[in] packet      Packet of which to set the stream packet context field.
-@param[in] context     Stream packet context field.
-@returns               0 on success, or a negative value on error.
-
-@prenotnull{packet}
-@prehot{packet}
-@pre <strong>\p context, if not \c NULL</strong>, has a field type equivalent to
-       the field type returned by bt_ctf_stream_class_get_packet_context_type()
-       for the parent stream class of \p packet.
-@postrefcountsame{packet}
-@post <strong>On success, if \p context is not \c NULL</strong>, the reference
-       count of \p context is incremented.
-
-@sa bt_ctf_packet_get_context(): Returns the stream packet context field of a
-       given packet.
-*/
-extern int bt_ctf_packet_set_context(
-               struct bt_ctf_packet *packet, struct bt_ctf_field *context);
-
-/** @} */
+struct bt_packet;
+struct bt_packet_header_field;
+struct bt_packet_context_field;
+struct bt_stream;
+struct bt_clock_value;
+
+extern struct bt_packet *bt_packet_create(struct bt_stream *stream);
+
+extern struct bt_stream *bt_packet_borrow_stream(struct bt_packet *packet);
+
+extern
+struct bt_field *bt_packet_borrow_header_field(struct bt_packet *packet);
+
+extern
+int bt_packet_move_header_field(struct bt_packet *packet,
+               struct bt_packet_header_field *header);
+
+extern
+struct bt_field *bt_packet_borrow_context_field(struct bt_packet *packet);
+
+extern
+int bt_packet_move_context_field(struct bt_packet *packet,
+               struct bt_packet_context_field *context);
+
+extern
+enum bt_clock_value_status bt_packet_borrow_default_beginning_clock_value(
+               struct bt_packet *packet, struct bt_clock_value **clock_value);
+
+extern
+int bt_packet_set_default_beginning_clock_value(struct bt_packet *packet,
+               uint64_t value_cycles);
+
+extern
+enum bt_clock_value_status bt_packet_borrow_default_end_clock_valeu(
+               struct bt_packet *packet, struct bt_clock_value **clock_value);
+
+extern
+int bt_packet_set_default_end_clock_value(struct bt_packet *packet,
+               uint64_t value_cycles);
+
+extern
+enum bt_property_availability bt_packet_get_discarded_event_counter_snapshot(
+               struct bt_packet *packet, uint64_t *value);
+
+extern
+int bt_packet_set_discarded_event_counter_snapshot(struct bt_packet *packet,
+               uint64_t value);
+
+extern
+enum bt_property_availability bt_packet_get_packet_counter_snapshot(
+               struct bt_packet *packet, uint64_t *value);
+
+extern
+int bt_packet_set_packet_counter_snapshot(struct bt_packet *packet,
+               uint64_t value);
 
 #ifdef __cplusplus
 }
This page took 0.0264 seconds and 4 git commands to generate.