]> git.uio.no Git - u/mrichter/AliRoot.git/blame - HLT/BASE/AliHLTMemoryFile.h
avoid compilation warning on some architectures
[u/mrichter/AliRoot.git] / HLT / BASE / AliHLTMemoryFile.h
CommitLineData
79c114b5 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 */
32class 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 */
29312178 52 int WriteHeaderBuffer(const char* pHeader, int iSize);
79c114b5 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
29312178 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*);
79c114b5 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 */
29312178 79 int CloseMemoryFile(int bFlush=1);
79c114b5 80
81 /**
82 * Check if file has been closed.
83 * @return 1 if closed
84 */
29312178 85 int IsClosed() const {return fbClosed;}
79c114b5 86
87 /**
88 * Get the last error code.
89 * @return error code
90 */
29312178 91 int GetErrno() const {return fErrno;}
79c114b5 92
93 /**
94 * Get header size.
95 */
29312178 96 int GetHeaderSize() const {return fHeaderSize;}
79c114b5 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:
29312178 109 /** copy constructor prohibited */
79c114b5 110 AliHLTMemoryFile(const AliHLTMemoryFile&);
29312178 111 /** assignment operator prohibited */
79c114b5 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