Source · fairmq/
Message.hpublic header
Defines struct fair::mq::Alignment, struct fair::mq::Message, struct fair::mq::MessageBadAlloc, struct fair::mq::MessageError, struct fair::mq::RefCountBadAlloc.
Described in Messages and multipart, 1-1: sampler and sink, copypush: one message to several receivers, qc: quality control on demand, Move from the FairMQ* names, Send your own data types, Transfer codes and errors.
fairmq/Message.h90 lines · C++API: AlignmentAPI: MessageAPI: MessageBadAllocAPI: MessageErrorAPI: RefCountBadAllocGitHub ↗
1/********************************************************************************2 * Copyright (C) 2021-2022 GSI Helmholtzzentrum fuer Schwerionenforschung GmbH *3 * *4 * This software is distributed under the terms of the *5 * GNU Lesser General Public Licence (LGPL) version 3, *6 * copied verbatim in the file "LICENSE" *7 ********************************************************************************/8 9#ifndef FAIR_MQ_MESSAGE_H10#define FAIR_MQ_MESSAGE_H11 12#include <cstddef> // for size_t13#include <fairmq/TransportEnum.h>14#include <memory> // unique_ptr15#include <stdexcept>16 17namespace fair::mq {18 19using FreeFn = void(void* data, void* hint);20class TransportFactory;21 22struct Alignment23{24 size_t alignment;25 explicit operator size_t() const { return alignment; }26};27 28struct Message29{30 Message() = default;31 Message(TransportFactory* factory)32 : fTransport(factory)33 {}34 35 Message(const Message&) = delete;36 Message(Message&&) = delete;37 Message& operator=(const Message&) = delete;38 Message& operator=(Message&&) = delete;39 40 virtual void Rebuild() = 0;41 virtual void Rebuild(Alignment alignment) = 0;42 virtual void Rebuild(size_t size) = 0;43 virtual void Rebuild(size_t size, Alignment alignment) = 0;44 virtual void Rebuild(void* data, size_t size, FreeFn* ffn, void* hint = nullptr) = 0;45 46 virtual void* GetData() const = 0;47 virtual size_t GetSize() const = 0;48 49 virtual bool SetUsedSize(size_t size, Alignment alignment = Alignment{0}) = 0;50 51 virtual Transport GetType() const = 0;52 TransportFactory* GetTransport() { return fTransport; }53 void SetTransport(TransportFactory* transport) { fTransport = transport; }54 55 /// Copy the message buffer from another message56 /// Transport may choose not to physically copy the buffer, but to share across the messages.57 /// Modifying the buffer after a call to Copy() is undefined behaviour.58 /// @param msg message to copy the buffer from.59 virtual void Copy(const Message& msg) = 0;60 61 virtual ~Message() = default;62 63 private:64 TransportFactory* fTransport{nullptr};65};66 67using MessagePtr = std::unique_ptr<Message>;68 69struct MessageError : std::runtime_error70{71 using std::runtime_error::runtime_error;72};73 74struct MessageBadAlloc : std::runtime_error75{76 using std::runtime_error::runtime_error;77};78 79struct RefCountBadAlloc : std::runtime_error80{81 using std::runtime_error::runtime_error;82};83 84} // namespace fair::mq85 86using fairmq_free_fn [[deprecated("Use fair::mq::FreeFn")]] = fair::mq::FreeFn;87using FairMQMessage [[deprecated("Use fair::mq::Message")]] = fair::mq::Message;88using FairMQMessagePtr [[deprecated("Use fair::mq::MessagePtr")]] = fair::mq::MessagePtr;89 90#endif // FAIR_MQ_MESSAGE_H