a3754a36c5b45c19ebc60e10687dc733987d0ce9
[u/mrichter/AliRoot.git] / HLT / BASE / AliHLTMessage.h
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 //                                                                      //
27 // TMessage                                                             //
28 //                                                                      //
29 // Message buffer class used for serializing objects and sending them   //
30 // over the network.                                                    //
31 //                                                                      //
32 //////////////////////////////////////////////////////////////////////////
33
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"
43 #endif
44
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.
56  * - the AliHLTMessage(void *buf, Int_t bufsize) constructor has been made
57  *   public in order to be used externally.
58  */
59 class AliHLTMessage 
60 :
61 # if defined(ROOT_TBufferFile) || defined(HAVE_TBUFFERFILE_H)
62 public TBufferFile,
63 #else
64 public TBuffer,
65 #endif
66 public AliHLTLogging {
67
68 public:
69    AliHLTMessage(UInt_t what = kMESS_ANY);
70    AliHLTMessage(void *buf, Int_t bufsize);
71    virtual ~AliHLTMessage();
72
73    void SetLength() const;
74
75    void     Forward();
76    TClass  *GetClass() const { return fClass; }
77    void     Reset();
78    void     Reset(UInt_t what) { SetWhat(what); Reset(); }
79    UInt_t   What() const { return fWhat; }
80    void     SetWhat(UInt_t what);
81
82    void     SetCompressionLevel(Int_t level = 1);
83    Int_t    GetCompressionLevel() const { return fCompress; }
84    Int_t    Compress();
85    Int_t    Uncompress();
86    char    *CompBuffer() const { return fBufComp; }
87    Int_t    CompLength() const { return (Int_t)(fBufCompCur - fBufComp); }
88
89 private:
90    UInt_t   fWhat;        //Message type
91    TClass  *fClass;       //If message is kMESS_OBJECT pointer to object's class
92    Int_t    fCompress;    //Compression level from 0 (not compressed) to 9 (max compression)
93    char    *fBufComp;     //Compressed buffer
94    char    *fBufCompCur;  //Current position in compressed buffer
95    char    *fCompPos;     //Position of fBufCur when message was compressed
96
97    // AliHLTMessage objects cannot be copied or assigned
98    AliHLTMessage(const AliHLTMessage &);           // not implemented
99    void operator=(const AliHLTMessage &);     // not implemented
100
101    ClassDef(AliHLTMessage,0)  // Message buffer class
102 };
103
104 #endif // ALIHLTMESSAGE_H