Skip to content

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.

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