]>
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 | ||
41 | #if defined(HAVE_TBUFFERFILE_H) | |
42 | #include "TBufferFile.h" | |
a655eae3 | 43 | #endif |
dfaa582a | 44 | |
a655eae3 | 45 | #ifndef ROOT_MessageTypes |
46 | #include "MessageTypes.h" | |
47 | #endif | |
48 | ||
49 | #include "AliHLTLogging.h" | |
50 | /** | |
51 | * @class AliHLTMessage | |
52 | * Serialization of Root objects for transport in the Alice HLT analysis | |
53 | * chain. | |
54 | * This is the original Root TMessage implementation with a few minor | |
55 | * modifications. | |
aa7f26de | 56 | * - the <tt> AliHLTMessage(void *buf, Int_t bufsize)</tt> constructor has been |
57 | * made public in order to be used externally. | |
58 | * | |
59 | * The class can be used to extract an object from an input data block, or a | |
60 | * data block received via the HOMER interface or from the file writer. | |
61 | * <pre> | |
62 | * AliHLTMessage msg(buffer, size); | |
63 | * TObject pObj=msg.ReadObject(msg.GetClass()); | |
64 | * </pre> | |
a655eae3 | 65 | */ |
dfaa582a | 66 | class AliHLTMessage |
67 | : | |
68 | # if defined(ROOT_TBufferFile) || defined(HAVE_TBUFFERFILE_H) | |
69 | public TBufferFile, | |
70 | #else | |
71 | public TBuffer, | |
72 | #endif | |
73 | public AliHLTLogging { | |
a655eae3 | 74 | |
75 | public: | |
76 | AliHLTMessage(UInt_t what = kMESS_ANY); | |
77 | AliHLTMessage(void *buf, Int_t bufsize); | |
78 | virtual ~AliHLTMessage(); | |
79 | ||
80 | void SetLength() const; | |
81 | ||
82 | void Forward(); | |
83 | TClass *GetClass() const { return fClass; } | |
84 | void Reset(); | |
85 | void Reset(UInt_t what) { SetWhat(what); Reset(); } | |
86 | UInt_t What() const { return fWhat; } | |
87 | void SetWhat(UInt_t what); | |
88 | ||
89 | void SetCompressionLevel(Int_t level = 1); | |
90 | Int_t GetCompressionLevel() const { return fCompress; } | |
91 | Int_t Compress(); | |
92 | Int_t Uncompress(); | |
93 | char *CompBuffer() const { return fBufComp; } | |
94 | Int_t CompLength() const { return (Int_t)(fBufCompCur - fBufComp); } | |
95 | ||
96 | private: | |
97 | UInt_t fWhat; //Message type | |
98 | TClass *fClass; //If message is kMESS_OBJECT pointer to object's class | |
99 | Int_t fCompress; //Compression level from 0 (not compressed) to 9 (max compression) | |
100 | char *fBufComp; //Compressed buffer | |
101 | char *fBufCompCur; //Current position in compressed buffer | |
102 | char *fCompPos; //Position of fBufCur when message was compressed | |
103 | ||
104 | // AliHLTMessage objects cannot be copied or assigned | |
105 | AliHLTMessage(const AliHLTMessage &); // not implemented | |
106 | void operator=(const AliHLTMessage &); // not implemented | |
107 | ||
108 | ClassDef(AliHLTMessage,0) // Message buffer class | |
109 | }; | |
110 | ||
111 | #endif // ALIHLTMESSAGE_H |