]>
Commit | Line | Data |
---|---|---|
a655eae3 | 1 | // $Id$ |
2 | ||
3 | /** @file AliHLTMessage.h | |
4 | @author Matthias Richter (customization of Root TMessage ) | |
5 | @date | |
6 | @brief Serialization of Root objects in the ALICE HLT. */ | |
7 | ||
8 | // This is the original Root TMessage implementation with a few minor | |
9 | // modifications, original revision: | |
10 | // root/net: v5-14-00 $: TMessage.h,v 1.9 2005/12/09 15:12:19 rdm | |
11 | // Author: Fons Rademakers 19/12/96 | |
12 | ||
13 | /************************************************************************* | |
14 | * Copyright (C) 1995-2000, Rene Brun and Fons Rademakers. * | |
15 | * All rights reserved. * | |
16 | * * | |
17 | * For the licensing terms see $ROOTSYS/LICENSE. * | |
18 | * For the list of contributors see $ROOTSYS/README/CREDITS. * | |
19 | *************************************************************************/ | |
20 | ||
21 | #ifndef ALIHLTMESSAGE_H | |
22 | #define ALIHLTMESSAGE_H | |
23 | ||
24 | ||
25 | ////////////////////////////////////////////////////////////////////////// | |
26 | // // | |
dfaa582a | 27 | // TMessage // |
a655eae3 | 28 | // // |
29 | // Message buffer class used for serializing objects and sending them // | |
30 | // over the network. // | |
31 | // // | |
32 | ////////////////////////////////////////////////////////////////////////// | |
33 | ||
dfaa582a | 34 | // TBuffer has been made pure virtual in root version v5-15-02, this |
35 | // requires to inherit from TBufferFile instead of TBuffer. | |
36 | // TMessage is not really used by this class but by including it we also get | |
37 | // TBufferFile if this exists. The define ROOT_TBufferFile can than be used | |
38 | // to differentiate between the usage of TBuffer or TBufferFile. | |
39 | #include "TMessage.h" | |
40 | ||
a655eae3 | 41 | #ifndef ROOT_MessageTypes |
42 | #include "MessageTypes.h" | |
43 | #endif | |
44 | ||
45 | #include "AliHLTLogging.h" | |
46 | /** | |
47 | * @class AliHLTMessage | |
48 | * Serialization of Root objects for transport in the Alice HLT analysis | |
49 | * chain. | |
50 | * This is the original Root TMessage implementation with a few minor | |
51 | * modifications. | |
aa7f26de | 52 | * - the <tt> AliHLTMessage(void *buf, Int_t bufsize)</tt> constructor has been |
53 | * made public in order to be used externally. | |
54 | * | |
55 | * The class can be used to extract an object from an input data block, or a | |
56 | * data block received via the HOMER interface or from the file writer. | |
57 | * <pre> | |
58 | * AliHLTMessage msg(buffer, size); | |
d6b69874 | 59 | * TObject* pObj=msg.ReadObject(msg.GetClass()); |
aa7f26de | 60 | * </pre> |
d6b69874 | 61 | * |
62 | * A simple test macro for a file can look like | |
63 | * <pre> | |
64 | * const char* filename="TPC_804.ddl"; | |
65 | * //const char* filename="TPC_768.ddl"; | |
66 | * TString param=filename; | |
67 | * param+="?filetype=raw"; | |
68 | * TFile file(param); | |
69 | * if (file.IsZombie()) { | |
70 | * cout << "can not open file " << filename << endl; | |
71 | * return; | |
72 | * } | |
73 | * | |
74 | * TArrayC buffer(file.GetSize()); | |
75 | * TArrayC tgtbuffer(file.GetSize()); | |
76 | * if (file.ReadBuffer(buffer.GetArray(), buffer.GetSize())) { | |
77 | * cout << "error reading file " << filename << endl; | |
78 | * return; | |
79 | * } | |
80 | * | |
81 | * AliHLTMessage msg(buffer.GetArray(), buffer.GetSize()); | |
82 | * TObject* pObj=msg.ReadObject(msg.GetClass()); | |
83 | * </pre> | |
84 | * | |
85 | * @see AliHLTRootFileWriterComponent for an easy way to save objects | |
86 | * exported via AliHLTMessage in a ROOT file. | |
a655eae3 | 87 | */ |
dfaa582a | 88 | class AliHLTMessage |
89 | : | |
ba4b0dd7 | 90 | # if defined(ROOT_TBufferFile) |
dfaa582a | 91 | public TBufferFile, |
92 | #else | |
93 | public TBuffer, | |
94 | #endif | |
95 | public AliHLTLogging { | |
a655eae3 | 96 | |
97 | public: | |
98 | AliHLTMessage(UInt_t what = kMESS_ANY); | |
99 | AliHLTMessage(void *buf, Int_t bufsize); | |
100 | virtual ~AliHLTMessage(); | |
101 | ||
102 | void SetLength() const; | |
103 | ||
104 | void Forward(); | |
105 | TClass *GetClass() const { return fClass; } | |
106 | void Reset(); | |
107 | void Reset(UInt_t what) { SetWhat(what); Reset(); } | |
108 | UInt_t What() const { return fWhat; } | |
109 | void SetWhat(UInt_t what); | |
110 | ||
111 | void SetCompressionLevel(Int_t level = 1); | |
112 | Int_t GetCompressionLevel() const { return fCompress; } | |
113 | Int_t Compress(); | |
114 | Int_t Uncompress(); | |
115 | char *CompBuffer() const { return fBufComp; } | |
116 | Int_t CompLength() const { return (Int_t)(fBufCompCur - fBufComp); } | |
117 | ||
118 | private: | |
119 | UInt_t fWhat; //Message type | |
120 | TClass *fClass; //If message is kMESS_OBJECT pointer to object's class | |
121 | Int_t fCompress; //Compression level from 0 (not compressed) to 9 (max compression) | |
122 | char *fBufComp; //Compressed buffer | |
123 | char *fBufCompCur; //Current position in compressed buffer | |
124 | char *fCompPos; //Position of fBufCur when message was compressed | |
125 | ||
126 | // AliHLTMessage objects cannot be copied or assigned | |
127 | AliHLTMessage(const AliHLTMessage &); // not implemented | |
128 | void operator=(const AliHLTMessage &); // not implemented | |
129 | ||
130 | ClassDef(AliHLTMessage,0) // Message buffer class | |
131 | }; | |
132 | ||
133 | #endif // ALIHLTMESSAGE_H |