+@note
+ @parblock
+ The <code>BT_PLUGIN_*_COMPONENT_CLASS_WITH_ID()</code> macros
+ specify the ID of the plugin to which to add the component class.
+
+ If you use the BT_PLUGIN() macro to define your plugin, then its
+ ID is <code>auto</code>:
+
+ @code
+ BT_PLUGIN_SOURCE_COMPONENT_CLASS_WITH_ID(auto, my_comp_class_id,
+ "my-source", my_source_iter_next);
+ @endcode
+ @endparblock
+
+Then, use the <code>BT_PLUGIN_*_COMPONENT_CLASS_*_WITH_ID()</code>
+macros to refer to this specific component class, for example:
+
+@code
+BT_PLUGIN_SOURCE_COMPONENT_CLASS_FINALIZE_METHOD_WITH_ID(my_plugin_id,
+ my_comp_class_id, my_source_finalize);
+@endcode
+*/
+
+/*! @{ */
+
+/*!
+@name Type
+@{
+
+@typedef struct bt_self_plugin bt_self_plugin;
+
+@brief
+ Self plugin.
+
+@}
+*/
+
+/*!
+@name Plugin module
+@{
+*/
+
+/*!
+@brief
+ Defines a plugin module.
+
+In a plugin define C file, you must use this macro before you use any
+other <code>BT_PLUGIN*()</code> macro.
+*/
+#define BT_PLUGIN_MODULE() \
+ static struct __bt_plugin_descriptor const * const __bt_plugin_descriptor_dummy __BT_PLUGIN_DESCRIPTOR_ATTRS = NULL; \
+ _BT_HIDDEN extern struct __bt_plugin_descriptor const *__BT_PLUGIN_DESCRIPTOR_BEGIN_SYMBOL __BT_PLUGIN_DESCRIPTOR_BEGIN_EXTRA; \
+ _BT_HIDDEN extern struct __bt_plugin_descriptor const *__BT_PLUGIN_DESCRIPTOR_END_SYMBOL __BT_PLUGIN_DESCRIPTOR_END_EXTRA; \
+ \
+ static struct __bt_plugin_descriptor_attribute const * const __bt_plugin_descriptor_attribute_dummy __BT_PLUGIN_DESCRIPTOR_ATTRIBUTES_ATTRS = NULL; \
+ _BT_HIDDEN extern struct __bt_plugin_descriptor_attribute const *__BT_PLUGIN_DESCRIPTOR_ATTRIBUTES_BEGIN_SYMBOL __BT_PLUGIN_DESCRIPTOR_ATTRIBUTES_BEGIN_EXTRA; \
+ _BT_HIDDEN extern struct __bt_plugin_descriptor_attribute const *__BT_PLUGIN_DESCRIPTOR_ATTRIBUTES_END_SYMBOL __BT_PLUGIN_DESCRIPTOR_ATTRIBUTES_END_EXTRA; \
+ \
+ static struct __bt_plugin_component_class_descriptor const * const __bt_plugin_component_class_descriptor_dummy __BT_PLUGIN_COMPONENT_CLASS_DESCRIPTOR_ATTRS = NULL; \
+ _BT_HIDDEN extern struct __bt_plugin_component_class_descriptor const *__BT_PLUGIN_COMPONENT_CLASS_DESCRIPTOR_BEGIN_SYMBOL __BT_PLUGIN_COMPONENT_CLASS_DESCRIPTOR_BEGIN_EXTRA; \
+ _BT_HIDDEN extern struct __bt_plugin_component_class_descriptor const *__BT_PLUGIN_COMPONENT_CLASS_DESCRIPTOR_END_SYMBOL __BT_PLUGIN_COMPONENT_CLASS_DESCRIPTOR_END_EXTRA; \
+ \
+ static struct __bt_plugin_component_class_descriptor_attribute const * const __bt_plugin_component_class_descriptor_attribute_dummy __BT_PLUGIN_COMPONENT_CLASS_DESCRIPTOR_ATTRIBUTES_ATTRS = NULL; \
+ _BT_HIDDEN extern struct __bt_plugin_component_class_descriptor_attribute const *__BT_PLUGIN_COMPONENT_CLASS_DESCRIPTOR_ATTRIBUTES_BEGIN_SYMBOL __BT_PLUGIN_COMPONENT_CLASS_DESCRIPTOR_ATTRIBUTES_BEGIN_EXTRA; \
+ _BT_HIDDEN extern struct __bt_plugin_component_class_descriptor_attribute const *__BT_PLUGIN_COMPONENT_CLASS_DESCRIPTOR_ATTRIBUTES_END_SYMBOL __BT_PLUGIN_COMPONENT_CLASS_DESCRIPTOR_ATTRIBUTES_END_EXTRA; \
+ \
+ struct __bt_plugin_descriptor const * const *__bt_get_begin_section_plugin_descriptors(void) \
+ { \
+ return &__BT_PLUGIN_DESCRIPTOR_BEGIN_SYMBOL; \
+ } \
+ struct __bt_plugin_descriptor const * const *__bt_get_end_section_plugin_descriptors(void) \
+ { \
+ return &__BT_PLUGIN_DESCRIPTOR_END_SYMBOL; \
+ } \
+ struct __bt_plugin_descriptor_attribute const * const *__bt_get_begin_section_plugin_descriptor_attributes(void) \
+ { \
+ return &__BT_PLUGIN_DESCRIPTOR_ATTRIBUTES_BEGIN_SYMBOL; \
+ } \
+ struct __bt_plugin_descriptor_attribute const * const *__bt_get_end_section_plugin_descriptor_attributes(void) \
+ { \
+ return &__BT_PLUGIN_DESCRIPTOR_ATTRIBUTES_END_SYMBOL; \
+ } \
+ struct __bt_plugin_component_class_descriptor const * const *__bt_get_begin_section_component_class_descriptors(void) \
+ { \
+ return &__BT_PLUGIN_COMPONENT_CLASS_DESCRIPTOR_BEGIN_SYMBOL; \
+ } \
+ struct __bt_plugin_component_class_descriptor const * const *__bt_get_end_section_component_class_descriptors(void) \
+ { \
+ return &__BT_PLUGIN_COMPONENT_CLASS_DESCRIPTOR_END_SYMBOL; \
+ } \
+ struct __bt_plugin_component_class_descriptor_attribute const * const *__bt_get_begin_section_component_class_descriptor_attributes(void) \
+ { \
+ return &__BT_PLUGIN_COMPONENT_CLASS_DESCRIPTOR_ATTRIBUTES_BEGIN_SYMBOL; \
+ } \
+ struct __bt_plugin_component_class_descriptor_attribute const * const *__bt_get_end_section_component_class_descriptor_attributes(void) \
+ { \
+ return &__BT_PLUGIN_COMPONENT_CLASS_DESCRIPTOR_ATTRIBUTES_END_SYMBOL; \
+ }
+
+/*! @} */
+
+/*!
+@name Plugin definition
+@{
+*/
+
+/*!
+@brief
+ Defines a plugin named \bt_p{_name} and having the ID \bt_p{_id}.
+
+@param[in] _id
+ @parblock
+ C identifier.
+
+ Plugin's ID, unique amongst all the plugin IDs of the same shared
+ object.
+ @endparblock
+@param[in] _name
+ @parblock
+ <code>const char *</code>
+
+ Plugin's name.
+ @endparblock
+
+@bt_pre_not_null{_name}
+*/
+#define BT_PLUGIN_WITH_ID(_id, _name) \
+ struct __bt_plugin_descriptor __bt_plugin_descriptor_##_id = { \
+ .name = _name, \
+ }; \
+ static struct __bt_plugin_descriptor const * const __bt_plugin_descriptor_##_id##_ptr __BT_PLUGIN_DESCRIPTOR_ATTRS = &__bt_plugin_descriptor_##_id
+
+/*!
+@brief
+ Alias of BT_PLUGIN_WITH_ID() with the \bt_p{_id} parameter set to
+ <code>auto</code>.
+*/
+#define BT_PLUGIN(_name) static BT_PLUGIN_WITH_ID(auto, #_name)
+
+/*! @} */
+
+/*!
+@name Plugin properties
+@{
+*/
+
+/*!
+@brief
+ Sets the description of the plugin having the ID \bt_p{_id} to
+ \bt_p{_description}.
+
+See the \ref api-comp-cls-prop-descr "description" property.
+
+@param[in] _id
+ @parblock
+ C identifier.
+
+ ID of the plugin of which to set the description.
+ @endparblock
+@param[in] _description
+ @parblock
+ <code>const char *</code>
+
+ Plugin's description.
+ @endparblock
+
+@bt_pre_not_null{_description}
+*/
+#define BT_PLUGIN_DESCRIPTION_WITH_ID(_id, _description) \
+ __BT_PLUGIN_DESCRIPTOR_ATTRIBUTE(description, BT_PLUGIN_DESCRIPTOR_ATTRIBUTE_TYPE_DESCRIPTION, _id, _description)
+
+/*!
+@brief
+ Alias of BT_PLUGIN_DESCRIPTION_WITH_ID() with the \bt_p{_id}
+ parameter set to <code>auto</code>.
+*/
+#define BT_PLUGIN_DESCRIPTION(_description) BT_PLUGIN_DESCRIPTION_WITH_ID(auto, _description)
+
+/*!
+@brief
+ Sets the name(s) of the author(s) of the plugin having the ID
+ \bt_p{_id} to \bt_p{_author}.
+
+See the \ref api-plugin-prop-author "author name(s)" property.
+
+@param[in] _id
+ @parblock
+ C identifier.
+
+ ID of the plugin of which to set the author(s).
+ @endparblock
+@param[in] _author
+ @parblock
+ <code>const char *</code>
+
+ Plugin's author(s).
+ @endparblock
+
+@bt_pre_not_null{_author}
+*/
+#define BT_PLUGIN_AUTHOR_WITH_ID(_id, _author) \
+ __BT_PLUGIN_DESCRIPTOR_ATTRIBUTE(author, BT_PLUGIN_DESCRIPTOR_ATTRIBUTE_TYPE_AUTHOR, _id, _author)
+
+/*!
+@brief
+ Alias of BT_PLUGIN_AUTHOR_WITH_ID() with the \bt_p{_id}
+ parameter set to <code>auto</code>.
+*/
+#define BT_PLUGIN_AUTHOR(_author) BT_PLUGIN_AUTHOR_WITH_ID(auto, _author)
+
+/*!
+@brief
+ Sets the license (name or full) of the plugin having the ID
+ \bt_p{_id} to \bt_p{_license}.
+
+See the \ref api-plugin-prop-license "license" property.
+
+@param[in] _id
+ @parblock
+ C identifier.
+
+ ID of the plugin of which to set the license.
+ @endparblock
+@param[in] _license
+ @parblock
+ <code>const char *</code>
+
+ Plugin's license.
+ @endparblock
+
+@bt_pre_not_null{_license}
+*/
+#define BT_PLUGIN_LICENSE_WITH_ID(_id, _license) \
+ __BT_PLUGIN_DESCRIPTOR_ATTRIBUTE(license, BT_PLUGIN_DESCRIPTOR_ATTRIBUTE_TYPE_LICENSE, _id, _license)
+
+/*!
+@brief
+ Alias of BT_PLUGIN_LICENSE_WITH_ID() with the \bt_p{_id}
+ parameter set to <code>auto</code>.
+*/
+#define BT_PLUGIN_LICENSE(_license) BT_PLUGIN_LICENSE_WITH_ID(auto, _license)
+
+/*!
+@brief
+ Sets the version of the plugin having the ID \bt_p{_id} to
+ \bt_p{_version}.
+
+See the \ref api-plugin-prop-version "version" property.
+
+@param[in] _id
+ @parblock
+ C identifier.
+
+ ID of the plugin of which to set the version.
+ @endparblock
+@param[in] _major
+ @parblock
+ <code>unsigned int</code>
+
+ Plugin's major version.
+ @endparblock
+@param[in] _minor
+ @parblock
+ <code>unsigned int</code>
+
+ Plugin's minor version.
+ @endparblock
+@param[in] _patch
+ @parblock
+ <code>unsigned int</code>
+
+ Plugin's patch version.
+ @endparblock
+@param[in] _extra
+ @parblock
+ <code>const char *</code>
+
+ Plugin's version's extra information.
+
+ Can be \c NULL if the plugin's version has no extra information.
+ @endparblock
+*/
+#define BT_PLUGIN_VERSION_WITH_ID(_id, _major, _minor, _patch, _extra) \
+ __BT_PLUGIN_DESCRIPTOR_ATTRIBUTE(version, BT_PLUGIN_DESCRIPTOR_ATTRIBUTE_TYPE_VERSION, _id, __BT_PLUGIN_VERSION_STRUCT_VALUE(_major, _minor, _patch, _extra))
+
+/*!
+@brief
+ Alias of BT_PLUGIN_VERSION_WITH_ID() with the \bt_p{_id}
+ parameter set to <code>auto</code>.
+*/
+#define BT_PLUGIN_VERSION(_major, _minor, _patch, _extra) BT_PLUGIN_VERSION_WITH_ID(auto, _major, _minor, _patch, _extra)
+
+/*! @} */
+
+/*!
+@name Plugin functions
+@{
+*/
+
+/*!
+@brief
+ Status codes for #bt_plugin_initialize_func.
+*/
+typedef enum bt_plugin_initialize_func_status {
+ /*!
+ @brief
+ Success.
+ */
+ BT_PLUGIN_INITIALIZE_FUNC_STATUS_OK = __BT_FUNC_STATUS_OK,
+
+ /*!
+ @brief
+ Out of memory.
+ */
+ BT_PLUGIN_INITIALIZE_FUNC_STATUS_MEMORY_ERROR = __BT_FUNC_STATUS_MEMORY_ERROR,
+
+ /*!
+ @brief
+ Error.
+ */
+ BT_PLUGIN_INITIALIZE_FUNC_STATUS_ERROR = __BT_FUNC_STATUS_ERROR,
+} bt_plugin_initialize_func_status;
+
+/*!
+@brief
+ User plugin initialization function.
+
+@param[in] self_plugin
+ @parblock
+ Plugin instance.
+
+ This parameter is a private view of the \bt_plugin object for
+ this function.
+
+ As of \bt_name_version_min_maj, there's no self plugin API.
+ @endparblock
+
+@retval #BT_PLUGIN_INITIALIZE_FUNC_STATUS_OK
+ Success.
+@retval #BT_PLUGIN_INITIALIZE_FUNC_STATUS_MEMORY_ERROR
+ Out of memory.
+@retval #BT_PLUGIN_INITIALIZE_FUNC_STATUS_ERROR
+ Error.
+
+@bt_pre_not_null{self_plugin}
+*/
+typedef bt_plugin_initialize_func_status (*bt_plugin_initialize_func)(
+ bt_self_plugin *self_plugin);
+
+/*!
+@brief
+ Sets the initialization function of the plugin having the ID
+ \bt_p{_id} to \bt_p{_func}.
+
+@param[in] _id
+ @parblock
+ C identifier.
+
+ ID of the plugin of which to set the initialization function.
+ @endparblock
+@param[in] _func
+ @parblock
+ #bt_plugin_initialize_func
+
+ Plugin's initialization function.
+ @endparblock
+
+@bt_pre_not_null{_func}
+*/
+#define BT_PLUGIN_INITIALIZE_FUNC_WITH_ID(_id, _func) \
+ __BT_PLUGIN_DESCRIPTOR_ATTRIBUTE(init, BT_PLUGIN_DESCRIPTOR_ATTRIBUTE_TYPE_INIT, _id, _func)
+
+/*!
+@brief
+ Alias of BT_PLUGIN_INITIALIZE_FUNC_WITH_ID() with the \bt_p{_id}
+ parameter set to <code>auto</code>.
+*/
+#define BT_PLUGIN_INITIALIZE_FUNC(_func) BT_PLUGIN_INITIALIZE_FUNC_WITH_ID(auto, _func)
+
+/*!
+@brief
+ User plugin finalization function.
+*/
+typedef void (*bt_plugin_finalize_func)(void);
+
+/*!
+@brief
+ Sets the finalization function of the plugin having the ID
+ \bt_p{_id} to \bt_p{_func}.
+
+@param[in] _id
+ @parblock
+ C identifier.
+
+ ID of the plugin of which to set the finalization function.
+ @endparblock
+@param[in] _func
+ @parblock
+ #bt_plugin_finalize_func
+
+ Plugin's finalization function.
+ @endparblock
+
+@bt_pre_not_null{_func}
+*/
+#define BT_PLUGIN_FINALIZE_FUNC_WITH_ID(_id, _func) \
+ __BT_PLUGIN_DESCRIPTOR_ATTRIBUTE(exit, BT_PLUGIN_DESCRIPTOR_ATTRIBUTE_TYPE_EXIT, _id, _func)
+
+/*!
+@brief
+ Alias of BT_PLUGIN_FINALIZE_FUNC_WITH_ID() with the \bt_p{_id}
+ parameter set to <code>auto</code>.
+*/
+#define BT_PLUGIN_FINALIZE_FUNC(_func) BT_PLUGIN_FINALIZE_FUNC_WITH_ID(auto, _func)
+
+/*! @} */
+
+/*!
+@name Component class adding
+@{
+*/
+
+/*!
+@brief
+ Adds a \bt_src_comp_cls named \bt_p{_name}, having the ID
+ \bt_p{_component_class_id} and the message iterator class's "next"
+ method \bt_p{_message_iterator_class_next_method}, to the plugin
+ having the ID \bt_p{_plugin_id}.
+
+@param[in] _plugin_id
+ @parblock
+ C identifier.
+
+ ID of the plugin to which to add the source component class.
+ @endparblock
+@param[in] _component_class_id
+ @parblock
+ C identifier.
+
+ Source component class's ID, unique amongst all the source component
+ class IDs of the same plugin.
+ @endparblock
+@param[in] _name
+ @parblock
+ <code>const char *</code>
+
+ Source component class's name, unique amongst all the source
+ component class names of the same plugin.
+ @endparblock
+@param[in] _message_iterator_class_next_method
+ @parblock
+ #bt_message_iterator_class_next_method
+
+ Source component class's message iterator class's "next" method.
+ @endparblock
+
+@bt_pre_not_null{_name}
+@bt_pre_not_null{_message_iterator_class_next_method}
+*/
+#define BT_PLUGIN_SOURCE_COMPONENT_CLASS_WITH_ID(_plugin_id, _component_class_id, _name, _message_iterator_class_next_method) \
+ static struct __bt_plugin_component_class_descriptor __bt_plugin_source_component_class_descriptor_##_plugin_id##_##_component_class_id = { \
+ .plugin_descriptor = &__bt_plugin_descriptor_##_plugin_id, \
+ .name = _name, \
+ .type = BT_COMPONENT_CLASS_TYPE_SOURCE, \
+ .methods = { .source = { .msg_iter_next = _message_iterator_class_next_method } }, \
+ }; \
+ static struct __bt_plugin_component_class_descriptor const * const __bt_plugin_source_component_class_descriptor_##_plugin_id##_##_component_class_id##_ptr __BT_PLUGIN_COMPONENT_CLASS_DESCRIPTOR_ATTRS = &__bt_plugin_source_component_class_descriptor_##_plugin_id##_##_component_class_id
+
+/*!
+@brief
+ Alias of BT_PLUGIN_SOURCE_COMPONENT_CLASS_WITH_ID() with the
+ \bt_p{_plugin_id} parameter set to <code>auto</code>, the
+ \bt_p{_component_class_id} parameter set to \bt_p{_name}, and
+ the \bt_p{_name} parameter set to a string version of \bt_p{_name}.
+
+@param[in] _name
+ @parblock
+ C identifier
+
+ Passed as both the \bt_p{_component_class_id} and the
+ \bt_p{_name} (once converted to a string) parameters of
+ BT_PLUGIN_SOURCE_COMPONENT_CLASS_WITH_ID().
+ @endparblock
+*/
+#define BT_PLUGIN_SOURCE_COMPONENT_CLASS(_name, _message_iterator_class_next_method) \
+ BT_PLUGIN_SOURCE_COMPONENT_CLASS_WITH_ID(auto, _name, #_name, _message_iterator_class_next_method)
+
+/*!
+@brief
+ Adds a \bt_flt_comp_cls named \bt_p{_name}, having the ID
+ \bt_p{_component_class_id} and the message iterator class's "next"
+ method \bt_p{_message_iterator_class_next_method}, to the plugin
+ having the ID \bt_p{_plugin_id}.
+
+@param[in] _plugin_id
+ @parblock
+ C identifier.
+
+ ID of the plugin to which to add the filter component class.
+ @endparblock
+@param[in] _component_class_id
+ @parblock
+ C identifier.
+
+ Filter component class's ID, unique amongst all the filter component
+ class IDs of the same plugin.
+ @endparblock
+@param[in] _name
+ @parblock
+ <code>const char *</code>
+
+ Filter component class's name, unique amongst all the filter
+ component class names of the same plugin.
+ @endparblock
+@param[in] _message_iterator_class_next_method
+ @parblock
+ #bt_message_iterator_class_next_method
+
+ Filter component class's message iterator class's "next" method.
+ @endparblock
+
+@bt_pre_not_null{_name}
+@bt_pre_not_null{_message_iterator_class_next_method}
+*/
+#define BT_PLUGIN_FILTER_COMPONENT_CLASS_WITH_ID(_plugin_id, _component_class_id, _name, _message_iterator_class_next_method) \
+ static struct __bt_plugin_component_class_descriptor __bt_plugin_filter_component_class_descriptor_##_plugin_id##_##_component_class_id = { \
+ .plugin_descriptor = &__bt_plugin_descriptor_##_plugin_id, \
+ .name = _name, \
+ .type = BT_COMPONENT_CLASS_TYPE_FILTER, \
+ .methods = { .filter = { .msg_iter_next = _message_iterator_class_next_method } }, \
+ }; \
+ static struct __bt_plugin_component_class_descriptor const * const __bt_plugin_filter_component_class_descriptor_##_plugin_id##_##_component_class_id##_ptr __BT_PLUGIN_COMPONENT_CLASS_DESCRIPTOR_ATTRS = &__bt_plugin_filter_component_class_descriptor_##_plugin_id##_##_component_class_id
+
+/*!
+@brief
+ Alias of BT_PLUGIN_FILTER_COMPONENT_CLASS_WITH_ID() with the
+ \bt_p{_plugin_id} parameter set to <code>auto</code>, the
+ \bt_p{_component_class_id} parameter set to \bt_p{_name}, and
+ the \bt_p{_name} parameter set to a string version of \bt_p{_name}.
+
+@param[in] _name
+ @parblock
+ C identifier
+
+ Passed as both the \bt_p{_component_class_id} and the
+ \bt_p{_name} (once converted to a string) parameters of
+ BT_PLUGIN_FILTER_COMPONENT_CLASS_WITH_ID().
+ @endparblock
+*/
+#define BT_PLUGIN_FILTER_COMPONENT_CLASS(_name, _message_iterator_class_next_method) \
+ BT_PLUGIN_FILTER_COMPONENT_CLASS_WITH_ID(auto, _name, #_name, _message_iterator_class_next_method)
+
+/*!
+@brief
+ Adds a \bt_sink_comp_cls named \bt_p{_name}, having the ID
+ \bt_p{_component_class_id} and the consuming method
+ \bt_p{_consume_method}, to the plugin
+ having the ID \bt_p{_plugin_id}.
+
+@param[in] _plugin_id
+ @parblock
+ C identifier.
+
+ ID of the plugin to which to add the sink component class.
+ @endparblock
+@param[in] _component_class_id
+ @parblock
+ C identifier.
+
+ Sink component class's ID, unique amongst all the sink component
+ class IDs of the same plugin.
+ @endparblock
+@param[in] _name
+ @parblock
+ <code>const char *</code>
+
+ Sink component class's name, unique amongst all the sink
+ component class names of the same plugin.
+ @endparblock
+@param[in] _consume_method
+ @parblock
+ #bt_component_class_sink_consume_method
+
+ Sink component class's message iterator class's "next" method.
+ @endparblock
+
+@bt_pre_not_null{_name}
+@bt_pre_not_null{_consume_method}
+*/
+#define BT_PLUGIN_SINK_COMPONENT_CLASS_WITH_ID(_plugin_id, _component_class_id, _name, _consume_method) \
+ static struct __bt_plugin_component_class_descriptor __bt_plugin_sink_component_class_descriptor_##_plugin_id##_##_component_class_id = { \
+ .plugin_descriptor = &__bt_plugin_descriptor_##_plugin_id, \
+ .name = _name, \
+ .type = BT_COMPONENT_CLASS_TYPE_SINK, \
+ .methods = { .sink = { .consume = _consume_method } }, \
+ }; \
+ static struct __bt_plugin_component_class_descriptor const * const __bt_plugin_sink_component_class_descriptor_##_plugin_id##_##_component_class_id##_ptr __BT_PLUGIN_COMPONENT_CLASS_DESCRIPTOR_ATTRS = &__bt_plugin_sink_component_class_descriptor_##_plugin_id##_##_component_class_id
+
+/*!
+@brief
+ Alias of BT_PLUGIN_SINK_COMPONENT_CLASS_WITH_ID() with the
+ \bt_p{_plugin_id} parameter set to <code>auto</code>, the
+ \bt_p{_component_class_id} parameter set to \bt_p{_name}, and
+ the \bt_p{_name} parameter set to a string version of \bt_p{_name}.
+
+@param[in] _name
+ @parblock
+ C identifier
+
+ Passed as both the \bt_p{_component_class_id} and the
+ \bt_p{_name} (once converted to a string) parameters of
+ BT_PLUGIN_SINK_COMPONENT_CLASS_WITH_ID().
+ @endparblock
+*/
+#define BT_PLUGIN_SINK_COMPONENT_CLASS(_name, _consume_method) \
+ BT_PLUGIN_SINK_COMPONENT_CLASS_WITH_ID(auto, _name, #_name, _consume_method)
+
+/*! @} */
+
+/*!
+@name Source component class properties
+@{
+*/
+
+/*!
+@brief
+ Sets the description of the \bt_src_comp_cls having the ID
+ \bt_p{_component_class_id} in the plugin having the ID
+ \bt_p{_plugin_id} to \bt_p{_description}.
+
+See the \ref api-comp-cls-prop-descr "description" property.
+
+@param[in] _plugin_id
+ @parblock
+ C identifier.
+
+ ID of the plugin which contains the source component class of which
+ to set the description.
+ @endparblock
+@param[in] _component_class_id
+ @parblock
+ C identifier.
+
+ ID of the source component class, within the plugin having the ID
+ \bt_p{_plugin_id}, of which to set the description to
+ \bt_p{_description}.
+ @endparblock
+@param[in] _description
+ @parblock
+ <code>const char *</code>
+
+ Source component class's description.
+ @endparblock
+
+@bt_pre_not_null{_description}
+*/
+#define BT_PLUGIN_SOURCE_COMPONENT_CLASS_DESCRIPTION_WITH_ID(_plugin_id, _component_class_id, _description) \
+ __BT_PLUGIN_COMPONENT_CLASS_DESCRIPTOR_ATTRIBUTE(description, BT_PLUGIN_COMPONENT_CLASS_DESCRIPTOR_ATTRIBUTE_TYPE_DESCRIPTION, _plugin_id, _component_class_id, source, _description)
+
+/*!
+@brief
+ Alias of BT_PLUGIN_SOURCE_COMPONENT_CLASS_DESCRIPTION_WITH_ID() with
+ the \bt_p{_plugin_id} parameter set to <code>auto</code> and the
+ \bt_p{_component_class_id} parameter set to \bt_p{_name}.
+*/
+#define BT_PLUGIN_SOURCE_COMPONENT_CLASS_DESCRIPTION(_name, _description) \
+ BT_PLUGIN_SOURCE_COMPONENT_CLASS_DESCRIPTION_WITH_ID(auto, _name, _description)
+
+/*!
+@brief
+ Sets the help text of the \bt_src_comp_cls having the ID
+ \bt_p{_component_class_id} in the plugin having the ID
+ \bt_p{_plugin_id} to \bt_p{_help_text}.
+
+See the \ref api-comp-cls-prop-help "help text" property.
+
+@param[in] _plugin_id
+ @parblock
+ C identifier.
+
+ ID of the plugin which contains the source component class of which
+ to set the help text.
+ @endparblock
+@param[in] _component_class_id
+ @parblock
+ C identifier.
+
+ ID of the source component class, within the plugin having the ID
+ \bt_p{_plugin_id}, of which to set the help text to
+ \bt_p{_help_text}.
+ @endparblock
+@param[in] _help_text
+ @parblock
+ <code>const char *</code>
+
+ Source component class's help text.
+ @endparblock
+
+@bt_pre_not_null{_help_text}
+*/
+#define BT_PLUGIN_SOURCE_COMPONENT_CLASS_HELP_WITH_ID(_plugin_id, _component_class_id, _help_text) \
+ __BT_PLUGIN_COMPONENT_CLASS_DESCRIPTOR_ATTRIBUTE(help, BT_PLUGIN_COMPONENT_CLASS_DESCRIPTOR_ATTRIBUTE_TYPE_HELP, _plugin_id, _component_class_id, source, _help_text)
+
+/*!
+@brief
+ Alias of BT_PLUGIN_SOURCE_COMPONENT_CLASS_HELP_WITH_ID() with the
+ \bt_p{_plugin_id} parameter set to <code>auto</code> and the
+ \bt_p{_component_class_id} parameter set to \bt_p{_name}.
+*/
+#define BT_PLUGIN_SOURCE_COMPONENT_CLASS_HELP(_name, _help_text) \
+ BT_PLUGIN_SOURCE_COMPONENT_CLASS_HELP_WITH_ID(auto, _name, _help_text)
+
+/*! @} */
+
+/*!
+@name Filter component class properties
+@{
+*/
+
+/*!
+@brief
+ Sets the description of the \bt_flt_comp_cls having the ID
+ \bt_p{_component_class_id} in the plugin having the ID
+ \bt_p{_plugin_id} to \bt_p{_description}.
+
+See the \ref api-comp-cls-prop-descr "description" property.
+
+@param[in] _plugin_id
+ @parblock
+ C identifier.
+
+ ID of the plugin which contains the filter component class of which
+ to set the description.
+ @endparblock
+@param[in] _component_class_id
+ @parblock
+ C identifier.
+
+ ID of the filter component class, within the plugin having the ID
+ \bt_p{_plugin_id}, of which to set the description to
+ \bt_p{_description}.
+ @endparblock
+@param[in] _description
+ @parblock
+ <code>const char *</code>
+
+ Filter component class's description.
+ @endparblock
+
+@bt_pre_not_null{_description}
+*/
+#define BT_PLUGIN_FILTER_COMPONENT_CLASS_DESCRIPTION_WITH_ID(_plugin_id, _component_class_id, _description) \
+ __BT_PLUGIN_COMPONENT_CLASS_DESCRIPTOR_ATTRIBUTE(description, BT_PLUGIN_COMPONENT_CLASS_DESCRIPTOR_ATTRIBUTE_TYPE_DESCRIPTION, _plugin_id, _component_class_id, filter, _description)
+
+/*!
+@brief
+ Alias of BT_PLUGIN_FILTER_COMPONENT_CLASS_DESCRIPTION_WITH_ID() with
+ the \bt_p{_plugin_id} parameter set to <code>auto</code> and the
+ \bt_p{_component_class_id} parameter set to \bt_p{_name}.
+*/
+#define BT_PLUGIN_FILTER_COMPONENT_CLASS_DESCRIPTION(_name, _description) \
+ BT_PLUGIN_FILTER_COMPONENT_CLASS_DESCRIPTION_WITH_ID(auto, _name, _description)
+
+/*!
+@brief
+ Sets the help text of the \bt_flt_comp_cls having the ID
+ \bt_p{_component_class_id} in the plugin having the ID
+ \bt_p{_plugin_id} to \bt_p{_help_text}.
+
+See the \ref api-comp-cls-prop-help "help text" property.
+
+@param[in] _plugin_id
+ @parblock
+ C identifier.
+
+ ID of the plugin which contains the filter component class of which
+ to set the help text.
+ @endparblock
+@param[in] _component_class_id
+ @parblock
+ C identifier.
+
+ ID of the filter component class, within the plugin having the ID
+ \bt_p{_plugin_id}, of which to set the help text to
+ \bt_p{_help_text}.
+ @endparblock
+@param[in] _help_text
+ @parblock
+ <code>const char *</code>
+
+ Filter component class's help text.
+ @endparblock
+
+@bt_pre_not_null{_help_text}
+*/
+#define BT_PLUGIN_FILTER_COMPONENT_CLASS_HELP_WITH_ID(_plugin_id, _component_class_id, _help_text) \
+ __BT_PLUGIN_COMPONENT_CLASS_DESCRIPTOR_ATTRIBUTE(help, BT_PLUGIN_COMPONENT_CLASS_DESCRIPTOR_ATTRIBUTE_TYPE_HELP, _plugin_id, _component_class_id, filter, _help_text)
+
+/*!
+@brief
+ Alias of BT_PLUGIN_FILTER_COMPONENT_CLASS_HELP_WITH_ID() with the
+ \bt_p{_plugin_id} parameter set to <code>auto</code> and the
+ \bt_p{_component_class_id} parameter set to \bt_p{_name}.
+*/
+#define BT_PLUGIN_FILTER_COMPONENT_CLASS_HELP(_name, _help_text) \
+ BT_PLUGIN_FILTER_COMPONENT_CLASS_HELP_WITH_ID(auto, _name, _help_text)
+
+/*! @} */
+
+/*!
+@name Sink component class properties
+@{
+*/
+
+/*!
+@brief
+ Sets the description of the \bt_sink_comp_cls having the ID
+ \bt_p{_component_class_id} in the plugin having the ID
+ \bt_p{_plugin_id} to \bt_p{_description}.
+
+See the \ref api-comp-cls-prop-descr "description" property.
+
+@param[in] _plugin_id
+ @parblock
+ C identifier.
+
+ ID of the plugin which contains the sink component class of which
+ to set the description.
+ @endparblock
+@param[in] _component_class_id
+ @parblock
+ C identifier.
+
+ ID of the sink component class, within the plugin having the ID
+ \bt_p{_plugin_id}, of which to set the description to
+ \bt_p{_description}.
+ @endparblock
+@param[in] _description
+ @parblock
+ <code>const char *</code>
+
+ Sink component class's description.
+ @endparblock
+
+@bt_pre_not_null{_description}
+*/
+#define BT_PLUGIN_SINK_COMPONENT_CLASS_DESCRIPTION_WITH_ID(_plugin_id, _component_class_id, _description) \
+ __BT_PLUGIN_COMPONENT_CLASS_DESCRIPTOR_ATTRIBUTE(description, BT_PLUGIN_COMPONENT_CLASS_DESCRIPTOR_ATTRIBUTE_TYPE_DESCRIPTION, _plugin_id, _component_class_id, sink, _description)
+
+/*!
+@brief
+ Alias of BT_PLUGIN_SINK_COMPONENT_CLASS_DESCRIPTION_WITH_ID() with
+ the \bt_p{_plugin_id} parameter set to <code>auto</code> and the
+ \bt_p{_component_class_id} parameter set to \bt_p{_name}.
+*/
+#define BT_PLUGIN_SINK_COMPONENT_CLASS_DESCRIPTION(_name, _description) \
+ BT_PLUGIN_SINK_COMPONENT_CLASS_DESCRIPTION_WITH_ID(auto, _name, _description)
+
+/*!
+@brief
+ Sets the help text of the \bt_sink_comp_cls having the ID
+ \bt_p{_component_class_id} in the plugin having the ID
+ \bt_p{_plugin_id} to \bt_p{_help_text}.
+
+See the \ref api-comp-cls-prop-help "help text" property.
+
+@param[in] _plugin_id
+ @parblock
+ C identifier.
+
+ ID of the plugin which contains the sink component class of which
+ to set the help text.
+ @endparblock
+@param[in] _component_class_id
+ @parblock
+ C identifier.
+
+ ID of the sink component class, within the plugin having the ID
+ \bt_p{_plugin_id}, of which to set the help text to
+ \bt_p{_help_text}.
+ @endparblock
+@param[in] _help_text
+ @parblock
+ <code>const char *</code>
+
+ Sink component class's help text.
+ @endparblock
+
+@bt_pre_not_null{_help_text}
+*/
+#define BT_PLUGIN_SINK_COMPONENT_CLASS_HELP_WITH_ID(_plugin_id, _component_class_id, _help_text) \
+ __BT_PLUGIN_COMPONENT_CLASS_DESCRIPTOR_ATTRIBUTE(help, BT_PLUGIN_COMPONENT_CLASS_DESCRIPTOR_ATTRIBUTE_TYPE_HELP, _plugin_id, _component_class_id, sink, _help_text)
+
+/*!
+@brief
+ Alias of BT_PLUGIN_SINK_COMPONENT_CLASS_HELP_WITH_ID() with
+ the \bt_p{_plugin_id} parameter set to <code>auto</code> and the
+ \bt_p{_component_class_id} parameter set to \bt_p{_name}.
+*/
+#define BT_PLUGIN_SINK_COMPONENT_CLASS_HELP(_name, _help_text) \
+ BT_PLUGIN_SINK_COMPONENT_CLASS_HELP_WITH_ID(auto, _name, _help_text)
+
+/*! @} */
+
+/*!
+@name Source component class methods
+@{
+*/
+
+/*!
+@brief
+ Sets the finalization method of the \bt_src_comp_cls having the ID
+ \bt_p{_component_class_id} in the plugin having the ID
+ \bt_p{_plugin_id} to \bt_p{_method}.
+
+See the \ref api-comp-cls-dev-meth-fini "finalize" method.
+
+@param[in] _plugin_id
+ @parblock
+ C identifier.
+
+ ID of the plugin which contains the source component class of which
+ to set the finalization method.
+ @endparblock
+@param[in] _component_class_id
+ @parblock
+ C identifier.
+
+ ID of the source component class, within the plugin having the ID
+ \bt_p{_plugin_id}, of which to set the finalization method to
+ \bt_p{_method}.
+ @endparblock
+@param[in] _method
+ @parblock
+ #bt_component_class_source_finalize_method
+
+ Source component class's finalization method.
+ @endparblock
+
+@bt_pre_not_null{_method}
+*/
+#define BT_PLUGIN_SOURCE_COMPONENT_CLASS_FINALIZE_METHOD_WITH_ID(_plugin_id, _component_class_id, _method) \
+ __BT_PLUGIN_COMPONENT_CLASS_DESCRIPTOR_ATTRIBUTE(source_finalize_method, BT_PLUGIN_COMPONENT_CLASS_DESCRIPTOR_ATTRIBUTE_TYPE_FINALIZE_METHOD, _plugin_id, _component_class_id, source, _method)
+
+/*!
+@brief
+ Alias of
+ BT_PLUGIN_SOURCE_COMPONENT_CLASS_FINALIZE_METHOD_WITH_ID()
+ with the \bt_p{_plugin_id} parameter set to <code>auto</code> and
+ the \bt_p{_component_class_id} parameter set to \bt_p{_name}.
+*/
+#define BT_PLUGIN_SOURCE_COMPONENT_CLASS_FINALIZE_METHOD(_name, _method) \
+ BT_PLUGIN_SOURCE_COMPONENT_CLASS_FINALIZE_METHOD_WITH_ID(auto, _name, _method)
+
+/*!
+@brief
+ Sets the \"get supported \bt_mip versions\" method of the
+ \bt_src_comp_cls having the ID \bt_p{_component_class_id} in the
+ plugin having the ID \bt_p{_plugin_id} to \bt_p{_method}.
+
+See the \ref api-comp-cls-dev-meth-mip "get supported MIP versions"
+method.
+
+@param[in] _plugin_id
+ @parblock
+ C identifier.
+
+ ID of the plugin which contains the source component class of which
+ to set the "get supported MIP versions" method.
+ @endparblock
+@param[in] _component_class_id
+ @parblock
+ C identifier.
+
+ ID of the source component class, within the plugin having the ID
+ \bt_p{_plugin_id}, of which to set the "get supported MIP versions"
+ method to \bt_p{_method}.
+ @endparblock
+@param[in] _method
+ @parblock
+ #bt_component_class_source_get_supported_mip_versions_method
+
+ Source component class's "get supported MIP versions" method.
+ @endparblock
+
+@bt_pre_not_null{_method}
+*/
+#define BT_PLUGIN_SOURCE_COMPONENT_CLASS_GET_SUPPORTED_MIP_VERSIONS_METHOD_WITH_ID(_plugin_id, _component_class_id, _method) \
+ __BT_PLUGIN_COMPONENT_CLASS_DESCRIPTOR_ATTRIBUTE(source_get_supported_mip_versions_method, BT_PLUGIN_COMPONENT_CLASS_DESCRIPTOR_ATTRIBUTE_TYPE_GET_SUPPORTED_MIP_VERSIONS, _plugin_id, _component_class_id, source, _method)
+
+/*!
+@brief
+ Alias of
+ BT_PLUGIN_SOURCE_COMPONENT_CLASS_GET_SUPPORTED_MIP_VERSIONS_METHOD_WITH_ID()
+ with the \bt_p{_plugin_id} parameter set to <code>auto</code> and
+ the \bt_p{_component_class_id} parameter set to \bt_p{_name}.
+*/
+#define BT_PLUGIN_SOURCE_COMPONENT_CLASS_GET_SUPPORTED_MIP_VERSIONS_METHOD(_name, _method) \
+ BT_PLUGIN_SOURCE_COMPONENT_CLASS_GET_SUPPORTED_MIP_VERSIONS_METHOD_WITH_ID(auto, _name, _method)
+
+/*!
+@brief
+ Sets the initialization method of the \bt_src_comp_cls having the ID
+ \bt_p{_component_class_id} in the plugin having the ID
+ \bt_p{_plugin_id} to \bt_p{_method}.
+
+See the \ref api-comp-cls-dev-meth-init "initialize" method.
+
+@param[in] _plugin_id
+ @parblock
+ C identifier.
+
+ ID of the plugin which contains the source component class of which
+ to set the initialization method.
+ @endparblock
+@param[in] _component_class_id
+ @parblock
+ C identifier.
+
+ ID of the source component class, within the plugin having the ID
+ \bt_p{_plugin_id}, of which to set the initialization method to
+ \bt_p{_method}.
+ @endparblock
+@param[in] _method
+ @parblock
+ #bt_component_class_source_initialize_method
+
+ Source component class's initialization method.
+ @endparblock
+
+@bt_pre_not_null{_method}
+*/
+#define BT_PLUGIN_SOURCE_COMPONENT_CLASS_INITIALIZE_METHOD_WITH_ID(_plugin_id, _component_class_id, _method) \
+ __BT_PLUGIN_COMPONENT_CLASS_DESCRIPTOR_ATTRIBUTE(source_initialize_method, BT_PLUGIN_COMPONENT_CLASS_DESCRIPTOR_ATTRIBUTE_TYPE_INITIALIZE_METHOD, _plugin_id, _component_class_id, source, _method)
+
+/*!
+@brief
+ Alias of
+ BT_PLUGIN_SOURCE_COMPONENT_CLASS_INITIALIZE_METHOD_WITH_ID()
+ with the \bt_p{_plugin_id} parameter set to <code>auto</code> and
+ the \bt_p{_component_class_id} parameter set to \bt_p{_name}.
+*/
+#define BT_PLUGIN_SOURCE_COMPONENT_CLASS_INITIALIZE_METHOD(_name, _method) \
+ BT_PLUGIN_SOURCE_COMPONENT_CLASS_INITIALIZE_METHOD_WITH_ID(auto, _name, _method)
+
+/*!
+@brief
+ Sets the finalization method of the \bt_msg_iter_cls of the
+ \bt_src_comp_cls having the ID \bt_p{_component_class_id} in the
+ plugin having the ID \bt_p{_plugin_id} to \bt_p{_method}.
+
+See the \ref api-msg-iter-cls-meth-fini "finalize" method.
+
+@param[in] _plugin_id
+ @parblock
+ C identifier.
+
+ ID of the plugin which contains the source component class of which
+ to set the finalization method of the message iterator class.
+ @endparblock
+@param[in] _component_class_id
+ @parblock
+ C identifier.
+
+ ID of the source component class, within the plugin having the ID
+ \bt_p{_plugin_id}, of which to set the finalization method of the
+ message iterator class to \bt_p{_method}.
+ @endparblock
+@param[in] _method
+ @parblock
+ #bt_message_iterator_class_finalize_method
+
+ Source component class's message iterator class's finalization method.
+ @endparblock
+
+@bt_pre_not_null{_method}
+*/
+#define BT_PLUGIN_SOURCE_COMPONENT_CLASS_MESSAGE_ITERATOR_CLASS_FINALIZE_METHOD_WITH_ID(_plugin_id, _component_class_id, _method) \
+ __BT_PLUGIN_COMPONENT_CLASS_DESCRIPTOR_ATTRIBUTE(msg_iter_finalize_method, BT_PLUGIN_COMPONENT_CLASS_DESCRIPTOR_ATTRIBUTE_TYPE_MSG_ITER_FINALIZE_METHOD, _plugin_id, _component_class_id, source, _method)
+
+/*!
+@brief
+ Alias of
+ BT_PLUGIN_SOURCE_COMPONENT_CLASS_MESSAGE_ITERATOR_CLASS_FINALIZE_METHOD_WITH_ID()
+ with the \bt_p{_plugin_id} parameter set to <code>auto</code> and
+ the \bt_p{_component_class_id} parameter set to \bt_p{_name}.
+*/
+#define BT_PLUGIN_SOURCE_COMPONENT_CLASS_MESSAGE_ITERATOR_CLASS_FINALIZE_METHOD(_name, _method) \
+ BT_PLUGIN_SOURCE_COMPONENT_CLASS_MESSAGE_ITERATOR_CLASS_FINALIZE_METHOD_WITH_ID(auto, _name, _method)
+
+/*!
+@brief
+ Sets the initialization method of the \bt_msg_iter_cls of the
+ \bt_src_comp_cls having the ID \bt_p{_component_class_id} in the
+ plugin having the ID \bt_p{_plugin_id} to \bt_p{_method}.
+
+See the \ref api-msg-iter-cls-meth-init "initialize" method.
+
+@param[in] _plugin_id
+ @parblock
+ C identifier.
+
+ ID of the plugin which contains the source component class of which
+ to set the initialization method of the message iterator class.
+ @endparblock
+@param[in] _component_class_id
+ @parblock
+ C identifier.
+
+ ID of the source component class, within the plugin having the ID
+ \bt_p{_plugin_id}, of which to set the initialization method of the
+ message iterator class to \bt_p{_method}.
+ @endparblock
+@param[in] _method
+ @parblock
+ #bt_message_iterator_class_initialize_method
+
+ Source component class's message iterator class's initialization
+ method.
+ @endparblock
+
+@bt_pre_not_null{_method}
+*/
+#define BT_PLUGIN_SOURCE_COMPONENT_CLASS_MESSAGE_ITERATOR_CLASS_INITIALIZE_METHOD_WITH_ID(_plugin_id, _component_class_id, _method) \
+ __BT_PLUGIN_COMPONENT_CLASS_DESCRIPTOR_ATTRIBUTE(msg_iter_initialize_method, BT_PLUGIN_COMPONENT_CLASS_DESCRIPTOR_ATTRIBUTE_TYPE_MSG_ITER_INITIALIZE_METHOD, _plugin_id, _component_class_id, source, _method)
+
+/*!
+@brief
+ Alias of
+ BT_PLUGIN_SOURCE_COMPONENT_CLASS_MESSAGE_ITERATOR_CLASS_INITIALIZE_METHOD_WITH_ID()
+ with the \bt_p{_plugin_id} parameter set to <code>auto</code> and
+ the \bt_p{_component_class_id} parameter set to \bt_p{_name}.
+*/
+#define BT_PLUGIN_SOURCE_COMPONENT_CLASS_MESSAGE_ITERATOR_CLASS_INITIALIZE_METHOD(_name, _method) \
+ BT_PLUGIN_SOURCE_COMPONENT_CLASS_MESSAGE_ITERATOR_CLASS_INITIALIZE_METHOD_WITH_ID(auto, _name, _method)
+
+/*!
+@brief
+ Sets the "seek beginning" and "can seek beginning?" methods of the
+ \bt_msg_iter_cls of the \bt_src_comp_cls having the ID
+ \bt_p{_component_class_id} in the plugin having the ID
+ \bt_p{_plugin_id} to \bt_p{_seek_method} and
+ \bt_p{_can_seek_method}.
+
+See the \ref api-msg-iter-cls-meth-seek-beg "seek beginning" and
+\ref api-msg-iter-cls-meth-can-seek-beg "can seek beginning?" methods.
+
+@param[in] _plugin_id
+ @parblock
+ C identifier.
+
+ ID of the plugin which contains the source component class of which
+ to set the "seek beginning" and "can seek beginning?" methods of the
+ message iterator class.
+ @endparblock
+@param[in] _component_class_id
+ @parblock
+ C identifier.
+
+ ID of the source component class, within the plugin having the ID
+ \bt_p{_plugin_id}, of which to set the "seek beginning" and "can
+ seek beginning" methods of the message iterator class to
+ \bt_p{_seek_method} and \bt_p{_can_seek_method}.
+ @endparblock
+@param[in] _seek_method
+ @parblock
+ #bt_message_iterator_class_seek_beginning_method
+
+ Source component class's message iterator class's "seek beginning"
+ method.
+ @endparblock
+@param[in] _can_seek_method
+ @parblock
+ #bt_message_iterator_class_can_seek_beginning_method
+
+ Source component class's message iterator class's
+ "can seek beginning?" method.
+
+ Can be \c NULL, in which case it is equivalent to setting a method
+ which always returns #BT_TRUE.
+ @endparblock
+
+@bt_pre_not_null{_seek_method}
+@bt_pre_not_null{_can_seek_method}
+*/
+#define BT_PLUGIN_SOURCE_COMPONENT_CLASS_MESSAGE_ITERATOR_CLASS_SEEK_BEGINNING_METHODS_WITH_ID(_plugin_id, _component_class_id, _seek_method, _can_seek_method) \
+ __BT_PLUGIN_COMPONENT_CLASS_DESCRIPTOR_ATTRIBUTE(msg_iter_seek_beginning_method, BT_PLUGIN_COMPONENT_CLASS_DESCRIPTOR_ATTRIBUTE_TYPE_MSG_ITER_SEEK_BEGINNING_METHOD, _plugin_id, _component_class_id, source, _seek_method); \
+ __BT_PLUGIN_COMPONENT_CLASS_DESCRIPTOR_ATTRIBUTE(msg_iter_can_seek_beginning_method, BT_PLUGIN_COMPONENT_CLASS_DESCRIPTOR_ATTRIBUTE_TYPE_MSG_ITER_CAN_SEEK_BEGINNING_METHOD, _plugin_id, _component_class_id, source, _can_seek_method)
+
+/*!
+@brief
+ Alias of
+ BT_PLUGIN_SOURCE_COMPONENT_CLASS_MESSAGE_ITERATOR_CLASS_SEEK_BEGINNING_METHODS()
+ with the \bt_p{_plugin_id} parameter set to <code>auto</code> and
+ the \bt_p{_component_class_id} parameter set to \bt_p{_name}.
+*/
+#define BT_PLUGIN_SOURCE_COMPONENT_CLASS_MESSAGE_ITERATOR_CLASS_SEEK_BEGINNING_METHODS(_name, _seek_method, _can_seek_method) \
+ BT_PLUGIN_SOURCE_COMPONENT_CLASS_MESSAGE_ITERATOR_CLASS_SEEK_BEGINNING_METHODS_WITH_ID(auto, _name, _seek_method, _can_seek_method)
+
+/*!
+@brief
+ Sets the "seek ns from origin" and "can seek ns from origin?"
+ methods of the \bt_msg_iter_cls of the \bt_src_comp_cls having the
+ ID \bt_p{_component_class_id} in the plugin having the ID
+ \bt_p{_plugin_id} to \bt_p{_seek_method} and
+ \bt_p{_can_seek_method}.
+
+See the \ref api-msg-iter-cls-meth-seek-ns "seek ns from origin" and
+\ref api-msg-iter-cls-meth-can-seek-ns "can seek ns from origin?"
+methods.
+
+@param[in] _plugin_id
+ @parblock
+ C identifier.
+
+ ID of the plugin which contains the source component class of which
+ to set the "seek ns from origin" and "can seek ns from origin?"
+ methods of the message iterator class.
+ @endparblock
+@param[in] _component_class_id
+ @parblock
+ C identifier.
+
+ ID of the source component class, within the plugin having the ID
+ \bt_p{_plugin_id}, of which to set the "seek ns from origin" and
+ "can seek ns from origin" methods of the message iterator class to
+ \bt_p{_seek_method} and \bt_p{_can_seek_method}.
+ @endparblock
+@param[in] _seek_method
+ @parblock
+ #bt_message_iterator_class_seek_ns_from_origin_method
+
+ Source component class's message iterator class's "seek ns from
+ origin" method.
+ @endparblock
+@param[in] _can_seek_method
+ @parblock
+ #bt_message_iterator_class_can_seek_ns_from_origin_method
+
+ Source component class's message iterator class's "can seek ns from
+ origin?" method.
+
+ Can be \c NULL, in which case it is equivalent to setting a method
+ which always returns #BT_TRUE.
+ @endparblock
+
+@bt_pre_not_null{_seek_method}
+@bt_pre_not_null{_can_seek_method}
+*/
+#define BT_PLUGIN_SOURCE_COMPONENT_CLASS_MESSAGE_ITERATOR_CLASS_SEEK_NS_FROM_ORIGIN_METHODS_WITH_ID(_plugin_id, _component_class_id, _seek_method, _can_seek_method) \
+ __BT_PLUGIN_COMPONENT_CLASS_DESCRIPTOR_ATTRIBUTE(msg_iter_seek_ns_from_origin_method, BT_PLUGIN_COMPONENT_CLASS_DESCRIPTOR_ATTRIBUTE_TYPE_MSG_ITER_SEEK_NS_FROM_ORIGIN_METHOD, _plugin_id, _component_class_id, source, _seek_method); \
+ __BT_PLUGIN_COMPONENT_CLASS_DESCRIPTOR_ATTRIBUTE(msg_iter_can_seek_ns_from_origin_method, BT_PLUGIN_COMPONENT_CLASS_DESCRIPTOR_ATTRIBUTE_TYPE_MSG_ITER_CAN_SEEK_NS_FROM_ORIGIN_METHOD, _plugin_id, _component_class_id, source, _can_seek_method)
+
+/*!
+@brief
+ Alias of
+ BT_PLUGIN_SOURCE_COMPONENT_CLASS_MESSAGE_ITERATOR_CLASS_SEEK_NS_FROM_ORIGIN_METHODS_WITH_ID()
+ with the \bt_p{_plugin_id} parameter set to <code>auto</code> and
+ the \bt_p{_component_class_id} parameter set to \bt_p{_name}.
+*/
+#define BT_PLUGIN_SOURCE_COMPONENT_CLASS_MESSAGE_ITERATOR_CLASS_SEEK_NS_FROM_ORIGIN_METHODS(_name, _seek_method, _can_seek_method) \
+ BT_PLUGIN_SOURCE_COMPONENT_CLASS_MESSAGE_ITERATOR_CLASS_SEEK_NS_FROM_ORIGIN_METHODS_WITH_ID(auto, _name, _seek_method, _can_seek_method)
+
+/*!
+@brief
+ Sets the "output port connected" method of the \bt_src_comp_cls
+ having the ID \bt_p{_component_class_id} in the plugin having the ID
+ \bt_p{_plugin_id} to \bt_p{_method}.
+
+See the
+\ref api-comp-cls-dev-meth-oport-connected "output port connected"
+method.
+
+@param[in] _plugin_id
+ @parblock
+ C identifier.
+
+ ID of the plugin which contains the source component class of which
+ to set the "output port connected" method.
+ @endparblock
+@param[in] _component_class_id
+ @parblock
+ C identifier.
+
+ ID of the source component class, within the plugin having the ID
+ \bt_p{_plugin_id}, of which to set the "output port connected"
+ method to \bt_p{_method}.
+ @endparblock
+@param[in] _method
+ @parblock
+ #bt_component_class_source_output_port_connected_method
+
+ Source component class's "output port connected" method.
+ @endparblock
+
+@bt_pre_not_null{_method}
+*/
+#define BT_PLUGIN_SOURCE_COMPONENT_CLASS_OUTPUT_PORT_CONNECTED_METHOD_WITH_ID(_plugin_id, _component_class_id, _method) \
+ __BT_PLUGIN_COMPONENT_CLASS_DESCRIPTOR_ATTRIBUTE(source_output_port_connected_method, BT_PLUGIN_COMPONENT_CLASS_DESCRIPTOR_ATTRIBUTE_TYPE_OUTPUT_PORT_CONNECTED_METHOD, _plugin_id, _component_class_id, source, _method)
+
+/*!
+@brief
+ Alias of
+ BT_PLUGIN_SOURCE_COMPONENT_CLASS_OUTPUT_PORT_CONNECTED_METHOD_WITH_ID()
+ with the \bt_p{_plugin_id} parameter set to <code>auto</code> and
+ the \bt_p{_component_class_id} parameter set to \bt_p{_name}.
+*/
+#define BT_PLUGIN_SOURCE_COMPONENT_CLASS_OUTPUT_PORT_CONNECTED_METHOD(_name, _method) \
+ BT_PLUGIN_SOURCE_COMPONENT_CLASS_OUTPUT_PORT_CONNECTED_METHOD_WITH_ID(auto, _name, _method)
+
+/*!
+@brief
+ Sets the query method of the \bt_src_comp_cls
+ having the ID \bt_p{_component_class_id} in the plugin having the ID
+ \bt_p{_plugin_id} to \bt_p{_method}.
+
+See the \ref api-comp-cls-dev-meth-query "query" method.
+
+@param[in] _plugin_id
+ @parblock
+ C identifier.
+
+ ID of the plugin which contains the source component class of which
+ to set the query method.
+ @endparblock
+@param[in] _component_class_id
+ @parblock
+ C identifier.
+
+ ID of the source component class, within the plugin having the ID
+ \bt_p{_plugin_id}, of which to set the query
+ method to \bt_p{_method}.
+ @endparblock
+@param[in] _method
+ @parblock
+ #bt_component_class_source_query_method
+
+ Source component class's query method.
+ @endparblock
+
+@bt_pre_not_null{_method}
+*/
+#define BT_PLUGIN_SOURCE_COMPONENT_CLASS_QUERY_METHOD_WITH_ID(_plugin_id, _component_class_id, _method) \
+ __BT_PLUGIN_COMPONENT_CLASS_DESCRIPTOR_ATTRIBUTE(source_query_method, BT_PLUGIN_COMPONENT_CLASS_DESCRIPTOR_ATTRIBUTE_TYPE_QUERY_METHOD, _plugin_id, _component_class_id, source, _method)
+
+/*!
+@brief
+ Alias of
+ BT_PLUGIN_SOURCE_COMPONENT_CLASS_QUERY_METHOD_WITH_ID()
+ with the \bt_p{_plugin_id} parameter set to <code>auto</code> and
+ the \bt_p{_component_class_id} parameter set to \bt_p{_name}.
+*/
+#define BT_PLUGIN_SOURCE_COMPONENT_CLASS_QUERY_METHOD(_name, _method) \
+ BT_PLUGIN_SOURCE_COMPONENT_CLASS_QUERY_METHOD_WITH_ID(auto, _name, _method)
+
+/*! @} */
+
+/*!
+@name Filter component class methods
+@{
+*/
+
+/*!
+@brief
+ Sets the finalization method of the \bt_flt_comp_cls having the ID
+ \bt_p{_component_class_id} in the plugin having the ID
+ \bt_p{_plugin_id} to \bt_p{_method}.
+
+See the \ref api-comp-cls-dev-meth-fini "finalize" method.
+
+@param[in] _plugin_id
+ @parblock
+ C identifier.
+
+ ID of the plugin which contains the filter component class of which
+ to set the finalization method.
+ @endparblock
+@param[in] _component_class_id
+ @parblock
+ C identifier.
+
+ ID of the filter component class, within the plugin having the ID
+ \bt_p{_plugin_id}, of which to set the finalization method to
+ \bt_p{_method}.
+ @endparblock
+@param[in] _method
+ @parblock
+ #bt_component_class_filter_finalize_method
+
+ Filter component class's finalization method.
+ @endparblock
+
+@bt_pre_not_null{_method}
+*/
+#define BT_PLUGIN_FILTER_COMPONENT_CLASS_FINALIZE_METHOD_WITH_ID(_plugin_id, _component_class_id, _method) \
+ __BT_PLUGIN_COMPONENT_CLASS_DESCRIPTOR_ATTRIBUTE(filter_finalize_method, BT_PLUGIN_COMPONENT_CLASS_DESCRIPTOR_ATTRIBUTE_TYPE_FINALIZE_METHOD, _plugin_id, _component_class_id, filter, _method)
+
+/*!
+@brief
+ Alias of
+ BT_PLUGIN_FILTER_COMPONENT_CLASS_FINALIZE_METHOD_WITH_ID()
+ with the \bt_p{_plugin_id} parameter set to <code>auto</code> and
+ the \bt_p{_component_class_id} parameter set to \bt_p{_name}.
+*/
+#define BT_PLUGIN_FILTER_COMPONENT_CLASS_FINALIZE_METHOD(_name, _method) \
+ BT_PLUGIN_FILTER_COMPONENT_CLASS_FINALIZE_METHOD_WITH_ID(auto, _name, _method)
+
+/*!
+@brief
+ Sets the \"get supported \bt_mip versions\" method of the
+ \bt_flt_comp_cls having the ID \bt_p{_component_class_id} in the
+ plugin having the ID \bt_p{_plugin_id} to \bt_p{_method}.
+
+See the \ref api-comp-cls-dev-meth-mip "get supported MIP versions"
+method.
+
+@param[in] _plugin_id
+ @parblock
+ C identifier.
+
+ ID of the plugin which contains the filter component class of which
+ to set the "get supported MIP versions" method.
+ @endparblock
+@param[in] _component_class_id
+ @parblock
+ C identifier.
+
+ ID of the filter component class, within the plugin having the ID
+ \bt_p{_plugin_id}, of which to set the "get supported MIP versions"
+ method to \bt_p{_method}.
+ @endparblock
+@param[in] _method
+ @parblock
+ #bt_component_class_filter_get_supported_mip_versions_method
+
+ Filter component class's "get supported MIP versions" method.
+ @endparblock
+
+@bt_pre_not_null{_method}
+*/
+#define BT_PLUGIN_FILTER_COMPONENT_CLASS_GET_SUPPORTED_MIP_VERSIONS_METHOD_WITH_ID(_plugin_id, _component_class_id, _method) \
+ __BT_PLUGIN_COMPONENT_CLASS_DESCRIPTOR_ATTRIBUTE(filter_get_supported_mip_versions_method, BT_PLUGIN_COMPONENT_CLASS_DESCRIPTOR_ATTRIBUTE_TYPE_GET_SUPPORTED_MIP_VERSIONS, _plugin_id, _component_class_id, filter, _method)
+
+/*!
+@brief
+ Alias of
+ BT_PLUGIN_FILTER_COMPONENT_CLASS_GET_SUPPORTED_MIP_VERSIONS_METHOD_WITH_ID()
+ with the \bt_p{_plugin_id} parameter set to <code>auto</code> and
+ the \bt_p{_component_class_id} parameter set to \bt_p{_name}.
+*/
+#define BT_PLUGIN_FILTER_COMPONENT_CLASS_GET_SUPPORTED_MIP_VERSIONS_METHOD(_name, _method) \
+ BT_PLUGIN_FILTER_COMPONENT_CLASS_GET_SUPPORTED_MIP_VERSIONS_METHOD_WITH_ID(auto, _name, _method)
+
+/*!
+@brief
+ Sets the initialization method of the \bt_flt_comp_cls having the ID
+ \bt_p{_component_class_id} in the plugin having the ID
+ \bt_p{_plugin_id} to \bt_p{_method}.
+
+See the \ref api-comp-cls-dev-meth-init "initialize" method.
+
+@param[in] _plugin_id
+ @parblock
+ C identifier.
+
+ ID of the plugin which contains the filter component class of which
+ to set the initialization method.
+ @endparblock
+@param[in] _component_class_id
+ @parblock
+ C identifier.
+
+ ID of the filter component class, within the plugin having the ID
+ \bt_p{_plugin_id}, of which to set the initialization method to
+ \bt_p{_method}.
+ @endparblock
+@param[in] _method
+ @parblock
+ #bt_component_class_filter_initialize_method
+
+ Filter component class's initialization method.
+ @endparblock
+
+@bt_pre_not_null{_method}
+*/
+#define BT_PLUGIN_FILTER_COMPONENT_CLASS_INITIALIZE_METHOD_WITH_ID(_plugin_id, _component_class_id, _method) \
+ __BT_PLUGIN_COMPONENT_CLASS_DESCRIPTOR_ATTRIBUTE(filter_initialize_method, BT_PLUGIN_COMPONENT_CLASS_DESCRIPTOR_ATTRIBUTE_TYPE_INITIALIZE_METHOD, _plugin_id, _component_class_id, filter, _method)
+
+/*!
+@brief
+ Alias of
+ BT_PLUGIN_FILTER_COMPONENT_CLASS_INITIALIZE_METHOD_WITH_ID()
+ with the \bt_p{_plugin_id} parameter set to <code>auto</code> and
+ the \bt_p{_component_class_id} parameter set to \bt_p{_name}.
+*/
+#define BT_PLUGIN_FILTER_COMPONENT_CLASS_INITIALIZE_METHOD(_name, _method) \
+ BT_PLUGIN_FILTER_COMPONENT_CLASS_INITIALIZE_METHOD_WITH_ID(auto, _name, _method)
+
+/*!
+@brief
+ Sets the "input port connected" method of the \bt_flt_comp_cls
+ having the ID \bt_p{_component_class_id} in the plugin having the ID
+ \bt_p{_plugin_id} to \bt_p{_method}.
+
+See the
+\ref api-comp-cls-dev-meth-iport-connected "input port connected"
+method.
+
+@param[in] _plugin_id
+ @parblock
+ C identifier.
+
+ ID of the plugin which contains the filter component class of which
+ to set the "input port connected" method.
+ @endparblock
+@param[in] _component_class_id
+ @parblock
+ C identifier.
+
+ ID of the filter component class, within the plugin having the ID
+ \bt_p{_plugin_id}, of which to set the "input port connected"
+ method to \bt_p{_method}.
+ @endparblock
+@param[in] _method
+ @parblock
+ #bt_component_class_filter_input_port_connected_method
+
+ Filter component class's "input port connected" method.
+ @endparblock
+
+@bt_pre_not_null{_method}
+*/
+#define BT_PLUGIN_FILTER_COMPONENT_CLASS_INPUT_PORT_CONNECTED_METHOD_WITH_ID(_plugin_id, _component_class_id, _method) \
+ __BT_PLUGIN_COMPONENT_CLASS_DESCRIPTOR_ATTRIBUTE(filter_input_port_connected_method, BT_PLUGIN_COMPONENT_CLASS_DESCRIPTOR_ATTRIBUTE_TYPE_INPUT_PORT_CONNECTED_METHOD, _plugin_id, _component_class_id, filter, _method)
+
+/*!
+@brief
+ Alias of
+ BT_PLUGIN_FILTER_COMPONENT_CLASS_INPUT_PORT_CONNECTED_METHOD_WITH_ID()
+ with the \bt_p{_plugin_id} parameter set to <code>auto</code> and
+ the \bt_p{_component_class_id} parameter set to \bt_p{_name}.
+*/
+#define BT_PLUGIN_FILTER_COMPONENT_CLASS_INPUT_PORT_CONNECTED_METHOD(_name, _method) \
+ BT_PLUGIN_FILTER_COMPONENT_CLASS_INPUT_PORT_CONNECTED_METHOD_WITH_ID(auto, _name, _method)
+
+/*!
+@brief
+ Sets the finalization method of the \bt_msg_iter_cls of the
+ \bt_flt_comp_cls having the ID \bt_p{_component_class_id} in the
+ plugin having the ID \bt_p{_plugin_id} to \bt_p{_method}.
+
+See the \ref api-msg-iter-cls-meth-fini "finalize" method.
+
+@param[in] _plugin_id
+ @parblock
+ C identifier.
+
+ ID of the plugin which contains the filter component class of which
+ to set the finalization method of the message iterator class.
+ @endparblock
+@param[in] _component_class_id
+ @parblock
+ C identifier.
+
+ ID of the filter component class, within the plugin having the ID
+ \bt_p{_plugin_id}, of which to set the finalization method of the
+ message iterator class to \bt_p{_method}.
+ @endparblock
+@param[in] _method
+ @parblock
+ #bt_message_iterator_class_finalize_method
+
+ Filter component class's message iterator class's finalization method.
+ @endparblock
+
+@bt_pre_not_null{_method}
+*/
+#define BT_PLUGIN_FILTER_COMPONENT_CLASS_MESSAGE_ITERATOR_CLASS_FINALIZE_METHOD_WITH_ID(_plugin_id, _component_class_id, _method) \
+ __BT_PLUGIN_COMPONENT_CLASS_DESCRIPTOR_ATTRIBUTE(msg_iter_finalize_method, BT_PLUGIN_COMPONENT_CLASS_DESCRIPTOR_ATTRIBUTE_TYPE_MSG_ITER_FINALIZE_METHOD, _plugin_id, _component_class_id, filter, _method)
+
+/*!
+@brief
+ Alias of
+ BT_PLUGIN_FILTER_COMPONENT_CLASS_MESSAGE_ITERATOR_CLASS_FINALIZE_METHOD_WITH_ID()
+ with the \bt_p{_plugin_id} parameter set to <code>auto</code> and
+ the \bt_p{_component_class_id} parameter set to \bt_p{_name}.
+*/
+#define BT_PLUGIN_FILTER_COMPONENT_CLASS_MESSAGE_ITERATOR_CLASS_FINALIZE_METHOD(_name, _method) \
+ BT_PLUGIN_FILTER_COMPONENT_CLASS_MESSAGE_ITERATOR_CLASS_FINALIZE_METHOD_WITH_ID(auto, _name, _method)
+
+/*!
+@brief
+ Sets the initialization method of the \bt_msg_iter_cls of the
+ \bt_flt_comp_cls having the ID \bt_p{_component_class_id} in the
+ plugin having the ID \bt_p{_plugin_id} to \bt_p{_method}.
+
+See the \ref api-msg-iter-cls-meth-init "initialize" method.
+
+@param[in] _plugin_id
+ @parblock
+ C identifier.
+
+ ID of the plugin which contains the filter component class of which
+ to set the initialization method of the message iterator class.
+ @endparblock
+@param[in] _component_class_id
+ @parblock
+ C identifier.
+
+ ID of the filter component class, within the plugin having the ID
+ \bt_p{_plugin_id}, of which to set the initialization method of the
+ message iterator class to \bt_p{_method}.
+ @endparblock
+@param[in] _method
+ @parblock
+ #bt_message_iterator_class_initialize_method
+
+ Filter component class's message iterator class's initialization
+ method.
+ @endparblock
+
+@bt_pre_not_null{_method}
+*/
+#define BT_PLUGIN_FILTER_COMPONENT_CLASS_MESSAGE_ITERATOR_CLASS_INITIALIZE_METHOD_WITH_ID(_plugin_id, _component_class_id, _method) \
+ __BT_PLUGIN_COMPONENT_CLASS_DESCRIPTOR_ATTRIBUTE(msg_iter_initialize_method, BT_PLUGIN_COMPONENT_CLASS_DESCRIPTOR_ATTRIBUTE_TYPE_MSG_ITER_INITIALIZE_METHOD, _plugin_id, _component_class_id, filter, _method)
+
+/*!
+@brief
+ Alias of
+ BT_PLUGIN_FILTER_COMPONENT_CLASS_MESSAGE_ITERATOR_CLASS_INITIALIZE_METHOD_WITH_ID()
+ with the \bt_p{_plugin_id} parameter set to <code>auto</code> and
+ the \bt_p{_component_class_id} parameter set to \bt_p{_name}.
+*/
+#define BT_PLUGIN_FILTER_COMPONENT_CLASS_MESSAGE_ITERATOR_CLASS_INITIALIZE_METHOD(_name, _method) \
+ BT_PLUGIN_FILTER_COMPONENT_CLASS_MESSAGE_ITERATOR_CLASS_INITIALIZE_METHOD_WITH_ID(auto, _name, _method)
+
+/*!
+@brief
+ Sets the "seek beginning" and "can seek beginning?" methods of the
+ \bt_msg_iter_cls of the \bt_flt_comp_cls having the ID
+ \bt_p{_component_class_id} in the plugin having the ID
+ \bt_p{_plugin_id} to \bt_p{_seek_method} and
+ \bt_p{_can_seek_method}.
+
+See the \ref api-msg-iter-cls-meth-seek-beg "seek beginning" and
+\ref api-msg-iter-cls-meth-can-seek-beg "can seek beginning?" methods.
+
+@param[in] _plugin_id
+ @parblock
+ C identifier.
+
+ ID of the plugin which contains the filter component class of which
+ to set the "seek beginning" and "can seek beginning?" methods of the
+ message iterator class.
+ @endparblock
+@param[in] _component_class_id
+ @parblock
+ C identifier.
+
+ ID of the filter component class, within the plugin having the ID
+ \bt_p{_plugin_id}, of which to set the "seek beginning" and "can
+ seek beginning" methods of the message iterator class to
+ \bt_p{_seek_method} and \bt_p{_can_seek_method}.
+ @endparblock
+@param[in] _seek_method
+ @parblock
+ #bt_message_iterator_class_seek_beginning_method
+
+ Filter component class's message iterator class's "seek beginning"
+ method.
+ @endparblock
+@param[in] _can_seek_method
+ @parblock
+ #bt_message_iterator_class_can_seek_beginning_method
+
+ Filter component class's message iterator class's
+ "can seek beginning?" method.
+
+ Can be \c NULL, in which case it is equivalent to setting a method
+ which always returns #BT_TRUE.
+ @endparblock
+
+@bt_pre_not_null{_seek_method}
+@bt_pre_not_null{_can_seek_method}
+*/
+#define BT_PLUGIN_FILTER_COMPONENT_CLASS_MESSAGE_ITERATOR_CLASS_SEEK_BEGINNING_METHODS_WITH_ID(_plugin_id, _component_class_id, _seek_method, _can_seek_method) \
+ __BT_PLUGIN_COMPONENT_CLASS_DESCRIPTOR_ATTRIBUTE(msg_iter_seek_beginning_method, BT_PLUGIN_COMPONENT_CLASS_DESCRIPTOR_ATTRIBUTE_TYPE_MSG_ITER_SEEK_BEGINNING_METHOD, _plugin_id, _component_class_id, filter, _seek_method); \
+ __BT_PLUGIN_COMPONENT_CLASS_DESCRIPTOR_ATTRIBUTE(msg_iter_can_seek_beginning_method, BT_PLUGIN_COMPONENT_CLASS_DESCRIPTOR_ATTRIBUTE_TYPE_MSG_ITER_CAN_SEEK_BEGINNING_METHOD, _plugin_id, _component_class_id, filter, _can_seek_method);
+
+/*!
+@brief
+ Alias of
+ BT_PLUGIN_FILTER_COMPONENT_CLASS_MESSAGE_ITERATOR_CLASS_SEEK_BEGINNING_METHODS_WITH_ID()
+ with the \bt_p{_plugin_id} parameter set to <code>auto</code> and
+ the \bt_p{_component_class_id} parameter set to \bt_p{_name}.
+*/
+#define BT_PLUGIN_FILTER_COMPONENT_CLASS_MESSAGE_ITERATOR_CLASS_SEEK_BEGINNING_METHODS(_name, _seek_method, _can_seek_method) \
+ BT_PLUGIN_FILTER_COMPONENT_CLASS_MESSAGE_ITERATOR_CLASS_SEEK_BEGINNING_METHODS_WITH_ID(auto, _name, _seek_method, _can_seek_method)
+
+/*!
+@brief
+ Sets the "seek ns from origin" and "can seek ns from origin?"
+ methods of the \bt_msg_iter_cls of the \bt_flt_comp_cls having the
+ ID \bt_p{_component_class_id} in the plugin having the ID
+ \bt_p{_plugin_id} to \bt_p{_seek_method} and
+ \bt_p{_can_seek_method}.
+
+See the \ref api-msg-iter-cls-meth-seek-ns "seek ns from origin" and
+\ref api-msg-iter-cls-meth-can-seek-ns "can seek ns from origin?"
+methods.
+
+@param[in] _plugin_id
+ @parblock
+ C identifier.
+
+ ID of the plugin which contains the filter component class of which
+ to set the "seek ns from origin" and "can seek ns from origin?"
+ methods of the message iterator class.
+ @endparblock
+@param[in] _component_class_id
+ @parblock
+ C identifier.
+
+ ID of the filter component class, within the plugin having the ID
+ \bt_p{_plugin_id}, of which to set the "seek ns from origin" and
+ "can seek ns from origin" methods of the message iterator class to
+ \bt_p{_seek_method} and \bt_p{_can_seek_method}.
+ @endparblock
+@param[in] _seek_method
+ @parblock
+ #bt_message_iterator_class_seek_ns_from_origin_method
+
+ Filter component class's message iterator class's "seek ns from
+ origin" method.
+ @endparblock
+@param[in] _can_seek_method
+ @parblock
+ #bt_message_iterator_class_can_seek_ns_from_origin_method
+
+ Filter component class's message iterator class's "can seek ns from
+ origin?" method.
+
+ Can be \c NULL, in which case it is equivalent to setting a method
+ which always returns #BT_TRUE.
+ @endparblock
+
+@bt_pre_not_null{_seek_method}
+@bt_pre_not_null{_can_seek_method}
+*/
+#define BT_PLUGIN_FILTER_COMPONENT_CLASS_MESSAGE_ITERATOR_CLASS_SEEK_NS_FROM_ORIGIN_METHODS_WITH_ID(_plugin_id, _component_class_id, _seek_method, _can_seek_method) \
+ __BT_PLUGIN_COMPONENT_CLASS_DESCRIPTOR_ATTRIBUTE(msg_iter_seek_ns_from_origin_method, BT_PLUGIN_COMPONENT_CLASS_DESCRIPTOR_ATTRIBUTE_TYPE_MSG_ITER_SEEK_NS_FROM_ORIGIN_METHOD, _plugin_id, _component_class_id, filter, _seek_method); \
+ __BT_PLUGIN_COMPONENT_CLASS_DESCRIPTOR_ATTRIBUTE(msg_iter_can_seek_ns_from_origin_method, BT_PLUGIN_COMPONENT_CLASS_DESCRIPTOR_ATTRIBUTE_TYPE_MSG_ITER_CAN_SEEK_NS_FROM_ORIGIN_METHOD, _plugin_id, _component_class_id, filter, _can_seek_method)
+
+/*!
+@brief
+ Alias of
+ BT_PLUGIN_FILTER_COMPONENT_CLASS_MESSAGE_ITERATOR_CLASS_SEEK_NS_FROM_ORIGIN_METHODS_WITH_ID()
+ with the \bt_p{_plugin_id} parameter set to <code>auto</code> and
+ the \bt_p{_component_class_id} parameter set to \bt_p{_name}.
+*/
+#define BT_PLUGIN_FILTER_COMPONENT_CLASS_MESSAGE_ITERATOR_CLASS_SEEK_NS_FROM_ORIGIN_METHODS(_name, _seek_method, _can_seek_method) \
+ BT_PLUGIN_FILTER_COMPONENT_CLASS_MESSAGE_ITERATOR_CLASS_SEEK_NS_FROM_ORIGIN_METHODS_WITH_ID(auto, _name, _seek_method, _can_seek_method)
+
+/*!
+@brief
+ Sets the "output port connected" method of the \bt_flt_comp_cls
+ having the ID \bt_p{_component_class_id} in the plugin having the ID
+ \bt_p{_plugin_id} to \bt_p{_method}.
+
+See the
+\ref api-comp-cls-dev-meth-oport-connected "output port connected"
+method.
+
+@param[in] _plugin_id
+ @parblock
+ C identifier.
+
+ ID of the plugin which contains the filter component class of which
+ to set the "output port connected" method.
+ @endparblock
+@param[in] _component_class_id
+ @parblock
+ C identifier.
+
+ ID of the filter component class, within the plugin having the ID
+ \bt_p{_plugin_id}, of which to set the "output port connected"
+ method to \bt_p{_method}.
+ @endparblock
+@param[in] _method
+ @parblock
+ #bt_component_class_filter_output_port_connected_method
+
+ Filter component class's "output port connected" method.
+ @endparblock
+
+@bt_pre_not_null{_method}
+*/
+#define BT_PLUGIN_FILTER_COMPONENT_CLASS_OUTPUT_PORT_CONNECTED_METHOD_WITH_ID(_plugin_id, _component_class_id, _method) \
+ __BT_PLUGIN_COMPONENT_CLASS_DESCRIPTOR_ATTRIBUTE(filter_output_port_connected_method, BT_PLUGIN_COMPONENT_CLASS_DESCRIPTOR_ATTRIBUTE_TYPE_OUTPUT_PORT_CONNECTED_METHOD, _plugin_id, _component_class_id, filter, _method)
+
+/*!
+@brief
+ Alias of
+ BT_PLUGIN_FILTER_COMPONENT_CLASS_OUTPUT_PORT_CONNECTED_METHOD_WITH_ID()
+ with the \bt_p{_plugin_id} parameter set to <code>auto</code> and
+ the \bt_p{_component_class_id} parameter set to \bt_p{_name}.
+*/
+#define BT_PLUGIN_FILTER_COMPONENT_CLASS_OUTPUT_PORT_CONNECTED_METHOD(_name, _method) \
+ BT_PLUGIN_FILTER_COMPONENT_CLASS_OUTPUT_PORT_CONNECTED_METHOD_WITH_ID(auto, _name, _method)
+
+/*!
+@brief
+ Sets the query method of the \bt_flt_comp_cls
+ having the ID \bt_p{_component_class_id} in the plugin having the ID
+ \bt_p{_plugin_id} to \bt_p{_method}.
+
+See the \ref api-comp-cls-dev-meth-query "query" method.
+
+@param[in] _plugin_id
+ @parblock
+ C identifier.
+
+ ID of the plugin which contains the filter component class of which
+ to set the query method.
+ @endparblock
+@param[in] _component_class_id
+ @parblock
+ C identifier.
+
+ ID of the filter component class, within the plugin having the ID
+ \bt_p{_plugin_id}, of which to set the query
+ method to \bt_p{_method}.
+ @endparblock
+@param[in] _method
+ @parblock
+ #bt_component_class_filter_query_method
+
+ Filter component class's query method.
+ @endparblock
+
+@bt_pre_not_null{_method}
+*/
+#define BT_PLUGIN_FILTER_COMPONENT_CLASS_QUERY_METHOD_WITH_ID(_plugin_id, _component_class_id, _method) \
+ __BT_PLUGIN_COMPONENT_CLASS_DESCRIPTOR_ATTRIBUTE(filter_query_method, BT_PLUGIN_COMPONENT_CLASS_DESCRIPTOR_ATTRIBUTE_TYPE_QUERY_METHOD, _plugin_id, _component_class_id, filter, _method)
+
+/*!
+@brief
+ Alias of
+ BT_PLUGIN_FILTER_COMPONENT_CLASS_QUERY_METHOD_WITH_ID()
+ with the \bt_p{_plugin_id} parameter set to <code>auto</code> and
+ the \bt_p{_component_class_id} parameter set to \bt_p{_name}.
+*/
+#define BT_PLUGIN_FILTER_COMPONENT_CLASS_QUERY_METHOD(_name, _method) \
+ BT_PLUGIN_FILTER_COMPONENT_CLASS_QUERY_METHOD_WITH_ID(auto, _name, _method)
+
+/*! @} */
+
+/*!
+@name Sink component class methods
+@{
+*/
+
+/*!
+@brief
+ Sets the finalization method of the \bt_sink_comp_cls having the ID
+ \bt_p{_component_class_id} in the plugin having the ID
+ \bt_p{_plugin_id} to \bt_p{_method}.
+
+See the \ref api-comp-cls-dev-meth-fini "finalize" method.
+
+@param[in] _plugin_id
+ @parblock
+ C identifier.
+
+ ID of the plugin which contains the sink component class of which
+ to set the finalization method.
+ @endparblock
+@param[in] _component_class_id
+ @parblock
+ C identifier.
+
+ ID of the sink component class, within the plugin having the ID
+ \bt_p{_plugin_id}, of which to set the finalization method to
+ \bt_p{_method}.
+ @endparblock
+@param[in] _method
+ @parblock
+ #bt_component_class_sink_finalize_method
+
+ Sink component class's finalization method.
+ @endparblock
+
+@bt_pre_not_null{_method}
+*/
+#define BT_PLUGIN_SINK_COMPONENT_CLASS_FINALIZE_METHOD_WITH_ID(_plugin_id, _component_class_id, _method) \
+ __BT_PLUGIN_COMPONENT_CLASS_DESCRIPTOR_ATTRIBUTE(sink_finalize_method, BT_PLUGIN_COMPONENT_CLASS_DESCRIPTOR_ATTRIBUTE_TYPE_FINALIZE_METHOD, _plugin_id, _component_class_id, sink, _method)
+
+/*!
+@brief
+ Alias of
+ BT_PLUGIN_SINK_COMPONENT_CLASS_FINALIZE_METHOD_WITH_ID()
+ with the \bt_p{_plugin_id} parameter set to <code>auto</code> and
+ the \bt_p{_component_class_id} parameter set to \bt_p{_name}.
+*/
+#define BT_PLUGIN_SINK_COMPONENT_CLASS_FINALIZE_METHOD(_name, _method) \
+ BT_PLUGIN_SINK_COMPONENT_CLASS_FINALIZE_METHOD_WITH_ID(auto, _name, _method)
+
+/*!
+@brief
+ Sets the \"get supported \bt_mip versions\" method of the
+ \bt_sink_comp_cls having the ID \bt_p{_component_class_id} in the
+ plugin having the ID \bt_p{_plugin_id} to \bt_p{_method}.
+
+See the \ref api-comp-cls-dev-meth-mip "get supported MIP versions"
+method.
+
+@param[in] _plugin_id
+ @parblock
+ C identifier.
+
+ ID of the plugin which contains the sink component class of which
+ to set the "get supported MIP versions" method.
+ @endparblock
+@param[in] _component_class_id
+ @parblock
+ C identifier.
+
+ ID of the sink component class, within the plugin having the ID
+ \bt_p{_plugin_id}, of which to set the "get supported MIP versions"
+ method to \bt_p{_method}.
+ @endparblock
+@param[in] _method
+ @parblock
+ #bt_component_class_sink_get_supported_mip_versions_method
+
+ Sink component class's "get supported MIP versions" method.
+ @endparblock
+
+@bt_pre_not_null{_method}
+*/
+#define BT_PLUGIN_SINK_COMPONENT_CLASS_GET_SUPPORTED_MIP_VERSIONS_METHOD_WITH_ID(_plugin_id, _component_class_id, _method) \
+ __BT_PLUGIN_COMPONENT_CLASS_DESCRIPTOR_ATTRIBUTE(sink_get_supported_mip_versions_method, BT_PLUGIN_COMPONENT_CLASS_DESCRIPTOR_ATTRIBUTE_TYPE_GET_SUPPORTED_MIP_VERSIONS, _plugin_id, _component_class_id, sink, _method)
+
+/*!
+@brief
+ Alias of
+ BT_PLUGIN_SINK_COMPONENT_CLASS_GET_SUPPORTED_MIP_VERSIONS_METHOD_WITH_ID()
+ with the \bt_p{_plugin_id} parameter set to <code>auto</code> and
+ the \bt_p{_component_class_id} parameter set to \bt_p{_name}.
+*/
+#define BT_PLUGIN_SINK_COMPONENT_CLASS_GET_SUPPORTED_MIP_VERSIONS_METHOD(_name, _method) \
+ BT_PLUGIN_SINK_COMPONENT_CLASS_GET_SUPPORTED_MIP_VERSIONS_METHOD_WITH_ID(auto, _name, _method)
+
+/*!
+@brief
+ Sets the "graph is configured" method of the \bt_sink_comp_cls
+ having the ID \bt_p{_component_class_id} in the plugin having the ID
+ \bt_p{_plugin_id} to \bt_p{_method}.
+
+See the
+\ref api-comp-cls-dev-meth-graph-configured "graph is configured"
+method.
+
+@param[in] _plugin_id
+ @parblock
+ C identifier.
+
+ ID of the plugin which contains the sink component class of which
+ to set the "graph is configured" method.
+ @endparblock
+@param[in] _component_class_id
+ @parblock
+ C identifier.
+
+ ID of the sink component class, within the plugin having the ID
+ \bt_p{_plugin_id}, of which to set the "graph is configured"
+ method to \bt_p{_method}.
+ @endparblock
+@param[in] _method
+ @parblock
+ #bt_component_class_sink_graph_is_configured_method
+
+ Sink component class's "graph is configured" method.
+ @endparblock
+
+@bt_pre_not_null{_method}
+*/
+#define BT_PLUGIN_SINK_COMPONENT_CLASS_GRAPH_IS_CONFIGURED_METHOD_WITH_ID(_plugin_id, _component_class_id, _method) \
+ __BT_PLUGIN_COMPONENT_CLASS_DESCRIPTOR_ATTRIBUTE(sink_graph_is_configured_method, BT_PLUGIN_COMPONENT_CLASS_DESCRIPTOR_ATTRIBUTE_TYPE_GRAPH_IS_CONFIGURED_METHOD, _plugin_id, _component_class_id, sink, _method)
+
+/*!
+@brief
+ Alias of
+ BT_PLUGIN_SINK_COMPONENT_CLASS_GRAPH_IS_CONFIGURED_METHOD_WITH_ID()
+ with the \bt_p{_plugin_id} parameter set to <code>auto</code> and
+ the \bt_p{_component_class_id} parameter set to \bt_p{_name}.
+*/
+#define BT_PLUGIN_SINK_COMPONENT_CLASS_GRAPH_IS_CONFIGURED_METHOD(_name, _method) \
+ BT_PLUGIN_SINK_COMPONENT_CLASS_GRAPH_IS_CONFIGURED_METHOD_WITH_ID(auto, _name, _method)
+
+/*!
+@brief
+ Sets the initialization method of the \bt_sink_comp_cls having the
+ ID \bt_p{_component_class_id} in the plugin having the ID
+ \bt_p{_plugin_id} to \bt_p{_method}.
+
+See the \ref api-comp-cls-dev-meth-init "initialize" method.
+
+@param[in] _plugin_id
+ @parblock
+ C identifier.
+
+ ID of the plugin which contains the sink component class of which
+ to set the initialization method.
+ @endparblock
+@param[in] _component_class_id
+ @parblock
+ C identifier.
+
+ ID of the sink component class, within the plugin having the ID
+ \bt_p{_plugin_id}, of which to set the initialization method to
+ \bt_p{_method}.
+ @endparblock
+@param[in] _method
+ @parblock
+ #bt_component_class_sink_initialize_method
+
+ Sink component class's initialization method.
+ @endparblock
+
+@bt_pre_not_null{_method}
+*/
+#define BT_PLUGIN_SINK_COMPONENT_CLASS_INITIALIZE_METHOD_WITH_ID(_plugin_id, _component_class_id, _method) \
+ __BT_PLUGIN_COMPONENT_CLASS_DESCRIPTOR_ATTRIBUTE(sink_initialize_method, BT_PLUGIN_COMPONENT_CLASS_DESCRIPTOR_ATTRIBUTE_TYPE_INITIALIZE_METHOD, _plugin_id, _component_class_id, sink, _method)
+
+/*!
+@brief
+ Alias of
+ BT_PLUGIN_SINK_COMPONENT_CLASS_INITIALIZE_METHOD_WITH_ID()
+ with the \bt_p{_plugin_id} parameter set to <code>auto</code> and
+ the \bt_p{_component_class_id} parameter set to \bt_p{_name}.
+*/
+#define BT_PLUGIN_SINK_COMPONENT_CLASS_INITIALIZE_METHOD(_name, _method) \
+ BT_PLUGIN_SINK_COMPONENT_CLASS_INITIALIZE_METHOD_WITH_ID(auto, _name, _method)
+
+/*!
+@brief
+ Sets the "input port connected" method of the \bt_sink_comp_cls
+ having the ID \bt_p{_component_class_id} in the plugin having the ID
+ \bt_p{_plugin_id} to \bt_p{_method}.
+
+See the
+\ref api-comp-cls-dev-meth-iport-connected "input port connected"
+method.
+
+@param[in] _plugin_id
+ @parblock
+ C identifier.
+
+ ID of the plugin which contains the sink component class of which
+ to set the "input port connected" method.
+ @endparblock
+@param[in] _component_class_id
+ @parblock
+ C identifier.
+
+ ID of the sink component class, within the plugin having the ID
+ \bt_p{_plugin_id}, of which to set the "input port connected"
+ method to \bt_p{_method}.
+ @endparblock
+@param[in] _method
+ @parblock
+ #bt_component_class_sink_input_port_connected_method
+
+ Sink component class's "input port connected" method.
+ @endparblock
+
+@bt_pre_not_null{_method}
+*/
+#define BT_PLUGIN_SINK_COMPONENT_CLASS_INPUT_PORT_CONNECTED_METHOD_WITH_ID(_plugin_id, _component_class_id, _method) \
+ __BT_PLUGIN_COMPONENT_CLASS_DESCRIPTOR_ATTRIBUTE(sink_input_port_connected_method, BT_PLUGIN_COMPONENT_CLASS_DESCRIPTOR_ATTRIBUTE_TYPE_INPUT_PORT_CONNECTED_METHOD, _plugin_id, _component_class_id, sink, _method)
+
+/*!
+@brief
+ Alias of
+ BT_PLUGIN_SINK_COMPONENT_CLASS_INPUT_PORT_CONNECTED_METHOD_WITH_ID()
+ with the \bt_p{_plugin_id} parameter set to <code>auto</code> and
+ the \bt_p{_component_class_id} parameter set to \bt_p{_name}.
+*/
+#define BT_PLUGIN_SINK_COMPONENT_CLASS_INPUT_PORT_CONNECTED_METHOD(_name, _method) \
+ BT_PLUGIN_SINK_COMPONENT_CLASS_INPUT_PORT_CONNECTED_METHOD_WITH_ID(auto, _name, _method)
+
+/*!
+@brief
+ Sets the query method of the \bt_sink_comp_cls
+ having the ID \bt_p{_component_class_id} in the plugin having the ID
+ \bt_p{_plugin_id} to \bt_p{_method}.
+
+See the \ref api-comp-cls-dev-meth-query "query" method.
+
+@param[in] _plugin_id
+ @parblock
+ C identifier.
+
+ ID of the plugin which contains the sink component class of which
+ to set the query method.
+ @endparblock
+@param[in] _component_class_id
+ @parblock
+ C identifier.
+
+ ID of the sink component class, within the plugin having the ID
+ \bt_p{_plugin_id}, of which to set the query
+ method to \bt_p{_method}.
+ @endparblock
+@param[in] _method
+ @parblock
+ #bt_component_class_sink_query_method
+
+ Sink component class's query method.
+ @endparblock
+
+@bt_pre_not_null{_method}
+*/
+#define BT_PLUGIN_SINK_COMPONENT_CLASS_QUERY_METHOD_WITH_ID(_plugin_id, _component_class_id, _method) \
+ __BT_PLUGIN_COMPONENT_CLASS_DESCRIPTOR_ATTRIBUTE(sink_query_method, BT_PLUGIN_COMPONENT_CLASS_DESCRIPTOR_ATTRIBUTE_TYPE_QUERY_METHOD, _plugin_id, _component_class_id, sink, _method)
+
+/*!
+@brief
+ Alias of
+ BT_PLUGIN_SINK_COMPONENT_CLASS_QUERY_METHOD_WITH_ID()
+ with the \bt_p{_plugin_id} parameter set to <code>auto</code> and
+ the \bt_p{_component_class_id} parameter set to \bt_p{_name}.
+*/
+#define BT_PLUGIN_SINK_COMPONENT_CLASS_QUERY_METHOD(_name, _method) \
+ BT_PLUGIN_SINK_COMPONENT_CLASS_QUERY_METHOD_WITH_ID(auto, _name, _method)
+
+/*! @} */
+
+/*! @} */