ROOT logo
// -*- Mode: C++ -*-
// $Id$

#ifndef ALIHLTBLOCKDATACOLLECTION_H
#define ALIHLTBLOCKDATACOLLECTION_H
//* This file is property of and copyright by the ALICE HLT Project        * 
//* ALICE Experiment at CERN, All rights reserved.                         *
//* See cxx source for full Copyright notice                               *

/** @file   AliHLTBlockDataCollection.h
    @author Matthias Richter
    @date   
    @brief  A collection of AliHLTComponentBlockData descriptors providing
            argument parsing and basic selection.
*/

#include "AliHLTLogging.h"
#include "vector"
#include "TObject.h"

/**
 * @class AliHLTBlockDataCollection
 * Class handles a list of AliHLTComponentBlockData entries and parsing of
 * argument list to fill it. Originally taken from AliHLTBlickFilterComponent,
 * but decided to be commonly of benefit.
 *
 * See ScanArgument() function for description of available arguments
 * <pre>
 * -datatype ID ORIGIN
 * -typeid ID
 * -origin ORIGIN
 * -dataspec SPEC
 * </pre>
 *
 * @ingroup alihlt_base
 */
class AliHLTBlockDataCollection : public TObject, public AliHLTLogging
{
 public:
  /** standard constructor */
  AliHLTBlockDataCollection();
  /** destructor */
  virtual ~AliHLTBlockDataCollection();

  /**
   * Add data block descriptor.
   */
  int Add(const AliHLTComponentBlockData& block);

  /**
   * Check if the data block is selected by the filter rules.
   * @return 1 if selected
   */
  int IsSelected(const AliHLTComponentBlockData& block);

  /**
   * Scan argument and read block descriptor data.
   * The function is invoked by components in the course of argument
   * scan.
   *
   * Scan the list for known arguments, terminates at the first unknown argument.
   * Recognized arguments:
   * \li -datatype     <i> id origin      </i>                            <br>
   *      e.g. <tt> -datatype 'ESD_TREE' 'TPC ' </tt>                     <br>
   *      \b Note: due to the 4-character data origin it might be necessary to
   *      append a blank to the detectorname, e.g. <tt>TPC -> 'TPC '</tt>
   *
   * \li -origin  <i> origin  </i>                                        <br>
   *      e.g. -origin 'TPC ', \b Note:  the filter rule has type id 'ANY'
   *
   * \li -typeid  <i> id      </i>                                        <br>
   *      e.g. -typeid ESD_TREE, \b Note: the filter rule has origin 'ANY'
   *
   * \li -dataspec     <i> specification </i>                             <br>
   *      data specification treated as decimal number or hex number if
   *      prepended by '0x'
   * 
   * @return number of arguments which have been treated.
   */
  int ScanArgument(int argc, const char** argv );

  /**
   * Check collection for content.
   * @return 1 if empty, 0 if content available
   */
  int IsEmpty();
 protected:

 private:
  /** copy constructor prohibited */
  AliHLTBlockDataCollection(const AliHLTBlockDataCollection&);
  /** assignment operator prohibited */
  AliHLTBlockDataCollection& operator=(const AliHLTBlockDataCollection&);

  /** filtering rules, only the data type and specification members are use */
  vector<AliHLTComponentBlockData> fFilterRules;                       //! transient

  ClassDef(AliHLTBlockDataCollection, 0)
};
#endif
 AliHLTBlockDataCollection.h:1
 AliHLTBlockDataCollection.h:2
 AliHLTBlockDataCollection.h:3
 AliHLTBlockDataCollection.h:4
 AliHLTBlockDataCollection.h:5
 AliHLTBlockDataCollection.h:6
 AliHLTBlockDataCollection.h:7
 AliHLTBlockDataCollection.h:8
 AliHLTBlockDataCollection.h:9
 AliHLTBlockDataCollection.h:10
 AliHLTBlockDataCollection.h:11
 AliHLTBlockDataCollection.h:12
 AliHLTBlockDataCollection.h:13
 AliHLTBlockDataCollection.h:14
 AliHLTBlockDataCollection.h:15
 AliHLTBlockDataCollection.h:16
 AliHLTBlockDataCollection.h:17
 AliHLTBlockDataCollection.h:18
 AliHLTBlockDataCollection.h:19
 AliHLTBlockDataCollection.h:20
 AliHLTBlockDataCollection.h:21
 AliHLTBlockDataCollection.h:22
 AliHLTBlockDataCollection.h:23
 AliHLTBlockDataCollection.h:24
 AliHLTBlockDataCollection.h:25
 AliHLTBlockDataCollection.h:26
 AliHLTBlockDataCollection.h:27
 AliHLTBlockDataCollection.h:28
 AliHLTBlockDataCollection.h:29
 AliHLTBlockDataCollection.h:30
 AliHLTBlockDataCollection.h:31
 AliHLTBlockDataCollection.h:32
 AliHLTBlockDataCollection.h:33
 AliHLTBlockDataCollection.h:34
 AliHLTBlockDataCollection.h:35
 AliHLTBlockDataCollection.h:36
 AliHLTBlockDataCollection.h:37
 AliHLTBlockDataCollection.h:38
 AliHLTBlockDataCollection.h:39
 AliHLTBlockDataCollection.h:40
 AliHLTBlockDataCollection.h:41
 AliHLTBlockDataCollection.h:42
 AliHLTBlockDataCollection.h:43
 AliHLTBlockDataCollection.h:44
 AliHLTBlockDataCollection.h:45
 AliHLTBlockDataCollection.h:46
 AliHLTBlockDataCollection.h:47
 AliHLTBlockDataCollection.h:48
 AliHLTBlockDataCollection.h:49
 AliHLTBlockDataCollection.h:50
 AliHLTBlockDataCollection.h:51
 AliHLTBlockDataCollection.h:52
 AliHLTBlockDataCollection.h:53
 AliHLTBlockDataCollection.h:54
 AliHLTBlockDataCollection.h:55
 AliHLTBlockDataCollection.h:56
 AliHLTBlockDataCollection.h:57
 AliHLTBlockDataCollection.h:58
 AliHLTBlockDataCollection.h:59
 AliHLTBlockDataCollection.h:60
 AliHLTBlockDataCollection.h:61
 AliHLTBlockDataCollection.h:62
 AliHLTBlockDataCollection.h:63
 AliHLTBlockDataCollection.h:64
 AliHLTBlockDataCollection.h:65
 AliHLTBlockDataCollection.h:66
 AliHLTBlockDataCollection.h:67
 AliHLTBlockDataCollection.h:68
 AliHLTBlockDataCollection.h:69
 AliHLTBlockDataCollection.h:70
 AliHLTBlockDataCollection.h:71
 AliHLTBlockDataCollection.h:72
 AliHLTBlockDataCollection.h:73
 AliHLTBlockDataCollection.h:74
 AliHLTBlockDataCollection.h:75
 AliHLTBlockDataCollection.h:76
 AliHLTBlockDataCollection.h:77
 AliHLTBlockDataCollection.h:78
 AliHLTBlockDataCollection.h:79
 AliHLTBlockDataCollection.h:80
 AliHLTBlockDataCollection.h:81
 AliHLTBlockDataCollection.h:82
 AliHLTBlockDataCollection.h:83
 AliHLTBlockDataCollection.h:84
 AliHLTBlockDataCollection.h:85
 AliHLTBlockDataCollection.h:86
 AliHLTBlockDataCollection.h:87
 AliHLTBlockDataCollection.h:88
 AliHLTBlockDataCollection.h:89
 AliHLTBlockDataCollection.h:90
 AliHLTBlockDataCollection.h:91
 AliHLTBlockDataCollection.h:92
 AliHLTBlockDataCollection.h:93
 AliHLTBlockDataCollection.h:94
 AliHLTBlockDataCollection.h:95
 AliHLTBlockDataCollection.h:96
 AliHLTBlockDataCollection.h:97
 AliHLTBlockDataCollection.h:98
 AliHLTBlockDataCollection.h:99
 AliHLTBlockDataCollection.h:100