/** @mainpage Welcome! Welcome to the Babeltrace \btversion C API documentation! Babeltrace is an open source converter of trace formats. You can use its C API to write custom source, sink, and filter \link btcomponents component classes\endlink which you can package as user \link btplugins plugins\endlink. @section intro What's this API for? The goal of using this API is to create user \link btplugins plugins\endlink. A Babeltrace plugin contains one or more \link btcomponents component classes\endlink. A component class is either: - A \b source component class: creates producers of trace events. - A \b sink component class: creates consumers of trace events. - A \b filter component class: creates components which are both a producers and consumers of trace events. A program or library can instantiate as many concrete \em components as needed from a single component class. At component instantiation time, the component class's registered user initialization function is called with custom user parameters. Plugins, as of Babeltrace \btversion, are built as dynamic libraries (.so or .dll files) and loaded by the \c babeltrace converter program. You can also get plugin objects from a shared object file or from a directory containing shared object files thanks to the C API. The converter program is responsible for passing notifications and events from source components to filter components, if any, and from filter components to sink components. @image html babeltrace-cli.png @section mainpagectfir CTF IR The internal representations of a trace, a stream, and an event follow the Common Trace Format model. Within the Babeltrace C API, this representation is called the Common Trace Format Intermediate Representation, or \link ctfir CTF IR\endlink. CTF IR is flexible enough to represent almost any trace or logging format. The CTF IR model contains the following objects, amongst others: - A \link ctfirfieldtypes field type\endlink is the type of concrete \link ctfirfields fields\endlink. For example, an integer field type contains the size (in bits) of the integer fields it creates, as well as their byte order, whether or not they are signed, and so on. An integer field that you create out of an integer field type, however, only contains a raw integral value. You can create many fields from a single field type. - An \link ctfireventclass event class\endlink is the type of a concrete \link ctfirevent event\endlink. An event class contains the field types of its various scopes, while an event contains the actual fields holding their values. - A \link ctfirstreamclass stream class\endlink is the type of a concrete \link ctfirstream stream\endlink. A stream class contains the field types of its various scopes, while \link ctfirpacket packets\endlink attached to a \link ctfirstream stream\endlink instantiated from a stream class contains the actual fields holding their values.

A stream class is the parent of one or more event classes. - A \link ctfirtraceclass trace class\endlink describes traces. A trace class is the parent of one or more stream classes. - A \link ctfirclockclass clock class\endlink holds the common properties of clock values that are instantiated in \link ctfirevent events\endlink. @section mainpagevalues Value objects Some parts of the Babeltrace API require typical, generic scalar values (boolean, integer, floating point number, string) organized in compound objects (array, map). This is similar to the model that JSON offers. For example, the environment of a \link ctfirtraceclass CTF IR trace class\endlink maps strings to strings or to integers, and the parameters passed to component instances take the form of a map. For this purpose, the API uses \link values value objects\endlink. @section mainpageref Reference counting All the Babeltrace objects have a reference count to make them shareable. When you use a Babeltrace object creation function (for example, bt_value_bool_create()), you get a new reference to the created object. When you add this object to another one, the latter takes its own reference using bt_get(), incrementing the shared object's reference count. When you are done with an object, you must call bt_put() to drop your reference, decrementing its reference count. When an object's reference count reaches 0, the object is considered \em destroyed and cannot be used anymore. See \ref refs for more details. The postconditions of the functions and macros documented here indicate what you can expect from the reference counts of the Babeltrace objects passed as parameters to and returned from API functions. @section mainpagefreeze Frozen objects The Babeltrace library can \em freeze almost all of the Babeltrace objects. A frozen object is considered \em immutable, although you can still get and put references to this object. The preconditions of the functions and macros documented here indicate when they expect unfrozen objects. The postconditions indicate when the functions and macros freeze an object. */