/******************************************************************************** * Copyright (C) 2018 GSI Helmholtzzentrum fuer Schwerionenforschung GmbH * * * * This software is distributed under the terms of the * * GNU Lesser General Public Licence (LGPL) version 3, * * copied verbatim in the file "LICENSE" * ********************************************************************************/ #ifndef FAIR_MQ_OFI_MESSAGE_H #define FAIR_MQ_OFI_MESSAGE_H #include #include #include #include #include // size_t #include namespace fair::mq::ofi { /** * @class Message Message.h * @brief * * @todo TODO insert long description */ class Message final : public fair::mq::Message { public: Message(boost::container::pmr::memory_resource* pmr); Message(boost::container::pmr::memory_resource* pmr, Alignment alignment); Message(boost::container::pmr::memory_resource* pmr, const size_t size); Message(boost::container::pmr::memory_resource* pmr, const size_t size, Alignment alignment); Message(boost::container::pmr::memory_resource* pmr, void* data, const size_t size, fairmq_free_fn* ffn, void* hint = nullptr); Message(boost::container::pmr::memory_resource* pmr, FairMQUnmanagedRegionPtr& region, void* data, const size_t size, void* hint = 0); Message(const Message&) = delete; Message operator=(const Message&) = delete; auto Rebuild() -> void override; auto Rebuild(Alignment alignment) -> void override; auto Rebuild(const size_t size) -> void override; auto Rebuild(const size_t size, Alignment alignment) -> void override; auto Rebuild(void* data, const size_t size, fairmq_free_fn* ffn, void* hint = nullptr) -> void override; auto GetData() const -> void* override; auto GetSize() const -> size_t override; auto SetUsedSize(const size_t size) -> bool override; auto GetType() const -> fair::mq::Transport override { return fair::mq::Transport::OFI; } auto Copy(const fair::mq::Message& msg) -> void override; ~Message() override; private: size_t fInitialSize; size_t fSize; void* fData; fairmq_free_fn* fFreeFunction; void* fHint; boost::container::pmr::memory_resource* fPmr; }; /* class Message */ } // namespace fair::mq::ofi #endif /* FAIR_MQ_OFI_MESSAGE_H */