]> git.uio.no Git - u/mrichter/AliRoot.git/blob - HLT/BASE/AliHLTMemoryFile.h
first sketch of the HLTOUT handler
[u/mrichter/AliRoot.git] / HLT / BASE / AliHLTMemoryFile.h
1 //-*- Mode: C++ -*-
2 // @(#) $Id$
3
4 #ifndef ALIHLTMEMORYFILE_H
5 #define ALIHLTMEMORYFILE_H
6 /* This file is property of and copyright by the ALICE HLT Project        * 
7  * ALICE Experiment at CERN, All rights reserved.                         *
8  * See cxx source for full Copyright notice                               */
9
10 /** @file   AliHLTMemoryFile.h
11     @author Matthias Richter
12     @date   
13     @brief  Serialization of complete ROOT files.
14
15 // see below for class documentation
16 // or
17 // refer to README to build package
18 // or
19 // visit http://web.ift.uib.no/~kjeks/doc/alice-hlt
20                                                                           */
21 #include "TFile.h"
22 #include "AliHLTLogging.h"
23
24 /**
25  * @class AliHLTMemoryFile
26  * Serialization of ROOT files for transport in the Alice HLT analysis
27  * chain.
28  *
29  * The file behaves like a normal ROOT file except that it is written to
30  * a memory buffer instead of disk.
31  */
32 class AliHLTMemoryFile : public TFile, public AliHLTLogging {
33  public:
34   /** standard constructor */
35   AliHLTMemoryFile();
36
37   /** constructor */
38   AliHLTMemoryFile(void* pBuffer, int iSize);
39
40   /** standard destructor */
41   virtual ~AliHLTMemoryFile();
42
43   /**
44    * Write a header at the beginning of the file.
45    * The header is not part of the ROOT file. It should be written before any
46    * other object in order to avoid data to be moved.
47    * @param pHeader     buffer to write
48    * @param iSize       size of the buffer
49    * @return neg. error code if failed
50    *         - -ENOSPC    buffer size too small
51    */
52   int WriteHeaderBuffer(const char* pHeader, int iSize);
53
54   /**
55    * Write a header at the beginning of the file.
56    * The trailer is not part of the ROOT file. It can only be written if the
57    * file already has been closed.
58    * @param pTrailer    buffer to write
59    * @param iSize       size of the buffer
60    * @return neg. error code if failed
61    *         - -ENOSPC    buffer size too small
62    */
63   // not yet stable
64   //int WriteTrailerBuffer(const char* pTrailer, int size);
65
66   /**
67    * Close file and flush output.
68    * Forwards to @ref CloseMemoryFile and is introduced to avoid
69    * compilation warnings about hidden virtual functions in the base class.
70    */
71   void Close(const Option_t*);
72
73   /**
74    * Close file and flush output.
75    * @param bFlush       write remaining data
76    * @return neg. error code if failed
77    *         - -ENOSPC    buffer size too small
78    */
79   int CloseMemoryFile(int bFlush=1);
80
81   /**
82    * Check if file has been closed.
83    * @return 1 if closed
84    */
85   int IsClosed() const {return fbClosed;}
86
87   /**
88    * Get the last error code.
89    * @return error code
90    */
91   int GetErrno() const {return fErrno;}
92
93   /**
94    * Get header size.
95    */
96   int GetHeaderSize() const {return fHeaderSize;}
97
98  protected:
99   // Interface to basic system I/O routines
100   Int_t    SysOpen(const char *pathname, Int_t flags, UInt_t mode);
101   Int_t    SysClose(Int_t fd);
102   Int_t    SysRead(Int_t fd, void *buf, Int_t len);
103   Int_t    SysWrite(Int_t fd, const void *buf, Int_t len);
104   Long64_t SysSeek(Int_t fd, Long64_t offset, Int_t whence);
105   Int_t    SysStat(Int_t fd, Long_t *id, Long64_t *size, Long_t *flags, Long_t *modtime);
106   Int_t    SysSync(Int_t fd);
107
108  private:
109   /** copy constructor prohibited */
110   AliHLTMemoryFile(const AliHLTMemoryFile&);
111   /** assignment operator prohibited */
112   AliHLTMemoryFile& operator=(const AliHLTMemoryFile&);
113
114   /** target buffer */
115   char* fpBuffer;                                                 //! transient
116
117   /** size of buffer */
118   int fBufferSize;                                                // see above
119
120   /** position */
121   int fPosition;                                                  // see above
122
123   /** filled posrtion of the buffer */
124   int fSize;                                                      // see above
125
126   /** result of last operation */
127   int fErrno;                                                     // see above
128
129   /** file closed */
130   int fbClosed;                                                   // see above
131
132   /** size of header */
133   int fHeaderSize;                                                // see above
134
135   /** size of trailer */
136   int fTrailerSize;                                               // see above
137
138   ClassDef(AliHLTMemoryFile, 1)
139 };
140 #endif // ALIHLTMEMORYFILE_H