X-Git-Url: http://git.efficios.com/?p=babeltrace.git;a=blobdiff_plain;f=include%2Fbabeltrace%2Fctf-ir%2Fevent-class.h;h=8752b406d9dda64368cded8620280d4e676ae39f;hp=12d78015c90be8297fecee8f3f46c4a5f58b492e;hb=44c440bc5fe8219cc17d1b786d91fd83c4c9860a;hpb=c800eb3790218d2f33df01e77ec38cbd43cc02a1 diff --git a/include/babeltrace/ctf-ir/event-class.h b/include/babeltrace/ctf-ir/event-class.h index 12d78015..8752b406 100644 --- a/include/babeltrace/ctf-ir/event-class.h +++ b/include/babeltrace/ctf-ir/event-class.h @@ -30,8 +30,8 @@ * http://www.efficios.com/ctf */ -/* For bt_get() */ -#include +/* For enum bt_property_availability */ +#include #include #include @@ -40,489 +40,70 @@ extern "C" { #endif -struct bt_value; - -/** -@defgroup ctfireventclass CTF IR event class -@ingroup ctfir -@brief CTF IR event class. - -@code -#include -@endcode - -A CTF IR event class is a template that you -can use to create concrete \link ctfirevent CTF IR events\endlink. - -An event class has the following properties: - -- A \b name. -- A numeric \b ID (\em must be unique amongst all the event classes - contained in the same - \link ctfirstreamclass CTF IR stream class\endlink). -- A optional log level. -- An optional Eclipse Modeling Framework URI. - -A CTF IR event class owns two -\link ctfirfieldtypes field types\endlink: - -- An optional event context field type, which - represents the \c event.context CTF scope. -- A mandatory event payload field type, which - represents the \c event.fields CTF scope. - -Both field types \em must be structure field types as of -Babeltrace \btversion. -The event payload field type must not be empty. - -As a reminder, here's the structure of a CTF packet: - -@imgpacketstructure - -In the Babeltrace CTF IR system, a \link ctfirtraceclass trace -class\endlink contains zero or more \link ctfirstreamclass stream -classes\endlink, and a stream class contains zero or more event classes. - -Before you can create an event from an event class with -bt_event_create(), you \em must add the prepared event class to a -stream class by calling bt_stream_class_add_event_class(). This -function, when successful, \em freezes the event class, disallowing any -future modification of its properties and field types by the user. - -As with any Babeltrace object, CTF IR event class objects have -reference -counts. See \ref refs to learn more about the reference counting -management of Babeltrace objects. - -bt_stream_class_add_event_class() \em freezes its event class -parameter on success. You cannot modify a frozen event class: it is -considered immutable, except for \link refs reference counting\endlink. - -@sa ctfirevent -@sa ctfirstreamclass - -@file -@brief CTF IR event class type and functions. -@sa ctfireventclass - -@addtogroup ctfireventclass -@{ -*/ - -/** -@struct bt_event_class -@brief A CTF IR event class. -@sa ctfireventclass -*/ struct bt_event_class; -struct bt_field; struct bt_field_type; struct bt_stream_class; -/** -@brief Log level of an event class. -*/ enum bt_event_class_log_level { - /// Unknown, used for errors. - BT_EVENT_CLASS_LOG_LEVEL_UNKNOWN = -1, - - /// Unspecified log level. - BT_EVENT_CLASS_LOG_LEVEL_UNSPECIFIED = 255, - - /// System is unusable. - BT_EVENT_CLASS_LOG_LEVEL_EMERGENCY = 0, - - /// Action must be taken immediately. - BT_EVENT_CLASS_LOG_LEVEL_ALERT = 1, - - /// Critical conditions. - BT_EVENT_CLASS_LOG_LEVEL_CRITICAL = 2, - - /// Error conditions. - BT_EVENT_CLASS_LOG_LEVEL_ERROR = 3, - - /// Warning conditions. - BT_EVENT_CLASS_LOG_LEVEL_WARNING = 4, - - /// Normal, but significant, condition. - BT_EVENT_CLASS_LOG_LEVEL_NOTICE = 5, - - /// Informational message. - BT_EVENT_CLASS_LOG_LEVEL_INFO = 6, - - /// Debug information with system-level scope (set of programs). - BT_EVENT_CLASS_LOG_LEVEL_DEBUG_SYSTEM = 7, - - /// Debug information with program-level scope (set of processes). - BT_EVENT_CLASS_LOG_LEVEL_DEBUG_PROGRAM = 8, - - /// Debug information with process-level scope (set of modules). - BT_EVENT_CLASS_LOG_LEVEL_DEBUG_PROCESS = 9, - - /// Debug information with module (executable/library) scope (set of units). - BT_EVENT_CLASS_LOG_LEVEL_DEBUG_MODULE = 10, - - /// Debug information with compilation unit scope (set of functions). - BT_EVENT_CLASS_LOG_LEVEL_DEBUG_UNIT = 11, - - /// Debug information with function-level scope. - BT_EVENT_CLASS_LOG_LEVEL_DEBUG_FUNCTION = 12, - - /// Debug information with line-level scope (default log level). - BT_EVENT_CLASS_LOG_LEVEL_DEBUG_LINE = 13, - - /// Debug-level message. - BT_EVENT_CLASS_LOG_LEVEL_DEBUG = 14, + BT_EVENT_CLASS_LOG_LEVEL_EMERGENCY, + BT_EVENT_CLASS_LOG_LEVEL_ALERT, + BT_EVENT_CLASS_LOG_LEVEL_CRITICAL, + BT_EVENT_CLASS_LOG_LEVEL_ERROR, + BT_EVENT_CLASS_LOG_LEVEL_WARNING, + BT_EVENT_CLASS_LOG_LEVEL_NOTICE, + BT_EVENT_CLASS_LOG_LEVEL_INFO, + BT_EVENT_CLASS_LOG_LEVEL_DEBUG_SYSTEM, + BT_EVENT_CLASS_LOG_LEVEL_DEBUG_PROGRAM, + BT_EVENT_CLASS_LOG_LEVEL_DEBUG_PROCESS, + BT_EVENT_CLASS_LOG_LEVEL_DEBUG_MODULE, + BT_EVENT_CLASS_LOG_LEVEL_DEBUG_UNIT, + BT_EVENT_CLASS_LOG_LEVEL_DEBUG_FUNCTION, + BT_EVENT_CLASS_LOG_LEVEL_DEBUG_LINE, + BT_EVENT_CLASS_LOG_LEVEL_DEBUG, }; -/** -@name Creation and parent access functions -@{ -*/ - -/** -@brief Creates a default CTF IR event class named \p name­. - -On success, the context and payload field types are empty structure -field types. You can modify those default field types after the -event class is created with -bt_event_class_set_context_field_type() and -bt_event_class_set_payload_field_type(). - -Upon creation, the event class's ID is not set. You -can set it to a specific value with bt_event_class_set_id(). If it -is still unset when you call bt_stream_class_add_event_class(), then -the stream class assigns a unique ID to this event class before -freezing it. - -The created event class's log level is initially set to -#BT_EVENT_CLASS_LOG_LEVEL_UNSPECIFIED and it has no Eclipse Modeling -Framework URI. +extern struct bt_event_class *bt_event_class_create( + struct bt_stream_class *stream_class); -@param[in] name Name of the event class to create (copied on success). -@returns Created event class, or \c NULL on error. - -@prenotnull{name} -@postsuccessrefcountret1 -*/ -extern struct bt_event_class *bt_event_class_create(const char *name); +extern struct bt_event_class *bt_event_class_create_with_id( + struct bt_stream_class *stream_class, uint64_t id); extern struct bt_stream_class *bt_event_class_borrow_stream_class( struct bt_event_class *event_class); -/** -@brief Returns the parent CTF IR stream class of the CTF IR event - class \p event_class. - -It is possible that the event class was not added to a stream class -yet, in which case this function returns \c NULL. You can add an -event class to a stream class with -bt_stream_class_add_event_class(). - -@param[in] event_class Event class of which to get the parent - stream class. -@returns Parent stream class of \p event_class, - or \c NULL if \p event_class was not - added to a stream class yet or on error. - -@prenotnull{event_class} -@postrefcountsame{event_class} -@postsuccessrefcountretinc - -@sa bt_stream_class_add_event_class(): Add an event class to - a stream class. -*/ -static inline -struct bt_stream_class *bt_event_class_get_stream_class( - struct bt_event_class *event_class) -{ - return bt_get(bt_event_class_borrow_stream_class(event_class)); -} - -/** @} */ - -/** -@name Attribute functions -@{ -*/ - -/** -@brief Returns the name of the CTF IR event class \p event_class. +extern const char *bt_event_class_get_name(struct bt_event_class *event_class); -On success, \p event_class remains the sole owner of the returned -string. - -@param[in] event_class Event class of which to get the name. -@returns Name of event class \p event_class, or - \c NULL on error. - -@prenotnull{event_class} -@postrefcountsame{event_class} -*/ -extern const char *bt_event_class_get_name( - struct bt_event_class *event_class); +extern int bt_event_class_set_name(struct bt_event_class *event_class, + const char *name); -/** -@brief Returns the numeric ID of the CTF IR event class \p event_class. +extern uint64_t bt_event_class_get_id(struct bt_event_class *event_class); -@param[in] event_class Event class of which to get the numeric ID. -@returns ID of event class \p event_class, or a - negative value on error. - -@prenotnull{event_class} -@postrefcountsame{event_class} - -@sa bt_event_class_set_id(): Sets the numeric ID of a given - event class. -*/ -extern int64_t bt_event_class_get_id( - struct bt_event_class *event_class); - -/** -@brief Sets the numeric ID of the CTF IR event class - \p event_class to \p id. - -\p id must be unique amongst the IDs of all the event classes -of the stream class to which you eventually add \p event_class. - -@param[in] event_class Event class of which to set the numeric ID. -@param[in] id ID of the event class. -@returns 0 on success, or a negative value on error. - -@prenotnull{event_class} -@prehot{event_class} -@pre \p id is lesser than or equal to 9223372036854775807 (\c INT64_MAX). -@postrefcountsame{event_class} - -@sa bt_event_class_get_id(): Returns the numeric ID of a given - event class. -*/ -extern int bt_event_class_set_id( - struct bt_event_class *event_class, uint64_t id); - -/** -@brief Returns the log level of the CTF IR event class \p event_class. - -@param[in] event_class Event class of which to get the log level. -@returns Log level of event class \p event_class, - #BT_EVENT_CLASS_LOG_LEVEL_UNSPECIFIED if - not specified, or - #BT_EVENT_CLASS_LOG_LEVEL_UNKNOWN on error. - -@prenotnull{event_class} -@postrefcountsame{event_class} - -@sa bt_event_class_set_log_level(): Sets the log level of a given - event class. -*/ -extern enum bt_event_class_log_level bt_event_class_get_log_level( - struct bt_event_class *event_class); - -/** -@brief Sets the log level of the CTF IR event class - \p event_class to \p log_level. - -@param[in] event_class Event class of which to set the log level. -@param[in] log_level Log level of the event class. -@returns 0 on success, or a negative value on error. - -@prenotnull{event_class} -@prehot{event_class} -@pre \p log_level is #BT_EVENT_CLASS_LOG_LEVEL_UNSPECIFIED, - #BT_EVENT_CLASS_LOG_LEVEL_EMERGENCY, - #BT_EVENT_CLASS_LOG_LEVEL_ALERT, - #BT_EVENT_CLASS_LOG_LEVEL_CRITICAL, - #BT_EVENT_CLASS_LOG_LEVEL_ERROR, - #BT_EVENT_CLASS_LOG_LEVEL_WARNING, - #BT_EVENT_CLASS_LOG_LEVEL_NOTICE, - #BT_EVENT_CLASS_LOG_LEVEL_INFO, - #BT_EVENT_CLASS_LOG_LEVEL_DEBUG_SYSTEM, - #BT_EVENT_CLASS_LOG_LEVEL_DEBUG_PROGRAM, - #BT_EVENT_CLASS_LOG_LEVEL_DEBUG_PROCESS, - #BT_EVENT_CLASS_LOG_LEVEL_DEBUG_MODULE, - #BT_EVENT_CLASS_LOG_LEVEL_DEBUG_UNIT, - #BT_EVENT_CLASS_LOG_LEVEL_DEBUG_FUNCTION, - #BT_EVENT_CLASS_LOG_LEVEL_DEBUG_LINE, or - #BT_EVENT_CLASS_LOG_LEVEL_DEBUG. -@postrefcountsame{event_class} - -@sa bt_event_class_get_log_level(): Returns the log level of a given - event class. -*/ -extern int bt_event_class_set_log_level( +extern enum bt_property_availability bt_event_class_get_log_level( struct bt_event_class *event_class, - enum bt_event_class_log_level log_level); - -/** -@brief Returns the Eclipse Modeling Framework URI of the CTF IR event - class \p event_class. + enum bt_event_class_log_level *log_level); -@param[in] event_class Event class of which to get the - Eclipse Modeling Framework URI. -@returns Eclipse Modeling Framework URI of event - class \p event_class, or \c NULL on error. - -@prenotnull{event_class} -@postrefcountsame{event_class} +extern int bt_event_class_set_log_level(struct bt_event_class *event_class, + enum bt_event_class_log_level log_level); -@sa bt_event_class_set_emf_uri(): Sets the Eclipse Modeling - Framework URI of a given event class. -*/ extern const char *bt_event_class_get_emf_uri( struct bt_event_class *event_class); -/** -@brief Sets the Eclipse Modeling Framework URI of the CTF IR event class - \p event_class to \p emf_uri, or unsets the event class's EMF URI. - -@param[in] event_class Event class of which to set the - Eclipse Modeling Framework URI. -@param[in] emf_uri Eclipse Modeling Framework URI of the - event class (copied on success), or \c NULL - to unset the current EMF URI. -@returns 0 on success, or a negative value if there's - no EMF URI or on error. - -@prenotnull{event_class} -@prenotnull{emf_uri} -@prehot{event_class} -@postrefcountsame{event_class} - -@sa bt_event_class_get_emf_uri(): Returns the Eclipse Modeling - Framework URI of a given event class. -*/ -extern int bt_event_class_set_emf_uri( - struct bt_event_class *event_class, +extern int bt_event_class_set_emf_uri(struct bt_event_class *event_class, const char *emf_uri); -/** @} */ - -/** -@name Contained field types functions -@{ -*/ - -extern struct bt_field_type *bt_event_class_borrow_context_field_type( +extern struct bt_field_type *bt_event_class_borrow_specific_context_field_type( struct bt_event_class *event_class); -/** -@brief Returns the context field type of the CTF IR event class - \p event_class. - -@param[in] event_class Event class of which to get the context field type. -@returns Context field type of \p event_class, or \c NULL if - \p event_class has no context field type or on error. - -@prenotnull{event_class} -@postrefcountsame{event_class} -@post On success, if the return value is a field type, its - reference count is incremented. - -@sa bt_event_class_set_context_field_type(): Sets the context field type of a - given event class. -*/ -static inline -struct bt_field_type *bt_event_class_get_context_field_type( - struct bt_event_class *event_class) -{ - return bt_get(bt_event_class_borrow_context_field_type(event_class)); -} - -/** -@brief Sets the context field type of the CTF IR event class \p event_class to - \p context_type, or unsets the current context field type from - \p event_class. - -If \p context_type is \c NULL, then this function unsets the current context -field type from \p event_class, effectively making \p event_class an event class -without a context field type. - -As of Babeltrace \btversion, if \p context_type is not \c NULL, -\p context_type \em must be a CTF IR structure field type object. - -@param[in] event_class Event class of which to set the context field - type. -@param[in] context_type Context field type, or \c NULL to unset the - current context field type. -@returns 0 on success, or a negative value on error. - -@prenotnull{event_class} -@prehot{event_class} -@pre If \p context_type is not \c NULL, \p context_type is a - CTF IR structure field type. -@postrefcountsame{event_class} -@post On success, if \p context_type is not \c NULL, - the reference count of \p context_type is incremented. - -@sa bt_event_class_get_context_field_type(): Returns the context field type of a - given event class. -*/ -extern int bt_event_class_set_context_field_type( +extern int bt_event_class_set_specific_context_field_type( struct bt_event_class *event_class, - struct bt_field_type *context_type); + struct bt_field_type *field_type); extern struct bt_field_type *bt_event_class_borrow_payload_field_type( struct bt_event_class *event_class); -/** -@brief Returns the payload field type of the CTF IR event class - \p event_class. - -@param[in] event_class Event class of which to get the payload field type. -@returns Payload field type of \p event_class, or \c NULL if - \p event_class has no payload field type or on error. - -@prenotnull{event_class} -@postrefcountsame{event_class} -@post On success, if the return value is a field type, its - reference count is incremented. - -@sa bt_event_class_set_payload_field_type(): Sets the payload field type of a - given event class. -*/ -static inline -struct bt_field_type *bt_event_class_get_payload_field_type( - struct bt_event_class *event_class) -{ - return bt_get(bt_event_class_borrow_payload_field_type(event_class)); -} - -/** -@brief Sets the payload field type of the CTF IR event class \p event_class to - \p payload_type, or unsets the current payload field type from - \p event_class. - -If \p payload_type is \c NULL, then this function unsets the current payload -field type from \p event_class, effectively making \p event_class an event class -without a payload field type. - -As of Babeltrace \btversion, if \p payload_type is not \c NULL, -\p payload_type \em must be a CTF IR structure field type object. - -@param[in] event_class Event class of which to set the payload field - type. -@param[in] payload_type Payload field type, or \c NULL to unset the - current payload field type. -@returns 0 on success, or a negative value on error. - -@prenotnull{event_class} -@prehot{event_class} -@pre If \p payload_type is not \c NULL, \p payload_type is a - CTF IR structure field type. -@postrefcountsame{event_class} -@post On success, if \p payload_type is not \c NULL, - the reference count of \p payload_type is incremented. - -@sa bt_event_class_get_payload_field_type(): Returns the payload field type of a - given event class. -*/ extern int bt_event_class_set_payload_field_type( struct bt_event_class *event_class, - struct bt_field_type *payload_type); - -/** @} */ - -/** @} */ + struct bt_field_type *field_type); #ifdef __cplusplus }