#include <babeltrace2/babeltrace.h>
+#include "cpp-common/bt2c/c-string-view.hpp"
#include "cpp-common/bt2c/logging.hpp"
#include "cpp-common/vendor/fmt/core.h"
namespace bt2 {
namespace internal {
-constexpr const char *unhandledExcLogStr() noexcept
+constexpr bt2c::CStringView unhandledExcLogStr() noexcept
{
return "Unhandled exception.";
}
-constexpr const char *unhandledExcLogTag() noexcept
+constexpr bt2c::CStringView unhandledExcLogTag() noexcept
{
return "PLUGIN-DEV-HPP";
}
}
protected:
- const char *_name() const noexcept
+ bt2c::CStringView _name() const noexcept
{
return _mSelfComp.name();
}
* `bt2::SelfSourceComponent` parameter, which it needs to forward to
* bt2::UserSourceComponent::UserSourceComponent(), and a
* `bt2::ConstValue` parameter (initialization parameters).
+ *
+ * `UserMessageIteratorT`, the message iterator class to use, must inherit
+ * `UserMessageIterator`.
*/
-template <typename UserComponentT>
+template <typename UserComponentT, typename UserMessageIteratorT>
class UserSourceComponent : public UserComponent<SelfSourceComponent>
{
+ static_assert(std::is_base_of<UserMessageIterator<UserMessageIteratorT, UserComponentT>,
+ UserMessageIteratorT>::value,
+ "`UserMessageIteratorT` inherits `UserMessageIterator`");
+
+public:
+ using MessageIterator = UserMessageIteratorT;
+
protected:
using _OutputPorts = SelfSourceComponent::OutputPorts;
public:
static Value::Shared query(const SelfComponentClass selfCompCls,
- const PrivateQueryExecutor privQueryExec, const char * const obj,
- const ConstValue params)
+ const PrivateQueryExecutor privQueryExec,
+ const bt2c::CStringView obj, const ConstValue params)
{
return UserComponentT::_query(selfCompCls, privQueryExec, obj, params);
}
protected:
/* Overloadable */
- static Value::Shared _query(SelfComponentClass, PrivateQueryExecutor, const char *, ConstValue)
+ static Value::Shared _query(SelfComponentClass, PrivateQueryExecutor, bt2c::CStringView,
+ ConstValue)
{
throw UnknownObject {};
}
}
template <typename DataT>
- _OutputPorts::Port _addOutputPort(const char * const name, DataT * const data)
+ _OutputPorts::Port _addOutputPort(const bt2c::CStringView name, DataT * const data)
{
return this->_selfComp().addOutputPort(name, data);
}
- _OutputPorts::Port _addOutputPort(const char *name)
- {
- return this->_selfComp().addOutputPort(name);
- }
-
- template <typename DataT>
- _OutputPorts::Port _addOutputPort(const std::string& name, DataT * const data)
- {
- return this->_selfComp().addOutputPort(name, data);
- }
-
- _OutputPorts::Port _addOutputPort(const std::string& name)
+ _OutputPorts::Port _addOutputPort(const bt2c::CStringView name)
{
return this->_selfComp().addOutputPort(name);
}
* `bt2::SelfFilterComponent` parameter, which it needs to forward to
* bt2::UserFilterComponent::UserFilterComponent(), and a
* `bt2::ConstValue` parameter (initialization parameters).
+ *
+ * `UserMessageIteratorT`, the message iterator class to use, must inherit
+ * `UserMessageIterator`.
*/
-template <typename UserComponentT>
+template <typename UserComponentT, typename UserMessageIteratorT>
class UserFilterComponent : public UserComponent<SelfFilterComponent>
{
+ static_assert(std::is_base_of<UserMessageIterator<UserMessageIteratorT, UserComponentT>,
+ UserMessageIteratorT>::value,
+ "`UserMessageIteratorT` inherits `UserMessageIterator`");
+
+public:
+ using MessageIterator = UserMessageIteratorT;
+
protected:
using _InputPorts = SelfFilterComponent::InputPorts;
using _OutputPorts = SelfFilterComponent::OutputPorts;
public:
static Value::Shared query(const SelfComponentClass selfCompCls,
- const PrivateQueryExecutor privQueryExec, const char * const obj,
- const ConstValue params)
+ const PrivateQueryExecutor privQueryExec,
+ const bt2c::CStringView obj, const ConstValue params)
{
return UserComponentT::_query(selfCompCls, privQueryExec, obj, params);
}
protected:
/* Overloadable */
- static Value::Shared _query(SelfComponentClass, PrivateQueryExecutor, const char *, ConstValue)
+ static Value::Shared _query(SelfComponentClass, PrivateQueryExecutor, bt2c::CStringView,
+ ConstValue)
{
throw UnknownObject {};
}
}
template <typename DataT>
- _OutputPorts::Port _addInputPort(const char * const name, DataT * const data)
- {
- return this->_selfComp().addInputPort(name, data);
- }
-
- _InputPorts::Port _addInputPort(const char *name)
- {
- return this->_selfComp().addInputPort(name);
- }
-
- template <typename DataT>
- _InputPorts::Port _addInputPort(const std::string& name, DataT * const data)
+ _OutputPorts::Port _addInputPort(const bt2c::CStringView name, DataT * const data)
{
return this->_selfComp().addInputPort(name, data);
}
- _InputPorts::Port _addInputPort(const std::string& name)
+ _InputPorts::Port _addInputPort(const bt2c::CStringView name)
{
return this->_selfComp().addInputPort(name);
}
}
template <typename DataT>
- _OutputPorts::Port _addOutputPort(const char * const name, DataT * const data)
+ _OutputPorts::Port _addOutputPort(const bt2c::CStringView name, DataT * const data)
{
return this->_selfComp().addOutputPort(name, data);
}
- _OutputPorts::Port _addOutputPort(const char *name)
- {
- return this->_selfComp().addOutputPort(name);
- }
-
- template <typename DataT>
- _OutputPorts::Port _addOutputPort(const std::string& name, DataT * const data)
- {
- return this->_selfComp().addOutputPort(name, data);
- }
-
- _OutputPorts::Port _addOutputPort(const std::string& name)
+ _OutputPorts::Port _addOutputPort(const bt2c::CStringView name)
{
return this->_selfComp().addOutputPort(name);
}
public:
static Value::Shared query(const SelfComponentClass selfCompCls,
- const PrivateQueryExecutor privQueryExec, const char * const obj,
- const ConstValue params)
+ const PrivateQueryExecutor privQueryExec,
+ const bt2c::CStringView obj, const ConstValue params)
{
return UserComponentT::_query(selfCompCls, privQueryExec, obj, params);
}
protected:
/* Overloadable */
- static Value::Shared _query(SelfComponentClass, PrivateQueryExecutor, const char *, ConstValue)
+ static Value::Shared _query(SelfComponentClass, PrivateQueryExecutor, bt2c::CStringView,
+ ConstValue)
{
throw UnknownObject {};
}
}
template <typename DataT>
- _InputPorts::Port _addInputPort(const char * const name, DataT * const data)
- {
- return this->_selfComp().addInputPort(name, data);
- }
-
- _InputPorts::Port _addInputPort(const char *name)
- {
- return this->_selfComp().addInputPort(name);
- }
-
- template <typename DataT>
- _InputPorts::Port _addInputPort(const std::string& name, DataT * const data)
+ _InputPorts::Port _addInputPort(const bt2c::CStringView name, DataT * const data)
{
return this->_selfComp().addInputPort(name, data);
}
- _InputPorts::Port _addInputPort(const std::string& name)
+ _InputPorts::Port _addInputPort(const bt2c::CStringView name)
{
return this->_selfComp().addInputPort(name);
}
} /* namespace bt2 */
-#define BT_CPP_PLUGIN_SOURCE_COMPONENT_CLASS_WITH_ID( \
- _pluginId, _componentClassId, _name, _userComponentClass, _userMessageIteratorClass) \
+#define BT_CPP_PLUGIN_SOURCE_COMPONENT_CLASS_WITH_ID(_pluginId, _componentClassId, _name, \
+ _userComponentClass) \
BT_PLUGIN_SOURCE_COMPONENT_CLASS_WITH_ID( \
_pluginId, _componentClassId, _name, \
- bt2::internal::MsgIterClsBridge<_userMessageIteratorClass>::next); \
+ bt2::internal::MsgIterClsBridge<_userComponentClass::MessageIterator>::next); \
BT_PLUGIN_SOURCE_COMPONENT_CLASS_INITIALIZE_METHOD_WITH_ID( \
_pluginId, _componentClassId, bt2::internal::SrcCompClsBridge<_userComponentClass>::init); \
BT_PLUGIN_SOURCE_COMPONENT_CLASS_FINALIZE_METHOD_WITH_ID( \
bt2::internal::SrcCompClsBridge<_userComponentClass>::query); \
BT_PLUGIN_SOURCE_COMPONENT_CLASS_MESSAGE_ITERATOR_CLASS_INITIALIZE_METHOD_WITH_ID( \
_pluginId, _componentClassId, \
- bt2::internal::MsgIterClsBridge<_userMessageIteratorClass>::init); \
+ bt2::internal::MsgIterClsBridge<_userComponentClass::MessageIterator>::init); \
BT_PLUGIN_SOURCE_COMPONENT_CLASS_MESSAGE_ITERATOR_CLASS_FINALIZE_METHOD_WITH_ID( \
_pluginId, _componentClassId, \
- bt2::internal::MsgIterClsBridge<_userMessageIteratorClass>::finalize); \
+ bt2::internal::MsgIterClsBridge<_userComponentClass::MessageIterator>::finalize); \
BT_PLUGIN_SOURCE_COMPONENT_CLASS_MESSAGE_ITERATOR_CLASS_SEEK_BEGINNING_METHODS_WITH_ID( \
_pluginId, _componentClassId, \
- bt2::internal::MsgIterClsBridge<_userMessageIteratorClass>::seekBeginning, \
- bt2::internal::MsgIterClsBridge<_userMessageIteratorClass>::canSeekBeginning); \
+ bt2::internal::MsgIterClsBridge<_userComponentClass::MessageIterator>::seekBeginning, \
+ bt2::internal::MsgIterClsBridge<_userComponentClass::MessageIterator>::canSeekBeginning); \
BT_PLUGIN_SOURCE_COMPONENT_CLASS_MESSAGE_ITERATOR_CLASS_SEEK_NS_FROM_ORIGIN_METHODS_WITH_ID( \
_pluginId, _componentClassId, \
- bt2::internal::MsgIterClsBridge<_userMessageIteratorClass>::seekNsFromOrigin, \
- bt2::internal::MsgIterClsBridge<_userMessageIteratorClass>::canSeekNsFromOrigin);
+ bt2::internal::MsgIterClsBridge<_userComponentClass::MessageIterator>::seekNsFromOrigin, \
+ bt2::internal::MsgIterClsBridge< \
+ _userComponentClass::MessageIterator>::canSeekNsFromOrigin);
-#define BT_CPP_PLUGIN_FILTER_COMPONENT_CLASS_WITH_ID( \
- _pluginId, _componentClassId, _name, _userComponentClass, _userMessageIteratorClass) \
+#define BT_CPP_PLUGIN_FILTER_COMPONENT_CLASS_WITH_ID(_pluginId, _componentClassId, _name, \
+ _userComponentClass) \
BT_PLUGIN_FILTER_COMPONENT_CLASS_WITH_ID( \
_pluginId, _componentClassId, _name, \
- bt2::internal::MsgIterClsBridge<_userMessageIteratorClass>::next); \
+ bt2::internal::MsgIterClsBridge<_userComponentClass::MessageIterator>::next); \
BT_PLUGIN_FILTER_COMPONENT_CLASS_INITIALIZE_METHOD_WITH_ID( \
_pluginId, _componentClassId, bt2::internal::FltCompClsBridge<_userComponentClass>::init); \
BT_PLUGIN_FILTER_COMPONENT_CLASS_FINALIZE_METHOD_WITH_ID( \
bt2::internal::FltCompClsBridge<_userComponentClass>::query); \
BT_PLUGIN_FILTER_COMPONENT_CLASS_MESSAGE_ITERATOR_CLASS_INITIALIZE_METHOD_WITH_ID( \
_pluginId, _componentClassId, \
- bt2::internal::MsgIterClsBridge<_userMessageIteratorClass>::init); \
+ bt2::internal::MsgIterClsBridge<_userComponentClass::MessageIterator>::init); \
BT_PLUGIN_FILTER_COMPONENT_CLASS_MESSAGE_ITERATOR_CLASS_FINALIZE_METHOD_WITH_ID( \
_pluginId, _componentClassId, \
- bt2::internal::MsgIterClsBridge<_userMessageIteratorClass>::finalize); \
+ bt2::internal::MsgIterClsBridge<_userComponentClass::MessageIterator>::finalize); \
BT_PLUGIN_FILTER_COMPONENT_CLASS_MESSAGE_ITERATOR_CLASS_SEEK_BEGINNING_METHODS_WITH_ID( \
_pluginId, _componentClassId, \
- bt2::internal::MsgIterClsBridge<_userMessageIteratorClass>::seekBeginning, \
- bt2::internal::MsgIterClsBridge<_userMessageIteratorClass>::canSeekBeginning); \
+ bt2::internal::MsgIterClsBridge<_userComponentClass::MessageIterator>::seekBeginning, \
+ bt2::internal::MsgIterClsBridge<_userComponentClass::MessageIterator>::canSeekBeginning); \
BT_PLUGIN_FILTER_COMPONENT_CLASS_MESSAGE_ITERATOR_CLASS_SEEK_NS_FROM_ORIGIN_METHODS_WITH_ID( \
_pluginId, _componentClassId, \
- bt2::internal::MsgIterClsBridge<_userMessageIteratorClass>::seekNsFromOrigin, \
- bt2::internal::MsgIterClsBridge<_userMessageIteratorClass>::canSeekNsFromOrigin);
+ bt2::internal::MsgIterClsBridge<_userComponentClass::MessageIterator>::seekNsFromOrigin, \
+ bt2::internal::MsgIterClsBridge< \
+ _userComponentClass::MessageIterator>::canSeekNsFromOrigin);
#define BT_CPP_PLUGIN_SINK_COMPONENT_CLASS_WITH_ID(_pluginId, _componentClassId, _name, \
_userComponentClass) \
_pluginId, _componentClassId, \
bt2::internal::SinkCompClsBridge<_userComponentClass>::query);
-#define BT_CPP_PLUGIN_SOURCE_COMPONENT_CLASS(_name, _userComponentClass, \
- _userMessageIteratorClass) \
- BT_CPP_PLUGIN_SOURCE_COMPONENT_CLASS_WITH_ID(auto, _name, #_name, _userComponentClass, \
- _userMessageIteratorClass)
+#define BT_CPP_PLUGIN_SOURCE_COMPONENT_CLASS(_name, _userComponentClass) \
+ BT_CPP_PLUGIN_SOURCE_COMPONENT_CLASS_WITH_ID(auto, _name, #_name, _userComponentClass)
-#define BT_CPP_PLUGIN_FILTER_COMPONENT_CLASS(_name, _userComponentClass, \
- _userMessageIteratorClass) \
- BT_CPP_PLUGIN_FILTER_COMPONENT_CLASS_WITH_ID(auto, _name, #_name, _userComponentClass, \
- _userMessageIteratorClass)
+#define BT_CPP_PLUGIN_FILTER_COMPONENT_CLASS(_name, _userComponentClass) \
+ BT_CPP_PLUGIN_FILTER_COMPONENT_CLASS_WITH_ID(auto, _name, #_name, _userComponentClass)
#define BT_CPP_PLUGIN_SINK_COMPONENT_CLASS(_name, _userComponentClass) \
BT_CPP_PLUGIN_SINK_COMPONENT_CLASS_WITH_ID(auto, _name, #_name, _userComponentClass)