Difference between revisions of "Serializing and deserializing root objects"
From GlueXWiki
m |
m |
||
Line 10: | Line 10: | ||
ROOT TMessage objects can hold serialized ROOT objects. They are filled via the write() method: | ROOT TMessage objects can hold serialized ROOT objects. They are filled via the write() method: | ||
− | <pre> | + | <pre> |
+ | #include "TMessage.h" | ||
− | // | + | // create TMessage object capable of holding serialized ROOT object |
− | + | TMessage *tm = new TMessage(kMESS_OBJECT); | |
− | + | ||
+ | // fill with serialized version of some ROOT object | ||
+ | tm->WriteObject(some_root_object); | ||
+ | // get pointer to TMessage internal buffer and length | ||
+ | char *buffer = tm->Buffer(); | ||
+ | int bufferLength = tm->Length()); // in bytes | ||
</pre> | </pre> | ||
Revision as of 14:25, 30 June 2009
Introduction
ROOT objects can be serialized to a byte array or reconstructed from the byte array quite easily. One reason to do this might be to store or transport ROOT objects in a way not supported by ROOT itself. An example is transport of a ROOT histogram from a producer to a consumer program via the cMsg package, a publish/subscribe messaging system that will be used extensively in the Hall D online monitoring system (see section on Example Programs below).
Serialize
ROOT TMessage objects can hold serialized ROOT objects. They are filled via the write() method:
#include "TMessage.h" // create TMessage object capable of holding serialized ROOT object TMessage *tm = new TMessage(kMESS_OBJECT); // fill with serialized version of some ROOT object tm->WriteObject(some_root_object); // get pointer to TMessage internal buffer and length char *buffer = tm->Buffer(); int bufferLength = tm->Length()); // in bytes
Deserialize
Example Programs
cMsgRootProducer.cc,cMsgRootConsumer.cc,Makefile Examples demonstrate transport via cMsg package.