9 #ifndef FAIR_MQ_OFI_CONTROLMESSAGES_H 10 #define FAIR_MQ_OFI_CONTROLMESSAGES_H 12 #include <FairMQLogger.h> 13 #include <boost/asio/buffer.hpp> 14 #include <boost/container/pmr/memory_resource.hpp> 18 #include <type_traits> 23 template<
typename PodType>
24 auto buffer(
const PodType& obj) -> boost::asio::const_buffer
26 return boost::asio::const_buffer(static_cast<const void*>(&obj),
sizeof(PodType));
36 enum class ControlMessageType
40 PostMultiPartStartBuffer
51 struct PostMultiPartStartBuffer
60 PostMultiPartStartBuffer postMultiPartStartBuffer;
65 ControlMessageType type;
70 using unique_ptr = std::unique_ptr<T, std::function<void(T*)>>;
72 template<
typename T,
typename... Args>
73 auto MakeControlMessageWithPmr(boost::container::pmr::memory_resource& pmr, Args&&... args)
74 -> ofi::unique_ptr<ControlMessage>
79 if (std::is_same<T, PostBuffer>::value) {
80 ctrl->type = ControlMessageType::PostBuffer;
81 ctrl->msg.postBuffer =
PostBuffer(std::forward<Args>(args)...);
82 }
else if (std::is_same<T, PostMultiPartStartBuffer>::value) {
83 ctrl->type = ControlMessageType::PostMultiPartStartBuffer;
84 ctrl->msg.postMultiPartStartBuffer = PostMultiPartStartBuffer(std::forward<Args>(args)...);
85 }
else if (std::is_same<T, Empty>::value) {
86 ctrl->type = ControlMessageType::Empty;
89 return ofi::unique_ptr<ControlMessage>(ctrl, [&pmr](
ControlMessage* p) {
91 pmr.deallocate(p,
sizeof(T));
95 template<
typename T,
typename... Args>
100 if (std::is_same<T, PostBuffer>::value) {
101 ctrl.type = ControlMessageType::PostBuffer;
102 }
else if (std::is_same<T, PostMultiPartStartBuffer>::value) {
103 ctrl.type = ControlMessageType::PostMultiPartStartBuffer;
104 }
else if (std::is_same<T, Empty>::value) {
105 ctrl.type = ControlMessageType::Empty;
107 ctrl.msg = T(std::forward<Args>(args)...);
Definition: ControlMessages.h:20
Definition: ControlMessages.h:63
Definition: ControlMessages.h:57
Definition: ControlMessages.h:46
Tools for interfacing containers to the transport via polymorphic allocators.
Definition: DeviceRunner.h:23
Definition: ControlMessages.h:43