]> git.uio.no Git - u/mrichter/AliRoot.git/blob - HLT/BASE/AliHLTConsumerDescriptor.cxx
The file publisher now closes files when it is done with them during a given event...
[u/mrichter/AliRoot.git] / HLT / BASE / AliHLTConsumerDescriptor.cxx
1 // $Id$
2
3 /**************************************************************************
4  * This file is property of and copyright by the ALICE HLT Project        * 
5  * ALICE Experiment at CERN, All rights reserved.                         *
6  *                                                                        *
7  * Primary Authors: Matthias Richter <Matthias.Richter@ift.uib.no>        *
8  *                  for The ALICE HLT Project.                            *
9  *                                                                        *
10  * Permission to use, copy, modify and distribute this software and its   *
11  * documentation strictly for non-commercial purposes is hereby granted   *
12  * without fee, provided that the above copyright notice appears in all   *
13  * copies and that both the copyright notice and this permission notice   *
14  * appear in the supporting documentation. The authors make no claims     *
15  * about the suitability of this software for any purpose. It is          *
16  * provided "as is" without express or implied warranty.                  *
17  **************************************************************************/
18
19 /** @file   AliHLTConsumerDescriptor.cxx
20     @author Matthias Richter
21     @date   
22     @brief  Helper class to describe a consumer component.
23 */
24
25 #if __GNUC__>= 3
26 using namespace std;
27 #endif
28
29 #include "AliHLTConsumerDescriptor.h"
30
31 /** ROOT macro for the implementation of ROOT specific class methods */
32 ClassImp(AliHLTConsumerDescriptor)
33
34 AliHLTConsumerDescriptor::AliHLTConsumerDescriptor()
35   :
36   fpConsumer(NULL),
37   fSegments()
38 {
39   // see header file for class documentation
40   // or
41   // refer to README to build package
42   // or
43   // visit http://web.ift.uib.no/~kjeks/doc/alice-hlt
44   fSegments.clear();
45 }
46
47 AliHLTConsumerDescriptor::AliHLTConsumerDescriptor(AliHLTComponent* pConsumer)
48   :
49   fpConsumer(pConsumer),
50   fSegments()
51 {
52   // see header file for function documentation
53   fSegments.clear();
54 }
55
56 AliHLTConsumerDescriptor::~AliHLTConsumerDescriptor()
57 {
58   // see header file for function documentation
59   if (fSegments.size()>0) {
60     //HLTWarning("unreleased data segments found");
61   }
62 }
63
64 int AliHLTConsumerDescriptor::SetActiveDataSegment(AliHLTUInt32_t offset, AliHLTUInt32_t size)
65 {
66   // see header file for function documentation
67   int iResult=0;
68   AliHLTDataBuffer::AliHLTDataSegment segment(offset, size);
69   fSegments.push_back(segment);
70   //HLTDebug("set active segment (%d:%d) for consumer %p", offset, size, this);
71   return iResult;
72 }
73
74 int AliHLTConsumerDescriptor::CheckActiveDataSegment(AliHLTUInt32_t offset, AliHLTUInt32_t size)
75 {
76   // see header file for function documentation
77   int iResult=0;
78   if (fSegments.size()>0) {
79     vector<AliHLTDataBuffer::AliHLTDataSegment>::iterator segment=fSegments.begin();
80     while (segment!=fSegments.end()) {
81       if ((iResult=((*segment).fSegmentOffset==offset && (*segment).fSegmentSize==size))>0) {
82         break;
83       }
84       segment++;
85     }
86   } else {
87     //HLTWarning("no data segment active for consumer %p", this);
88     iResult=-ENODATA;
89   }
90   return iResult;
91 }
92
93 int AliHLTConsumerDescriptor::ReleaseActiveDataSegment(AliHLTUInt32_t offset, AliHLTUInt32_t size)
94 {
95   // see header file for function documentation
96   int iResult=0;
97   if (fSegments.size()>0) {
98     vector<AliHLTDataBuffer::AliHLTDataSegment>::iterator segment=fSegments.begin();
99     while (segment!=fSegments.end()) {
100       if ((iResult=((*segment).fSegmentOffset==offset && (*segment).fSegmentSize==size))>0) {
101         fSegments.erase(segment);
102         break;
103       }
104       segment++;
105     }
106     if (iResult==0) {
107       //HLTWarning("no data segment (%d:%d) active for consumer %p", offset, size, this);
108       iResult=-ENOENT;
109     }
110   } else {
111     //HLTWarning("no data segment active for consumer %p", this);
112     iResult=-ENODATA;
113   }
114   return iResult;
115 }