ROOT logo
// $Id$

///**************************************************************************
// * This file is property of and copyright by the                          * 
// * ALICE Experiment at CERN, All rights reserved.                         *
// *                                                                        *
// * Primary Authors: Matthias Richter <Matthias.Richter@ift.uib.no>        *
// *                  for The ALICE HLT Project.                            *
// *                                                                        *
// * Permission to use, copy, modify and distribute this software and its   *
// * documentation strictly for non-commercial purposes is hereby granted   *
// * without fee, provided that the above copyright notice appears in all   *
// * copies and that both the copyright notice and this permission notice   *
// * appear in the supporting documentation. The authors make no claims     *
// * about the suitability of this software for any purpose. It is          *
// * provided "as is" without express or implied warranty.                  *
// **************************************************************************

/// @file   AliHLTConsumerDescriptor.cxx
/// @author Matthias Richter
/// @date   
/// @brief  Helper class to describe a consumer component.
///

#include "AliHLTConsumerDescriptor.h"

/** ROOT macro for the implementation of ROOT specific class methods */
ClassImp(AliHLTConsumerDescriptor)

AliHLTConsumerDescriptor::AliHLTConsumerDescriptor()
  :
  fpConsumer(NULL),
  fSegments()
{
  // see header file for class documentation
  // or
  // refer to README to build package
  // or
  // visit http://web.ift.uib.no/~kjeks/doc/alice-hlt
  fSegments.clear();
}

AliHLTConsumerDescriptor::AliHLTConsumerDescriptor(AliHLTComponent* pConsumer)
  :
  fpConsumer(pConsumer),
  fSegments()
{
  // see header file for function documentation
  fSegments.clear();
}

AliHLTConsumerDescriptor::~AliHLTConsumerDescriptor()
{
  // see header file for function documentation
  if (fSegments.size()>0) {
    //HLTWarning("unreleased data segments found");
  }
}

int AliHLTConsumerDescriptor::SetActiveDataSegment(AliHLTDataBuffer::AliHLTDataSegment segment)
{
  // see header file for function documentation
  int iResult=0;
  fSegments.push_back(segment);
  //HLTDebug("set active segment (%d:%d) for consumer %p", offset, size, this);
  return iResult;
}

int AliHLTConsumerDescriptor::CheckActiveDataSegment(AliHLTDataBuffer::AliHLTDataSegment segment)
{
  // see header file for function documentation
  int iResult=0;
  if (fSegments.size()>0) {
    AliHLTDataBuffer::AliHLTDataSegmentList::iterator element=fSegments.begin();
    while (element!=fSegments.end()) {
      if ((iResult=(segment==(*element)))>0) {
	break;
      }
      element++;
    }
  } else {
    //HLTWarning("no data segment active for consumer %p", this);
    iResult=-ENODATA;
  }
  return iResult;
}

int AliHLTConsumerDescriptor::ReleaseActiveDataSegment(AliHLTDataBuffer::AliHLTDataSegment segment)
{
  // see header file for function documentation
  int iResult=0;
  if (fSegments.size()>0) {
    AliHLTDataBuffer::AliHLTDataSegmentList::iterator element=fSegments.begin();
    while (element!=fSegments.end()) {
      if ((iResult=(segment==(*element)))>0) {
	fSegments.erase(element);
	break;
      }
      element++;
    }
    if (iResult==0) {
      //HLTWarning("no data segment (%d:%d) active for consumer %p", offset, size, this);
      iResult=-ENOENT;
    }
  } else {
    //HLTWarning("no data segment active for consumer %p", this);
    iResult=-ENODATA;
  }
  return iResult;
}

void AliHLTConsumerDescriptor::Print(const char* /*option*/) const
{
  // print info about this descriptor
  cout << "AliHLTConsumerDescriptor " << this
       << " component ID " << (fpConsumer?fpConsumer->GetComponentID():"NULL")
    //<< " chain ID " << (fpConsumer?fpConsumer->GetChainId():"NULL")
       << endl;
  for (unsigned i=0; i<fSegments.size(); i++) {
    cout << "     ";
    fSegments[i].Print("");
  }
}
 AliHLTConsumerDescriptor.cxx:1
 AliHLTConsumerDescriptor.cxx:2
 AliHLTConsumerDescriptor.cxx:3
 AliHLTConsumerDescriptor.cxx:4
 AliHLTConsumerDescriptor.cxx:5
 AliHLTConsumerDescriptor.cxx:6
 AliHLTConsumerDescriptor.cxx:7
 AliHLTConsumerDescriptor.cxx:8
 AliHLTConsumerDescriptor.cxx:9
 AliHLTConsumerDescriptor.cxx:10
 AliHLTConsumerDescriptor.cxx:11
 AliHLTConsumerDescriptor.cxx:12
 AliHLTConsumerDescriptor.cxx:13
 AliHLTConsumerDescriptor.cxx:14
 AliHLTConsumerDescriptor.cxx:15
 AliHLTConsumerDescriptor.cxx:16
 AliHLTConsumerDescriptor.cxx:17
 AliHLTConsumerDescriptor.cxx:18
 AliHLTConsumerDescriptor.cxx:19
 AliHLTConsumerDescriptor.cxx:20
 AliHLTConsumerDescriptor.cxx:21
 AliHLTConsumerDescriptor.cxx:22
 AliHLTConsumerDescriptor.cxx:23
 AliHLTConsumerDescriptor.cxx:24
 AliHLTConsumerDescriptor.cxx:25
 AliHLTConsumerDescriptor.cxx:26
 AliHLTConsumerDescriptor.cxx:27
 AliHLTConsumerDescriptor.cxx:28
 AliHLTConsumerDescriptor.cxx:29
 AliHLTConsumerDescriptor.cxx:30
 AliHLTConsumerDescriptor.cxx:31
 AliHLTConsumerDescriptor.cxx:32
 AliHLTConsumerDescriptor.cxx:33
 AliHLTConsumerDescriptor.cxx:34
 AliHLTConsumerDescriptor.cxx:35
 AliHLTConsumerDescriptor.cxx:36
 AliHLTConsumerDescriptor.cxx:37
 AliHLTConsumerDescriptor.cxx:38
 AliHLTConsumerDescriptor.cxx:39
 AliHLTConsumerDescriptor.cxx:40
 AliHLTConsumerDescriptor.cxx:41
 AliHLTConsumerDescriptor.cxx:42
 AliHLTConsumerDescriptor.cxx:43
 AliHLTConsumerDescriptor.cxx:44
 AliHLTConsumerDescriptor.cxx:45
 AliHLTConsumerDescriptor.cxx:46
 AliHLTConsumerDescriptor.cxx:47
 AliHLTConsumerDescriptor.cxx:48
 AliHLTConsumerDescriptor.cxx:49
 AliHLTConsumerDescriptor.cxx:50
 AliHLTConsumerDescriptor.cxx:51
 AliHLTConsumerDescriptor.cxx:52
 AliHLTConsumerDescriptor.cxx:53
 AliHLTConsumerDescriptor.cxx:54
 AliHLTConsumerDescriptor.cxx:55
 AliHLTConsumerDescriptor.cxx:56
 AliHLTConsumerDescriptor.cxx:57
 AliHLTConsumerDescriptor.cxx:58
 AliHLTConsumerDescriptor.cxx:59
 AliHLTConsumerDescriptor.cxx:60
 AliHLTConsumerDescriptor.cxx:61
 AliHLTConsumerDescriptor.cxx:62
 AliHLTConsumerDescriptor.cxx:63
 AliHLTConsumerDescriptor.cxx:64
 AliHLTConsumerDescriptor.cxx:65
 AliHLTConsumerDescriptor.cxx:66
 AliHLTConsumerDescriptor.cxx:67
 AliHLTConsumerDescriptor.cxx:68
 AliHLTConsumerDescriptor.cxx:69
 AliHLTConsumerDescriptor.cxx:70
 AliHLTConsumerDescriptor.cxx:71
 AliHLTConsumerDescriptor.cxx:72
 AliHLTConsumerDescriptor.cxx:73
 AliHLTConsumerDescriptor.cxx:74
 AliHLTConsumerDescriptor.cxx:75
 AliHLTConsumerDescriptor.cxx:76
 AliHLTConsumerDescriptor.cxx:77
 AliHLTConsumerDescriptor.cxx:78
 AliHLTConsumerDescriptor.cxx:79
 AliHLTConsumerDescriptor.cxx:80
 AliHLTConsumerDescriptor.cxx:81
 AliHLTConsumerDescriptor.cxx:82
 AliHLTConsumerDescriptor.cxx:83
 AliHLTConsumerDescriptor.cxx:84
 AliHLTConsumerDescriptor.cxx:85
 AliHLTConsumerDescriptor.cxx:86
 AliHLTConsumerDescriptor.cxx:87
 AliHLTConsumerDescriptor.cxx:88
 AliHLTConsumerDescriptor.cxx:89
 AliHLTConsumerDescriptor.cxx:90
 AliHLTConsumerDescriptor.cxx:91
 AliHLTConsumerDescriptor.cxx:92
 AliHLTConsumerDescriptor.cxx:93
 AliHLTConsumerDescriptor.cxx:94
 AliHLTConsumerDescriptor.cxx:95
 AliHLTConsumerDescriptor.cxx:96
 AliHLTConsumerDescriptor.cxx:97
 AliHLTConsumerDescriptor.cxx:98
 AliHLTConsumerDescriptor.cxx:99
 AliHLTConsumerDescriptor.cxx:100
 AliHLTConsumerDescriptor.cxx:101
 AliHLTConsumerDescriptor.cxx:102
 AliHLTConsumerDescriptor.cxx:103
 AliHLTConsumerDescriptor.cxx:104
 AliHLTConsumerDescriptor.cxx:105
 AliHLTConsumerDescriptor.cxx:106
 AliHLTConsumerDescriptor.cxx:107
 AliHLTConsumerDescriptor.cxx:108
 AliHLTConsumerDescriptor.cxx:109
 AliHLTConsumerDescriptor.cxx:110
 AliHLTConsumerDescriptor.cxx:111
 AliHLTConsumerDescriptor.cxx:112
 AliHLTConsumerDescriptor.cxx:113
 AliHLTConsumerDescriptor.cxx:114
 AliHLTConsumerDescriptor.cxx:115
 AliHLTConsumerDescriptor.cxx:116
 AliHLTConsumerDescriptor.cxx:117
 AliHLTConsumerDescriptor.cxx:118
 AliHLTConsumerDescriptor.cxx:119
 AliHLTConsumerDescriptor.cxx:120
 AliHLTConsumerDescriptor.cxx:121
 AliHLTConsumerDescriptor.cxx:122
 AliHLTConsumerDescriptor.cxx:123