src/cpp-common: pass user message iterator class to `UserSourceComponent` and `UserFi...
authorSimon Marchi <simon.marchi@efficios.com>
Tue, 13 Feb 2024 16:50:10 +0000 (11:50 -0500)
committerSimon Marchi <simon.marchi@efficios.com>
Mon, 19 Feb 2024 18:10:15 +0000 (13:10 -0500)
 🍎 Pass the user message iterator class type as template parameters to
    `UserSourceComponent` and `UserFilterComponent`.
 🍎 Make them set a public type `MessageIterator` with that.
 🍎 Update the `BT_CPP_PLUGIN_*` macros to not take the message iterator
    class type, but use `_userComponentClass::MessageIterator`
    instead.

Change-Id: I7af3a1a088a61e5b83e4a4047f808435221352cc
Signed-off-by: Simon Marchi <simon.marchi@efficios.com>
Reviewed-on: https://review.lttng.org/c/babeltrace/+/11800
Reviewed-by: Philippe Proulx <eeppeliteloop@gmail.com>
Tested-by: jenkins <jenkins@lttng.org>
src/cpp-common/bt2/plugin-dev.hpp
src/plugins/utils/muxer/comp.cpp
src/plugins/utils/muxer/comp.hpp
src/plugins/utils/plugin.cpp

index 3bc20e7fcf025d9a918e17c2e8a5440e91305fb9..2f255e42af9f54d845c8503a58d5206e8b9d06b8 100644 (file)
@@ -505,10 +505,20 @@ private:
  * `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;
 
@@ -582,10 +592,20 @@ protected:
  * `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;
@@ -1006,11 +1026,11 @@ protected:
 
 } /* 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(                                      \
@@ -1027,24 +1047,25 @@ protected:
         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(                                      \
@@ -1064,18 +1085,19 @@ protected:
         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)                            \
@@ -1101,15 +1123,11 @@ protected:
         _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)
index d81a4c29d932ce49345ee2772f92414666ba810e..ba44729a9fbd0ad840b58a96788131437794639a 100644 (file)
@@ -11,7 +11,7 @@
 namespace bt2mux {
 
 Comp::Comp(const bt2::SelfFilterComponent selfComp, const bt2::ConstMapValue params) :
-    bt2::UserFilterComponent<Comp> {selfComp, "PLUGIN/FLT.UTILS.MUXER"}
+    bt2::UserFilterComponent<Comp, MsgIter> {selfComp, "PLUGIN/FLT.UTILS.MUXER"}
 {
     BT_CPPLOGI_STR("Initializing component.");
 
index 2ce66a4c0e0cceff63645ae055f194aef9c3cfa3..4572d1d43039087397c39fae83fd5bd188de6d20 100644 (file)
 
 #include "cpp-common/bt2/plugin-dev.hpp"
 
+#include "msg-iter.hpp"
+
 namespace bt2mux {
 
-class Comp final : public bt2::UserFilterComponent<Comp>
+class MsgIter;
+
+class Comp final : public bt2::UserFilterComponent<Comp, MsgIter>
 {
     friend class MsgIter;
-    friend bt2::UserFilterComponent<Comp>;
+    friend bt2::UserFilterComponent<Comp, MsgIter>;
 
 public:
     explicit Comp(bt2::SelfFilterComponent selfComp, bt2::ConstMapValue params);
index acb7801d43b06da24a54c672f85a145d4d1f302b..4878ab87da825ade42df332a220ab0cd126e2217 100644 (file)
@@ -54,7 +54,7 @@ BT_PLUGIN_FILTER_COMPONENT_CLASS_MESSAGE_ITERATOR_CLASS_FINALIZE_METHOD(trimmer,
                                                                         trimmer_msg_iter_finalize);
 
 /* flt.utils.muxer */
-BT_CPP_PLUGIN_FILTER_COMPONENT_CLASS(muxer, bt2mux::Comp, bt2mux::MsgIter);
+BT_CPP_PLUGIN_FILTER_COMPONENT_CLASS(muxer, bt2mux::Comp);
 BT_PLUGIN_FILTER_COMPONENT_CLASS_DESCRIPTION(
     muxer, "Sort messages from multiple input ports to a single output port by time.");
 BT_PLUGIN_FILTER_COMPONENT_CLASS_HELP(muxer,
This page took 0.029179 seconds and 4 git commands to generate.