11#ifndef FRAMEWORK_TMESSAGESERIALIZER_H
12#define FRAMEWORK_TMESSAGESERIALIZER_H
14#include <fairmq/Message.h>
19#include <TBufferFile.h>
27class FairOutputTBuffer;
28class FairInputTBuffer;
49 static char*
fairMQrealloc(
char* oldData,
size_t newSize,
size_t oldSize);
69 static void Serialize(fair::mq::Message&
msg,
const T* input,
const TClass* cl);
71 template <
typename T = TObject>
79 template <
typename T = TObject>
93 tm.WriteObject(input);
95 tm.WriteObjectAny(input, cl);
102 TClass* tgtClass = TClass::GetClass(
typeid(T));
103 if (tgtClass ==
nullptr) {
109 buffer.SetBufferOffset(0);
111 TClass* serializedClass =
buffer.ReadClass();
112 buffer.SetBufferOffset(0);
114 if (serializedClass ==
nullptr) {
117 if (tgtClass != serializedClass && serializedClass->GetBaseClass(tgtClass) ==
nullptr) {
118 throw runtime_error_f(
"can not convert serialized class %s into target class %s",
119 serializedClass->GetName(),
120 tgtClass->GetName());
122 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)
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