11#ifndef FRAMEWORK_TMESSAGESERIALIZER_H
12#define FRAMEWORK_TMESSAGESERIALIZER_H
14#include <fairmq/Message.h>
19#include <TBufferFile.h>
27class FairOutputTBuffer;
28class FairInputTBuffer;
51 static char*
fairMQrealloc(
char* oldData,
size_t newSize,
size_t oldSize);
72 static void Serialize(fair::mq::Message&
msg,
const T* input,
const TClass* cl);
74 template <
typename T = TObject>
82 template <
typename T = TObject>
96 tm.WriteObject(input);
98 tm.WriteObjectAny(input, cl);
105 TClass* tgtClass = TClass::GetClass(
typeid(T));
106 if (tgtClass ==
nullptr) {
112 buffer.SetBufferOffset(0);
114 TClass* serializedClass =
buffer.ReadClass();
115 buffer.SetBufferOffset(0);
117 if (serializedClass ==
nullptr) {
120 if (tgtClass != serializedClass && serializedClass->GetBaseClass(tgtClass) ==
nullptr) {
121 throw runtime_error_f(
"can not convert serialized class %s into target class %s",
122 serializedClass->GetName(),
123 tgtClass->GetName());
125 return std::unique_ptr<T>(
reinterpret_cast<T*
>(
buffer.ReadObjectAny(serializedClass)));
void * embedInItself(fair::mq::Message &msg)
static char * fairMQrealloc(char *oldData, size_t newSize, size_t oldSize)
FairOutputTBuffer(fair::mq::Message &msg)
~FairOutputTBuffer() override
GLuint const GLchar * name
Defining PrimaryVertex explicitly as messageable.
RuntimeErrorRef runtime_error_f(const char *,...)
static void serialize(o2::framework::FairOutputTBuffer &msg, const TObject *input)
static void Serialize(fair::mq::Message &msg, const TObject *input)
static std::unique_ptr< T > deserialize(FairInputTBuffer &buffer)
static void Deserialize(const fair::mq::Message &msg, std::unique_ptr< T > &output)
uint64_t const void const *restrict const msg