3 #ifndef ALIHLTCOMPONENTHANDLER_H
4 #define ALIHLTCOMPONENTHANDLER_H
5 /* Copyright(c) 1998-1999, ALICE Experiment at CERN, All rights reserved. *
6 * See cxx source for full Copyright notice */
8 /** @file AliHLTComponentHandler.h
9 @author Matthias Richter, Timm Steinbeck
11 @brief Global handling of HLT processing components
12 @note The handler is part of the interface and both used in the
13 Online (PubSub) and Offline (AliRoot) context.
19 #include "AliHLTDataTypes.h"
20 #include "AliHLTLogging.h"
22 class AliHLTComponent;
23 struct AliHLTComponentEnvironment;
24 struct AliHLTComponentDataType;
27 * @class AliHLTComponentHandler
28 * The component handler controls all the processing components available in
29 * the system. It also controls the component shared libraries.
30 * @ingroup alihlt_component
32 class AliHLTComponentHandler : public AliHLTLogging {
34 /** standard constructor */
35 AliHLTComponentHandler();
37 AliHLTComponentHandler(AliHLTComponentEnvironment* pEnv);
39 virtual ~AliHLTComponentHandler();
42 * Set the environment for the HLT framework.
43 * The environment mainly consists of function pointers for the integration
44 * of the HLT framework into a system like the PubSub online system or
45 * AliRoot offline system.
46 * @param pEnv pointer to @ref AliHLTComponentEnvironment structure
49 void SetEnvironment(AliHLTComponentEnvironment* pEnv);
52 * Load a component shared library.
53 * The component library needs to be loaded from the ComponentHanler in order
54 * to automatically register all components in the library.
55 * Registration is done by passing a sample object of the component to the
56 * handler. The object has to be valid during the whole runtime and should
57 * thus be a global object which is ONLY used for the purpose of registration.
58 * This also ensures automatically registration at library load time.
59 * @param libraryPath const char string containing the library name/path
60 * @return 0 if succeeded, neg. error code if failed
62 int LoadLibrary( const char* libraryPath );
65 * Find a symbol in a dynamically loaded library.
66 * @param library library
67 * @param symbol the symbol to find
68 * @return void pointer to function
70 void* FindSymbol(const char* library, const char* symbol);
73 * Unload a component shared library.
74 * All components will be de-registered.
75 * @param libraryPath library name as specified to @ref LoadLibrary
76 * @return 0 if succeeded, neg. error code if failed
78 int UnloadLibrary( const char* libraryPath );
81 * Schedule a component for registration.
82 * Full registration will be done after successfull loading of the shared
84 * @param pSample a sample object of the component
85 * @return neg. error code if failed
87 int ScheduleRegister(AliHLTComponent* pSample );
90 * Register a component.
91 * Registration is done by passing a sample object of the component to the
92 * handler. The object has to be valid during the whole runtime and should
93 * thus be a global object which is ONLY used for the purpose of registration.
94 * @param pSample a sample object of the component
95 * @return neg. error code if failed
97 int RegisterComponent(AliHLTComponent* pSample );
100 * Registers all scheduled components.
102 int RegisterScheduledComponents();
105 * Deregister a component.
106 * @param componentID ID of the component
107 * @return neg. error code if failed
109 int DeregisterComponent( const char* componentID );
112 * Add standard components
113 * The standard components are part of the libHLTbase library and
114 * need therefore a special handling.
116 int AddStandardComponents();
120 int DeleteStandardComponents();
123 * Find the ID of a component with the given output data.
124 * @param dtype data type descriptor
125 * @param prevType can be used to iterate if there are multiple components
126 * with the same output data type.
127 * @return component id
129 //const char* FindComponentType( AliHLTComponentDataType dtype,
130 // const char* prevType = NULL )
134 * Create a component of the given name (ID).
135 * The method tries to find a registerd component of id \em componentID and
136 * calls the \em Spawn method of the template component. After successful
137 * creation of a new object, the Init method is called in order to initialize
138 * the environment and the component arguments. <br>
139 * The environment is the same for all components, but each component can
140 * have an additional private parameter \em pEnvParam.<br>
141 * The component arguments consist of an array of strings and the array size
142 * in the usual manner of the main() function.
143 * @param componentID ID of the component to create
144 * @param pEnvParam environment parameter for the component
145 * @param argc number of arguments in argv
146 * @param argv argument array like in main()
147 * @param component reference to receive the create component instance
148 * @return component pointer in component, neg. error code if failed
150 int CreateComponent( const char* componentID, void* pEnvParam,
151 int argc, const char** argv, AliHLTComponent*& component );
154 * Create a component of the given name (ID).
155 * Introduced for backward compatibility.
156 * @param componentID ID of the component to create
157 * @param pEnvParam environment parameter for the component
158 * @param component reference to receive the create component instance
159 * @return component pointer in component, neg. error code if failed
161 int CreateComponent( const char* componentID, void* pEnvParam,
162 AliHLTComponent*& component )
164 return CreateComponent( componentID, pEnvParam, 0, NULL, component );
168 * Print registered components to stdout.
174 * Announce version and compilation info of the base library.
176 int AnnounceVersion();
183 * @param componentID ID of the component to find
184 * @return index, neg. error code if failed
186 int FindComponentIndex(const char* componentID);
190 * @param componentID ID of the component to find
193 AliHLTComponent* FindComponent(const char* componentID);
196 * Insert component to the list
197 * @param pSample sample object of the component
198 * @return neg. error code if failed
200 int InsertComponent(AliHLTComponent* pSample);
203 * Close all libraries.
204 * @return neg. error code if failed
206 int UnloadLibraries();
209 * Compount descriptor for component libraries
211 struct AliHLTLibHandle {
212 AliHLTLibHandle() : handle(NULL), name(NULL) {}
214 void* handle; //! transient
215 /** name of the library, casted to TString* before use */
216 void* name; //! transient
220 * Find a specific library among the loaded libraries.
221 * @param library library name/path
222 * @return pointer to AliHLTLibHandle
224 AliHLTLibHandle* FindLibrary(const char* library);
226 /** list of registered components */
227 vector<AliHLTComponent*> fComponentList; // see above
228 /** list of scheduled components */
229 vector<AliHLTComponent*> fScheduleList; // see above
230 /** list of libraries */
231 vector<AliHLTLibHandle> fLibraryList; // see above
232 /** running environment for the component */
233 AliHLTComponentEnvironment fEnvironment; // see above
234 /** list of standard components */
235 vector<AliHLTComponent*> fStandardList; // see above
237 ClassDef(AliHLTComponentHandler, 0);