15 #include <fairmq/FairMQTransportFactory.h> 16 #include <fairmq/MemoryResources.h> 21 using BytePmrAllocator = pmr::polymorphic_allocator<fair::mq::byte>;
25 template<
typename ContainerT>
32 FairMQMessagePtr getMessage(ContainerT &&container_, FairMQMemoryResource *targetResource =
nullptr)
34 auto container = std::move(container_);
35 auto alloc = container.get_allocator();
37 auto resource =
dynamic_cast<FairMQMemoryResource *
>(alloc.resource());
38 if (!resource && !targetResource) {
39 throw std::runtime_error(
"Neither the container or target resource specified");
41 size_t containerSizeBytes = container.size() *
sizeof(
typename ContainerT::value_type);
42 if ((!targetResource && resource)
43 || (resource && targetResource && resource->is_equal(*targetResource))) {
44 auto message = resource->getMessage(static_cast<void *>(
45 const_cast<typename std::remove_const<typename ContainerT::value_type>::type *
>(
49 message->SetUsedSize(containerSizeBytes);
54 targetResource = resource;
58 auto message = targetResource->getTransportFactory()->CreateMessage(containerSizeBytes);
59 std::memcpy(static_cast<fair::mq::byte *>(message->GetData()),
Tools for interfacing containers to the transport via polymorphic allocators.
Definition: DeviceRunner.h:23