3 #ifndef ALIHLTCONFIGURATION_H
4 #define ALIHLTCONFIGURATION_H
5 /* Copyright(c) 1998-1999, ALICE Experiment at CERN, All rights reserved. *
6 * See cxx source for full Copyright notice */
8 /** @file AliHLTConfiguration.h
9 @author Matthias Richter
11 @brief Base class and handling of HLT configurations.
12 @note The class is used in Offline (AliRoot) context
18 #include "AliHLTDataTypes.h"
19 #include "AliHLTLogging.h"
20 #include "AliHLTDataBuffer.h"
22 class AliHLTConfigurationHandler;
25 * @class AliHLTConfiguration
26 * @brief Description of HLT processing chains.
28 * This class describes a certain configuration af an HLT processing step
29 * by the following parameters:
30 * - a unique id string/name
31 * - the id of the component
32 * - the ids of the configurations it requires input from
33 * - the arguments, which are passed to the component when it is initialized
35 * The setup of a configuration requires simply the creation of a global object
36 * of @ref AliHLTConfiguration. The Configuration is automatically registered
37 * in the list of available configurations maintained by the @ref
38 * AliHLTConfigurationHandler. The list is used by to resolve the dependencies
39 * on other configurations. Hierarchies can be built up in an easy way.
41 * A configuration is interpreted by the @ref AliHLTConfigurationHandler and
42 * transformed into a Task List.
44 * @note This class is only used for the @ref alihlt_system.
46 * @ingroup alihlt_system
48 class AliHLTConfiguration : public TObject, public AliHLTLogging {
51 * standard constructor. The configuration is automatically registered in the
52 * global configuration manager
54 AliHLTConfiguration();
56 * constructor. The configuration is automatically registered in the
57 * global configuration manager
58 * @param id unique id of the configuration
59 * @param component component id
60 * @param sources blank separated list of source configuration ids
61 * @param arguments argument string passed to the component at initialization
63 AliHLTConfiguration(const char* id, const char* component,
64 const char* sources, const char* arguments);
65 /** not a valid copy constructor, defined according to effective C++ style */
66 AliHLTConfiguration(const AliHLTConfiguration&);
67 /** not a valid assignment op, but defined according to effective C++ style */
68 AliHLTConfiguration& operator=(const AliHLTConfiguration&);
71 virtual ~AliHLTConfiguration();
73 /*****************************************************************************
74 * global initialization
78 * Global initialization of the configuration handler.
80 static int GlobalInit(AliHLTConfigurationHandler* pHandler);
83 * Global de-init and cleanup of the global configuration handler
85 static int GlobalDeinit();
87 /*****************************************************************************
88 * properties of the configuration
92 * Get configuration id, a unique name
93 * This is an overridden TObject function in order to return the configuration
94 * name instead of the class name. Enables use of TList standard functions.
95 * @return configuration id
97 const char *GetName() const;
100 * Get id of the component.
101 * The id is a unique string.
102 * @return id of the component
104 const char* GetComponentID() {return fComponent;}
108 * Short summary on id, component, sources and unresolved sources.
113 * Get a certain source.
114 * @param id of the source configuration
115 * @result pointer to the corresponding configuration descriptor
117 AliHLTConfiguration* GetSource(const char* id);
120 * Try to find a dependency recursively in the list of sources.
121 * @param id the source to search for
122 * @param pTgtList (optional) target list to receive the dependency tree
125 * n found in the n-th level
126 * dependency list in the target list
128 int FollowDependency(const char* id, TList* pTgtList=NULL);
131 * Get the number of resolved sources.
132 * @return number of resolved sources
134 int GetNofSources() {return fListSources.size();}
137 * Check resolving status.
138 * @param bAuto resolve if ==1
139 * @return 1 if all sources resolved
141 int SourcesResolved(int bAuto=0);
144 * Start iteration and get the first source.
145 * @result pointer to the first configuration descriptor
147 AliHLTConfiguration* GetFirstSource();
150 * Continue iteration and get the next source.
151 * @result pointer to the next configuration descriptor in the list
153 AliHLTConfiguration* GetNextSource();
156 * Invalidate a dependency and mark the configuration to be re-evaluted.
157 * @param pConf pointer to configuration descriptor
159 int InvalidateSource(AliHLTConfiguration* pConf);
162 * Mark the configuration to be re-evaluted.
164 int InvalidateSources() {fNofSources=-1; return 0;}
167 * Get the arguments array.
168 * @param pArgv pointer to receive argument array pointer
169 * @return argc if succeeded, neg. error code if failed
171 int GetArguments(const char*** pArgv);
177 /* extract the source configurations from the sources string
179 int ExtractSources();
181 /* extract arguments from the argument string
183 int ExtractArguments();
185 /* helper function to build a vector from an argument string
187 int InterpreteString(const char* arg, vector<char*>& argList);
189 /** id of this configuration */
191 /** component id of this configuration */
192 const char* fComponent;
194 /** the <i>sources</i> string as passed to the constructor */
195 const char* fStringSources;
196 /** number of resolved sources, -1 indicates re-evaluation */
198 /** list of sources */
199 vector<AliHLTConfiguration*> fListSources;
200 /** iterator for the above list */
201 vector<AliHLTConfiguration*>::iterator fListSrcElement;
204 * The argument string as passed to the constructor.
205 * Specifies the arguments for the Analysys component. The string will
206 * be parsed and the separated arguments stored in the @ref fArgv array
207 * and @ref fArgc member.
209 const char* fArguments;
210 /** number of arguments */
212 /** argument array */
215 static AliHLTConfigurationHandler* fConfigurationHandler;
217 ClassDef(AliHLTConfiguration, 0);