LCOV - code coverage report
Current view: top level - HLT/BASE - AliHLTConfiguration.h (source / functions) Hit Total Coverage
Test: coverage.info Lines: 1 9 11.1 %
Date: 2016-06-14 17:26:59 Functions: 1 16 6.2 %

          Line data    Source code
       1             : //-*- Mode: C++ -*-
       2             : // $Id$
       3             : 
       4             : #ifndef ALIHLTCONFIGURATION_H
       5             : #define ALIHLTCONFIGURATION_H
       6             : //* This file is property of and copyright by the                          * 
       7             : //* ALICE Experiment at CERN, All rights reserved.                         *
       8             : //* See cxx source for full Copyright notice                               *
       9             : 
      10             : /// @file   AliHLTConfiguration.h
      11             : /// @author Matthias Richter
      12             : /// @date   
      13             : /// @brief  HLT configuration description for a single component.
      14             : /// @note   The class is used in Offline (AliRoot) context
      15             : 
      16             : #include <vector>
      17             : #include <TObject.h>
      18             : #include <TList.h>
      19             : #include "AliHLTDataTypes.h"
      20             : #include "AliHLTLogging.h"
      21             : #include "AliHLTDataBuffer.h"
      22             : 
      23             : class AliHLTConfigurationHandler;
      24             : 
      25             : /**
      26             :  * @class AliHLTConfiguration
      27             :  * @brief Description of HLT processing chains.
      28             :  *
      29             :  * This class describes a configuration for an HLT component by means of
      30             :  * the following parameters:
      31             :  * - configuration id:      a unique id string/name
      32             :  * - component id:          id returned by AliHLTComponent::GetComponentID()
      33             :  * - parent configuartions: ids of configurations it requires input from
      34             :  * - component arguments:   passed to the component when it is initialized
      35             :  *
      36             :  * The definition of a configuration requires simply the creation of an object
      37             :  * of type @ref AliHLTConfiguration. 
      38             :  * <pre>
      39             :  * AliHLTConfiguration myprocessor("MyProcessor", "Dummy", "publisher", "-output_percentage 80")
      40             :  * </pre>
      41             :  *
      42             :  * The Configuration is automatically registered in the list of available
      43             :  * configurations maintained by the @ref AliHLTConfigurationHandler.
      44             :  * The list is used to resolve the dependencies on other configurations.
      45             :  * Hierarchies can be built up by specifying the configuration id of parent
      46             :  * configurations as input in the .
      47             :  * A configuration entry is persistent and must be explicitly removed from
      48             :  * the AliHLTConfigurationHandler if desired.
      49             :  *
      50             :  * The registration mechanism requires the HLT system to be available. The
      51             :  * global instance of AliHLTSystem is created and retrieved by
      52             :  * <pre>
      53             :  *   // setup the HLT system
      54             :  *   AliHLTSystem* pHLT=AliHLTPluginBase::GetInstance();
      55             :  * </pre>
      56             :  *
      57             :  * A configuration is transformed into a list of AliHLTTask objects by the
      58             :  * function AliHLTSystem::BuildTaskList().
      59             :  *
      60             :  * This class is only used in the HLT offline environment, see @ref alihlt_system
      61             :  * for more details.
      62             :  *
      63             :  * @ingroup alihlt_system
      64             :  */
      65             : class AliHLTConfiguration : public TObject, public AliHLTLogging {
      66             :  public:
      67             :   /**
      68             :    * standard constructor. The configuration is automatically registered in the
      69             :    * global configuration manager
      70             :    */
      71             :   AliHLTConfiguration();
      72             :   /**
      73             :    * constructor. The configuration is automatically registered in the
      74             :    * global configuration manager
      75             :    * @param id         unique id of the configuration
      76             :    * @param component  component id
      77             :    * @param sources    blank separated list of source configuration ids
      78             :    * @param arguments  argument string passed to the component at initialization
      79             :    * @param bufsize    size of the output buffer in byte, the string can contain a
      80             :    *                   number prepended by a unit, e.g. 1M, allowed units 'k' and 'M'
      81             :    */
      82             :   AliHLTConfiguration(const char* id, const char* component,
      83             :                       const char* sources, const char* arguments,
      84             :                       const char* bufsize=NULL);
      85             :   /** copy constructor */
      86             :   AliHLTConfiguration(const AliHLTConfiguration& src);
      87             :   /** assignment op */
      88             :   AliHLTConfiguration& operator=(const AliHLTConfiguration& src);
      89             :   /** destructor */
      90             :   virtual ~AliHLTConfiguration();
      91             : 
      92             :   /*****************************************************************************
      93             :    * properties of the configuration
      94             :    */
      95             : 
      96             :   /**
      97             :    * Get configuration id, a unique name
      98             :    * This is an overridden TObject function in order to return the configuration
      99             :    * name instead of the class name. Enables use of TList standard functions.
     100             :    * @return configuration id
     101             :    */
     102             :   const char *GetName() const;
     103             : 
     104             :   /**
     105             :    * Get id of the component.
     106             :    * The id is a unique string.
     107             :    * @return id of the component
     108             :    */
     109           0 :   const char* GetComponentID() const {return fComponent;}
     110             : 
     111             :   /**
     112             :    * Return the source string.
     113             :    */
     114           0 :   const char* GetSourceSettings() const {return fStringSources;}
     115             : 
     116             :   /**
     117             :    * Return the argument string.
     118             :    */
     119           0 :   const char* GetArgumentSettings() const {return fArguments;}
     120             : 
     121             :   /**
     122             :    * Print status info.
     123             :    * Short summary on id, component, sources and unresolved sources.
     124             :    */
     125             :   void PrintStatus() const;
     126             : 
     127             :   /**
     128             :    * overloaded from TObject
     129             :    * options:
     130             :    *   status  - print status including the resolved sources
     131             :    */
     132             :   virtual void Print(const char* option="") const;
     133             : 
     134             :   /**
     135             :    * Get a certain source.
     136             :    * @param  id of the source configuration
     137             :    * @result pointer to the corresponding configuration descriptor
     138             :    */
     139             :   AliHLTConfiguration* GetSource(const char* id);
     140             : 
     141             :   /**
     142             :    * Try to find a dependency recursively in the list of sources.
     143             :    * @param id       the source to search for
     144             :    * @param pTgtList (optional) target list to receive the dependency tree
     145             :    * @return
     146             :    *   0 if not found
     147             :    *   n found in the n-th level
     148             :    *   dependency list in the target list  
     149             :    */
     150             :   int FollowDependency(const char* id, TList* pTgtList=NULL);
     151             : 
     152             :   /**
     153             :    * Get the number of resolved sources.
     154             :    * @return number of resolved sources
     155             :    */
     156           0 :   int GetNofSources() {return fListSources.size();}
     157             : 
     158             :   /**
     159             :    * Check resolving status.
     160             :    * @return 1 if all sources resolved, 0 if not yet extracted or not resolved
     161             :    */
     162             :   int SourcesResolved() const;
     163             : 
     164             :   /**
     165             :    * extract the source configurations from the sources string
     166             :    * builds up the internal list of source configurations
     167             :    * @result 1 if sources resolved, 0 if not
     168             :    */
     169             :   int ExtractSources(AliHLTConfigurationHandler* pHandler);
     170             : 
     171             :   /**
     172             :    * Start iteration and get the first source.
     173             :    * @result pointer to the first configuration descriptor
     174             :    */
     175             :   AliHLTConfiguration* GetFirstSource() const;
     176             : 
     177             :   /**
     178             :    * Continue iteration and get the next source.
     179             :    * @result pointer to the next configuration descriptor in the list
     180             :    */
     181             :   AliHLTConfiguration* GetNextSource() const;
     182             : 
     183             :   /**
     184             :    * Invalidate a dependency and mark the configuration to be re-evaluted. 
     185             :    * @param pConf pointer to configuration descriptor
     186             :    */
     187             :   int InvalidateSource(AliHLTConfiguration* pConf);
     188             : 
     189             :   /**
     190             :    * Mark the configuration to be re-evaluted.
     191             :    */
     192           0 :   int InvalidateSources() {fNofSources=-1; return 0;}
     193             : 
     194             :   /**
     195             :    * Get the arguments array.
     196             :    * @param pArgv   pointer to receive argument array pointer
     197             :    * @return argc if succeeded, neg. error code if failed
     198             :    */
     199             :   int GetArguments(const char*** pArgv) const;
     200             : 
     201             :   /**
     202             :    * Get output buffer size.
     203             :    * @return size in byte or -1 if not specified
     204             :    */
     205           0 :   int GetOutputBufferSize() const {return fBufferSize;}
     206             : 
     207             :   /**
     208             :    * Two configurations are considered equal if all properties match
     209             :    */
     210             :   bool operator==(const AliHLTConfiguration& c) const {
     211           0 :     return (fID==c.fID) && (fComponent==c.fComponent) && (fStringSources==c.fStringSources) && (fArguments==c.fArguments);
     212             :   }
     213             :   bool operator!=(const AliHLTConfiguration& c) const {
     214           0 :     return !(*this==c);
     215             :   }
     216             : 
     217             :   /**
     218             :    * Helper function to build a vector from an argument string.
     219             :    * The function allocates memory for each token. The caller is responsible
     220             :    * for cleaning the strings recursively.
     221             :    * @param arg       pointer to argument string
     222             :    * @param argList   target to receive the argument list
     223             :    */
     224             :   static int InterpreteString(const char* arg, vector<char*>& argList);
     225             : 
     226             :  protected:
     227             :   
     228             : 
     229             :  private:
     230             :   /* extract arguments from the argument string
     231             :    */
     232             :   int ExtractArguments();
     233             : 
     234             :   /**
     235             :    * Convert buffer size string to number
     236             :    */
     237             :   int ConvertSizeString(const char* strSize) const;
     238             : 
     239             :   /** id of this configuration */
     240             :   TString fID;                                                     // see above
     241             :   /** component id of this configuration */
     242             :   TString fComponent;                                              // see above
     243             : 
     244             :   /** the <i>sources</i> string as passed to the constructor */
     245             :   TString fStringSources;                                          // see above
     246             :   /** number of resolved sources, -1 indicates re-evaluation */
     247             :   int fNofSources;                                                 //! transient
     248             :   /** list of sources */
     249             :   vector<AliHLTConfiguration*> fListSources;                       //! transient
     250             :   /** index of the current element in the list of sources */
     251             :   int fListSrcElementIdx;                                          //! transient
     252             : 
     253             :   /**
     254             :    * The argument string as passed to the constructor.
     255             :    * Specifies the arguments for the Analysys component. The string will
     256             :    * be parsed and the separated arguments stored in the @ref fArgv array
     257             :    * and @ref fArgc member.
     258             :    */
     259             :   TString fArguments;                                              // see above
     260             :   /** number of arguments */
     261             :   int fArgc;                                                       //! transient
     262             :   /** argument array */
     263             :   char** fArgv;                                                    //! transient
     264             : 
     265             :   /** size of the output buffer */
     266             :   int fBufferSize;                                                 // see above
     267             : 
     268         126 :   ClassDef(AliHLTConfiguration, 0);
     269             : };
     270             : 
     271             : #endif

Generated by: LCOV version 1.11