1 \section{Ali\-HLTMessage Class Reference}
2 \label{classAliHLTMessage}\index{AliHLTMessage@{AliHLTMessage}}
3 {\tt \#include $<$Ali\-HLTMessage.h$>$}
5 Inheritance diagram for Ali\-HLTMessage::\begin{figure}[H]
8 \includegraphics[height=2cm]{classAliHLTMessage}
13 \subsection{Detailed Description}
14 Serialization of Root objects for transport in the Alice HLT analysis chain. This is the original Root TMessage implementation with a few minor modifications.\begin{itemize}
15 \item the {\tt {\bf Ali\-HLTMessage(void $\ast$buf, Int\_\-t bufsize)}{\rm (p.\,\pageref{classAliHLTMessage_a1})}} constructor has been made public in order to be used externally.\end{itemize}
18 The class can be used to extract an object from an input data block, or a data block received via the HOMER interface or from the file writer. \small\begin{alltt}
19 AliHLTMessage msg(buffer, size);
20 TObject pObj=msg.ReadObject(msg.GetClass());
21 \end{alltt}\normalsize
26 Definition at line 66 of file Ali\-HLTMessage.h.\subsection*{Public Member Functions}
27 \begin{CompactItemize}
29 {\bf Ali\-HLTMessage} (UInt\_\-t what=k\-MESS\_\-ANY)
31 {\bf Ali\-HLTMessage} (void $\ast$buf, Int\_\-t bufsize)
33 virtual {\bf $\sim$Ali\-HLTMessage} ()
35 void {\bf Set\-Length} () const
39 TClass $\ast$ {\bf Get\-Class} () const
43 void {\bf Reset} (UInt\_\-t what)
45 UInt\_\-t {\bf What} () const
47 void {\bf Set\-What} (UInt\_\-t what)
49 void {\bf Set\-Compression\-Level} (Int\_\-t level=1)
51 Int\_\-t {\bf Get\-Compression\-Level} () const
53 Int\_\-t {\bf Compress} ()
55 Int\_\-t {\bf Uncompress} ()
57 char $\ast$ {\bf Comp\-Buffer} () const
59 Int\_\-t {\bf Comp\-Length} () const
61 \subsection*{Private Member Functions}
62 \begin{CompactItemize}
64 {\bf Ali\-HLTMessage} (const {\bf Ali\-HLTMessage} \&)
66 void {\bf operator=} (const {\bf Ali\-HLTMessage} \&)
68 \subsection*{Private Attributes}
69 \begin{CompactItemize}
71 UInt\_\-t {\bf f\-What}
73 TClass $\ast$ {\bf f\-Class}
75 Int\_\-t {\bf f\-Compress}
77 char $\ast$ {\bf f\-Buf\-Comp}
79 char $\ast$ {\bf f\-Buf\-Comp\-Cur}
81 char $\ast$ {\bf f\-Comp\-Pos}
85 \subsection{Constructor \& Destructor Documentation}
86 \index{AliHLTMessage@{Ali\-HLTMessage}!AliHLTMessage@{AliHLTMessage}}
87 \index{AliHLTMessage@{AliHLTMessage}!AliHLTMessage@{Ali\-HLTMessage}}
88 \subsubsection{\setlength{\rightskip}{0pt plus 5cm}Ali\-HLTMessage::Ali\-HLTMessage (UInt\_\-t {\em what} = {\tt kMESS\_\-ANY})}\label{classAliHLTMessage_a0}
91 \index{AliHLTMessage@{Ali\-HLTMessage}!AliHLTMessage@{AliHLTMessage}}
92 \index{AliHLTMessage@{AliHLTMessage}!AliHLTMessage@{Ali\-HLTMessage}}
93 \subsubsection{\setlength{\rightskip}{0pt plus 5cm}Ali\-HLTMessage::Ali\-HLTMessage (void $\ast$ {\em buf}, Int\_\-t {\em bufsize})}\label{classAliHLTMessage_a1}
98 Definition at line 77 of file Ali\-HLTMessage.cxx.
100 References f\-Buf\-Comp, f\-Buf\-Comp\-Cur, f\-Class, f\-Comp\-Pos, f\-Compress, f\-What, and Uncompress().
102 \footnotesize\begin{verbatim}78 :
103 79 # if defined(ROOT_TBufferFile) || defined(HAVE_TBUFFERFILE_H)
104 80 TBufferFile(kRead, bufsize, buf, 0),
106 82 TBuffer(kRead, bufsize, buf, 0),
110 86 // Create a AliHLTMessage object for reading objects. The objects will be
111 87 // read from buf. Use the What() method to get the message type.
113 89 // skip space at the beginning of the message reserved for the message length
114 90 fBufCur += sizeof(UInt_t);
123 99 if (fWhat & kMESS_ZIP) {
124 100 // if buffer has kMESS_ZIP set, move it to fBufComp and uncompress
125 101 fBufComp = fBuffer;
126 102 fBufCompCur = fBuffer + bufsize;
131 107 if (fWhat == kMESS_OBJECT) {
133 109 fClass = ReadClass(); // get first the class stored in message
134 110 SetBufferOffset(sizeof(UInt_t) + sizeof(fWhat));
141 \end{verbatim}\normalsize
144 \index{AliHLTMessage@{Ali\-HLTMessage}!~AliHLTMessage@{$\sim$AliHLTMessage}}
145 \index{~AliHLTMessage@{$\sim$AliHLTMessage}!AliHLTMessage@{Ali\-HLTMessage}}
146 \subsubsection{\setlength{\rightskip}{0pt plus 5cm}Ali\-HLTMessage::$\sim${\bf Ali\-HLTMessage} ()\hspace{0.3cm}{\tt [virtual]}}\label{classAliHLTMessage_a2}
151 Definition at line 118 of file Ali\-HLTMessage.cxx.
153 \footnotesize\begin{verbatim}119 {
154 120 // Clean up compression buffer.
155 121 delete [] fBufComp;
157 \end{verbatim}\normalsize
160 \index{AliHLTMessage@{Ali\-HLTMessage}!AliHLTMessage@{AliHLTMessage}}
161 \index{AliHLTMessage@{AliHLTMessage}!AliHLTMessage@{Ali\-HLTMessage}}
162 \subsubsection{\setlength{\rightskip}{0pt plus 5cm}Ali\-HLTMessage::Ali\-HLTMessage (const {\bf Ali\-HLTMessage} \&)\hspace{0.3cm}{\tt [private]}}\label{classAliHLTMessage_d0}
167 \subsection{Member Function Documentation}
168 \index{AliHLTMessage@{Ali\-HLTMessage}!CompBuffer@{CompBuffer}}
169 \index{CompBuffer@{CompBuffer}!AliHLTMessage@{Ali\-HLTMessage}}
170 \subsubsection{\setlength{\rightskip}{0pt plus 5cm}char$\ast$ Ali\-HLTMessage::Comp\-Buffer () const\hspace{0.3cm}{\tt [inline]}}\label{classAliHLTMessage_a14}
175 Definition at line 93 of file Ali\-HLTMessage.h.
177 \footnotesize\begin{verbatim}93 { return fBufComp; }
178 \end{verbatim}\normalsize
181 \index{AliHLTMessage@{Ali\-HLTMessage}!CompLength@{CompLength}}
182 \index{CompLength@{CompLength}!AliHLTMessage@{Ali\-HLTMessage}}
183 \subsubsection{\setlength{\rightskip}{0pt plus 5cm}Int\_\-t Ali\-HLTMessage::Comp\-Length () const\hspace{0.3cm}{\tt [inline]}}\label{classAliHLTMessage_a15}
188 Definition at line 94 of file Ali\-HLTMessage.h.
190 References f\-Buf\-Comp\-Cur.
192 Referenced by Compress().
194 \footnotesize\begin{verbatim}94 { return (Int_t)(fBufCompCur - fBufComp); }
195 \end{verbatim}\normalsize
198 \index{AliHLTMessage@{Ali\-HLTMessage}!Compress@{Compress}}
199 \index{Compress@{Compress}!AliHLTMessage@{Ali\-HLTMessage}}
200 \subsubsection{\setlength{\rightskip}{0pt plus 5cm}Int\_\-t Ali\-HLTMessage::Compress ()}\label{classAliHLTMessage_a12}
205 Definition at line 214 of file Ali\-HLTMessage.cxx.
207 References Comp\-Length(), f\-Buf\-Comp, f\-Buf\-Comp\-Cur, f\-Comp\-Pos, f\-Compress, f\-What, and R\_\-\_\-zip().
209 \footnotesize\begin{verbatim}215 {
210 216 // Compress the message. The message will only be compressed if the
211 217 // compression level > 0 and the if the message is > 256 bytes.
212 218 // Returns -1 in case of error (when compression fails or
213 219 // when the message increases in size in some pathological cases),
214 220 // otherwise returns 0.
216 222 if (fCompress == 0) {
217 223 // no compression specified
219 225 delete [] fBufComp;
227 233 if (fBufComp && fCompPos == fBufCur) {
228 234 // the message was already compressed
232 238 // remove any existing compressed buffer before compressing modified message
234 240 delete [] fBufComp;
240 246 if (Length() <= (Int_t)(256 + 2*sizeof(UInt_t))) {
241 247 // this message is too small to be compressed
245 251 Int_t hdrlen = 2*sizeof(UInt_t);
246 252 Int_t messlen = Length() - hdrlen;
247 253 Int_t nbuffers = messlen / kMAXBUF;
248 254 Int_t chdrlen = 3*sizeof(UInt_t); // compressed buffer header length
249 255 Int_t buflen = TMath::Max(512, chdrlen + messlen + 9*nbuffers);
250 256 fBufComp = new char[buflen];
251 257 char *messbuf = Buffer() + hdrlen;
252 258 char *bufcur = fBufComp + chdrlen;
253 259 Int_t noutot = 0;
255 261 Int_t nout, bufmax;
256 262 for (Int_t i = 0; i <= nbuffers; i++) {
257 263 if (i == nbuffers)
258 264 bufmax = messlen - nzip;
260 266 bufmax = kMAXBUF;
261 267 R__zip(fCompress, &bufmax, messbuf, &bufmax, bufcur, &nout);
262 268 if (nout == 0 || nout >= messlen) {
263 269 //this happens when the buffer cannot be compressed
264 270 delete [] fBufComp;
272 278 messbuf += kMAXBUF;
275 281 fBufCompCur = bufcur;
276 282 fCompPos = fBufCur;
278 284 bufcur = fBufComp;
279 285 tobuf(bufcur, (UInt_t)(CompLength() - sizeof(UInt_t)));
280 286 Int_t what = fWhat | kMESS_ZIP;
281 287 tobuf(bufcur, what);
282 288 tobuf(bufcur, Length()); // original uncompressed buffer length
286 \end{verbatim}\normalsize
289 \index{AliHLTMessage@{Ali\-HLTMessage}!Forward@{Forward}}
290 \index{Forward@{Forward}!AliHLTMessage@{Ali\-HLTMessage}}
291 \subsubsection{\setlength{\rightskip}{0pt plus 5cm}void Ali\-HLTMessage::Forward ()}\label{classAliHLTMessage_a4}
296 Definition at line 125 of file Ali\-HLTMessage.cxx.
298 References f\-Comp\-Pos.
300 \footnotesize\begin{verbatim}126 {
301 127 // Change a buffer that was received into one that can be send, i.e.
302 128 // forward a just received message.
304 130 if (IsReading()) {
306 132 SetBufferOffset(fBufSize);
309 135 fCompPos = fBufCur;
313 \end{verbatim}\normalsize
316 \index{AliHLTMessage@{Ali\-HLTMessage}!GetClass@{GetClass}}
317 \index{GetClass@{GetClass}!AliHLTMessage@{Ali\-HLTMessage}}
318 \subsubsection{\setlength{\rightskip}{0pt plus 5cm}TClass$\ast$ Ali\-HLTMessage::Get\-Class () const\hspace{0.3cm}{\tt [inline]}}\label{classAliHLTMessage_a5}
323 Definition at line 83 of file Ali\-HLTMessage.h.
325 Referenced by Ali\-HLTComponent::Create\-Input\-Object().
327 \footnotesize\begin{verbatim}83 { return fClass; }
328 \end{verbatim}\normalsize
331 \index{AliHLTMessage@{Ali\-HLTMessage}!GetCompressionLevel@{GetCompressionLevel}}
332 \index{GetCompressionLevel@{GetCompressionLevel}!AliHLTMessage@{Ali\-HLTMessage}}
333 \subsubsection{\setlength{\rightskip}{0pt plus 5cm}Int\_\-t Ali\-HLTMessage::Get\-Compression\-Level () const\hspace{0.3cm}{\tt [inline]}}\label{classAliHLTMessage_a11}
338 Definition at line 90 of file Ali\-HLTMessage.h.
340 \footnotesize\begin{verbatim}90 { return fCompress; }
341 \end{verbatim}\normalsize
344 \index{AliHLTMessage@{Ali\-HLTMessage}!operator=@{operator=}}
345 \index{operator=@{operator=}!AliHLTMessage@{Ali\-HLTMessage}}
346 \subsubsection{\setlength{\rightskip}{0pt plus 5cm}void Ali\-HLTMessage::operator= (const {\bf Ali\-HLTMessage} \&)\hspace{0.3cm}{\tt [private]}}\label{classAliHLTMessage_d1}
349 \index{AliHLTMessage@{Ali\-HLTMessage}!Reset@{Reset}}
350 \index{Reset@{Reset}!AliHLTMessage@{Ali\-HLTMessage}}
351 \subsubsection{\setlength{\rightskip}{0pt plus 5cm}void Ali\-HLTMessage::Reset (UInt\_\-t {\em what})\hspace{0.3cm}{\tt [inline]}}\label{classAliHLTMessage_a7}
356 Definition at line 85 of file Ali\-HLTMessage.h.
358 References Reset(), and Set\-What().
360 \footnotesize\begin{verbatim}85 { SetWhat(what); Reset(); }
361 \end{verbatim}\normalsize
364 \index{AliHLTMessage@{Ali\-HLTMessage}!Reset@{Reset}}
365 \index{Reset@{Reset}!AliHLTMessage@{Ali\-HLTMessage}}
366 \subsubsection{\setlength{\rightskip}{0pt plus 5cm}void Ali\-HLTMessage::Reset ()}\label{classAliHLTMessage_a6}
371 Definition at line 141 of file Ali\-HLTMessage.cxx.
373 References f\-Buf\-Comp, f\-Buf\-Comp\-Cur, f\-Comp\-Pos, and f\-What.
375 Referenced by Reset().
377 \footnotesize\begin{verbatim}142 {
378 143 // Reset the message buffer so we can use (i.e. fill) it again.
380 145 SetBufferOffset(sizeof(UInt_t) + sizeof(fWhat));
384 149 delete [] fBufComp;
390 \end{verbatim}\normalsize
393 \index{AliHLTMessage@{Ali\-HLTMessage}!SetCompressionLevel@{SetCompressionLevel}}
394 \index{SetCompressionLevel@{SetCompressionLevel}!AliHLTMessage@{Ali\-HLTMessage}}
395 \subsubsection{\setlength{\rightskip}{0pt plus 5cm}void Ali\-HLTMessage::Set\-Compression\-Level (Int\_\-t {\em level} = {\tt 1})}\label{classAliHLTMessage_a10}
400 Definition at line 194 of file Ali\-HLTMessage.cxx.
402 References f\-Buf\-Comp, f\-Buf\-Comp\-Cur, f\-Comp\-Pos, and f\-Compress.
404 \footnotesize\begin{verbatim}195 {
405 196 // Set the message compression level. Can be between 0 and 9 with 0
406 197 // being no compression and 9 maximum compression. In general the default
407 198 // level of 1 is the best compromise between achieved compression and
408 199 // cpu time. Compression will only happen when the message is > 256 bytes.
410 201 if (level < 0) level = 0;
411 202 if (level > 9) level = 9;
413 204 if (level != fCompress && fBufComp) {
414 205 delete [] fBufComp;
419 210 fCompress = level;
421 \end{verbatim}\normalsize
424 \index{AliHLTMessage@{Ali\-HLTMessage}!SetLength@{SetLength}}
425 \index{SetLength@{SetLength}!AliHLTMessage@{Ali\-HLTMessage}}
426 \subsubsection{\setlength{\rightskip}{0pt plus 5cm}void Ali\-HLTMessage::Set\-Length () const}\label{classAliHLTMessage_a3}
431 Definition at line 157 of file Ali\-HLTMessage.cxx.
433 Referenced by Ali\-HLTComponent::Push\-Back().
435 \footnotesize\begin{verbatim}158 {
436 159 // Set the message length at the beginning of the message buffer.
438 161 if (IsWriting()) {
439 162 char *buf = Buffer();
440 163 *((UInt_t*)buf) = (UInt_t)(Length() - sizeof(UInt_t));
444 167 *((UInt_t*)buf) = (UInt_t)(Length() - sizeof(UInt_t));
448 \end{verbatim}\normalsize
451 \index{AliHLTMessage@{Ali\-HLTMessage}!SetWhat@{SetWhat}}
452 \index{SetWhat@{SetWhat}!AliHLTMessage@{Ali\-HLTMessage}}
453 \subsubsection{\setlength{\rightskip}{0pt plus 5cm}void Ali\-HLTMessage::Set\-What (UInt\_\-t {\em what})}\label{classAliHLTMessage_a9}
458 Definition at line 173 of file Ali\-HLTMessage.cxx.
462 Referenced by Reset().
464 \footnotesize\begin{verbatim}174 {
465 175 // Using this method one can change the message type a-posteriory.
466 176 // In case you OR "what" with kMESS_ACK, the message will wait for
467 177 // an acknowledgement from the remote side. This makes the sending
468 178 // process synchronous.
472 182 char *buf = Buffer();
473 183 buf += sizeof(UInt_t); // skip reserved length space
474 184 tobuf(buf, what);
478 188 buf += sizeof(UInt_t); // skip reserved length space
479 189 tobuf(buf, what | kMESS_ZIP);
482 \end{verbatim}\normalsize
485 \index{AliHLTMessage@{Ali\-HLTMessage}!Uncompress@{Uncompress}}
486 \index{Uncompress@{Uncompress}!AliHLTMessage@{Ali\-HLTMessage}}
487 \subsubsection{\setlength{\rightskip}{0pt plus 5cm}Int\_\-t Ali\-HLTMessage::Uncompress ()}\label{classAliHLTMessage_a13}
492 Definition at line 294 of file Ali\-HLTMessage.cxx.
494 References f\-Buf\-Comp, f\-Compress, f\-What, and R\_\-\_\-unzip().
496 Referenced by Ali\-HLTMessage().
498 \footnotesize\begin{verbatim}295 {
499 296 // Uncompress the message. The message will only be uncompressed when
500 297 // kMESS_ZIP is set. Returns -1 in case of error, 0 otherwise.
502 299 if (!fBufComp || !(fWhat & kMESS_ZIP))
506 303 Int_t hdrlen = 2*sizeof(UInt_t);
507 304 UChar_t *bufcur = (UChar_t*)fBufComp + hdrlen;
508 305 frombuf((char *&)bufcur, &buflen);
509 306 fBuffer = new char[buflen];
510 307 fBufSize = buflen;
511 308 fBufCur = fBuffer + sizeof(UInt_t) + sizeof(fWhat);
512 309 fBufMax = fBuffer + fBufSize;
513 310 char *messbuf = fBuffer + hdrlen;
515 312 Int_t nin, nout, nbuf;
516 313 Int_t noutot = 0;
518 315 nin = 9 + ((Int_t)bufcur[3] | ((Int_t)bufcur[4] << 8) | ((Int_t)bufcur[5] << 16));
519 316 nbuf = (Int_t)bufcur[6] | ((Int_t)bufcur[7] << 8) | ((Int_t)bufcur[8] << 16);
520 317 R__unzip(&nin, bufcur, &nbuf, messbuf, &nout);
521 318 if (!nout) break;
523 320 if (noutot >= buflen - hdrlen) break;
528 325 fWhat &= ~kMESS_ZIP;
533 \end{verbatim}\normalsize
536 \index{AliHLTMessage@{Ali\-HLTMessage}!What@{What}}
537 \index{What@{What}!AliHLTMessage@{Ali\-HLTMessage}}
538 \subsubsection{\setlength{\rightskip}{0pt plus 5cm}UInt\_\-t Ali\-HLTMessage::What () const\hspace{0.3cm}{\tt [inline]}}\label{classAliHLTMessage_a8}
543 Definition at line 86 of file Ali\-HLTMessage.h.
545 \footnotesize\begin{verbatim}86 { return fWhat; }
546 \end{verbatim}\normalsize
551 \subsection{Member Data Documentation}
552 \index{AliHLTMessage@{Ali\-HLTMessage}!fBufComp@{fBufComp}}
553 \index{fBufComp@{fBufComp}!AliHLTMessage@{Ali\-HLTMessage}}
554 \subsubsection{\setlength{\rightskip}{0pt plus 5cm}char$\ast$ {\bf Ali\-HLTMessage::f\-Buf\-Comp}\hspace{0.3cm}{\tt [private]}}\label{classAliHLTMessage_r3}
559 Definition at line 100 of file Ali\-HLTMessage.h.
561 Referenced by Ali\-HLTMessage(), Compress(), Reset(), Set\-Compression\-Level(), and Uncompress().\index{AliHLTMessage@{Ali\-HLTMessage}!fBufCompCur@{fBufCompCur}}
562 \index{fBufCompCur@{fBufCompCur}!AliHLTMessage@{Ali\-HLTMessage}}
563 \subsubsection{\setlength{\rightskip}{0pt plus 5cm}char$\ast$ {\bf Ali\-HLTMessage::f\-Buf\-Comp\-Cur}\hspace{0.3cm}{\tt [private]}}\label{classAliHLTMessage_r4}
568 Definition at line 101 of file Ali\-HLTMessage.h.
570 Referenced by Ali\-HLTMessage(), Comp\-Length(), Compress(), Reset(), and Set\-Compression\-Level().\index{AliHLTMessage@{Ali\-HLTMessage}!fClass@{fClass}}
571 \index{fClass@{fClass}!AliHLTMessage@{Ali\-HLTMessage}}
572 \subsubsection{\setlength{\rightskip}{0pt plus 5cm}TClass$\ast$ {\bf Ali\-HLTMessage::f\-Class}\hspace{0.3cm}{\tt [private]}}\label{classAliHLTMessage_r1}
577 Definition at line 98 of file Ali\-HLTMessage.h.
579 Referenced by Ali\-HLTMessage().\index{AliHLTMessage@{Ali\-HLTMessage}!fCompPos@{fCompPos}}
580 \index{fCompPos@{fCompPos}!AliHLTMessage@{Ali\-HLTMessage}}
581 \subsubsection{\setlength{\rightskip}{0pt plus 5cm}char$\ast$ {\bf Ali\-HLTMessage::f\-Comp\-Pos}\hspace{0.3cm}{\tt [private]}}\label{classAliHLTMessage_r5}
586 Definition at line 102 of file Ali\-HLTMessage.h.
588 Referenced by Ali\-HLTMessage(), Compress(), Forward(), Reset(), and Set\-Compression\-Level().\index{AliHLTMessage@{Ali\-HLTMessage}!fCompress@{fCompress}}
589 \index{fCompress@{fCompress}!AliHLTMessage@{Ali\-HLTMessage}}
590 \subsubsection{\setlength{\rightskip}{0pt plus 5cm}Int\_\-t {\bf Ali\-HLTMessage::f\-Compress}\hspace{0.3cm}{\tt [private]}}\label{classAliHLTMessage_r2}
595 Definition at line 99 of file Ali\-HLTMessage.h.
597 Referenced by Ali\-HLTMessage(), Compress(), Set\-Compression\-Level(), and Uncompress().\index{AliHLTMessage@{Ali\-HLTMessage}!fWhat@{fWhat}}
598 \index{fWhat@{fWhat}!AliHLTMessage@{Ali\-HLTMessage}}
599 \subsubsection{\setlength{\rightskip}{0pt plus 5cm}UInt\_\-t {\bf Ali\-HLTMessage::f\-What}\hspace{0.3cm}{\tt [private]}}\label{classAliHLTMessage_r0}
604 Definition at line 97 of file Ali\-HLTMessage.h.
606 Referenced by Ali\-HLTMessage(), Compress(), Reset(), Set\-What(), and Uncompress().
608 The documentation for this class was generated from the following files:\begin{CompactItemize}
610 /home/perthi/cern/aliroot/Ali\-Root\_\-head020507/HLT/BASE/{\bf Ali\-HLTMessage.h}\item
611 /home/perthi/cern/aliroot/Ali\-Root\_\-head020507/HLT/BASE/{\bf Ali\-HLTMessage.cxx}\end{CompactItemize}