28#ifndef ALICEO2_MEMORY_RESOURCES_
29#define ALICEO2_MEMORY_RESOURCES_
31#include <boost/container/pmr/memory_resource.hpp>
32#include <boost/container/pmr/monotonic_buffer_resource.hpp>
33#include <boost/container/pmr/polymorphic_allocator.hpp>
39#include <unordered_map>
40#include <fairmq/Message.h>
41#include <fairmq/TransportFactory.h>
42#include <fairmq/MemoryResources.h>
43#include <fairmq/MemoryResourceTools.h>
50using namespace fair::mq::pmr;
52template <
typename ContainerT>
55 return fair::mq::getMessage(std::forward<ContainerT>(container), targetResource);
76 :
throw std::runtime_error(
"MessageResource::MessageResource upstream is nullptr")}
90 void*
do_allocate(std::size_t bytes, std::size_t alignment)
override
94 throw std::bad_alloc();
99 return mUpstream->allocate(bytes, alignment < 64 ? 64 : alignment);
102 void do_deallocate(
void* p, std::size_t bytes, std::size_t alignment)
override
104 mUpstream->deallocate(p, bytes, alignment < 64 ? 64 : alignment);
122 template <
typename... Args>
137 template <
typename U>
150using vector = std::vector<T, fair::mq::pmr::polymorphic_allocator<T>>;
const auto & getMessage()
void * setMessage(fair::mq::MessagePtr message) override
MessageResource() noexcept=delete
fair::mq::TransportFactory * getTransportFactory() noexcept override
void do_deallocate(void *p, std::size_t bytes, std::size_t alignment) override
void * do_allocate(std::size_t bytes, std::size_t alignment) override
FairMQMemoryResource * mUpstream
fair::mq::MessagePtr getMessage(void *p) override
bool do_is_equal(const memory_resource &) const noexcept override
size_t getNumberOfMessages() const noexcept override
std::true_type propagate_on_container_move_assignment
NoConstructAllocator(Args &&... args)
GLuint GLsizei const GLchar * message
O2 memory allocators and interfaces related to managing memory via the trasport layer.
std::vector< T, fair::mq::pmr::polymorphic_allocator< T > > vector
fair::mq::ChannelResource ChannelResource
Defining DataPointCompositeObject explicitly as copiable.