3 /**************************************************************************
4 * Copyright(c) 1998-1999, ALICE Experiment at CERN, All rights reserved. *
6 * Authors: Matthias Richter <Matthias.Richter@ift.uib.no> *
7 * Timm Steinbeck <timm@kip.uni-heidelberg.de> *
8 * Artur Szostak <artursz@iafrica.com> *
9 * for The ALICE Off-line Project. *
11 * Permission to use, copy, modify and distribute this software and its *
12 * documentation strictly for non-commercial purposes is hereby granted *
13 * without fee, provided that the above copyright notice appears in all *
14 * copies and that both the copyright notice and this permission notice *
15 * appear in the supporting documentation. The authors make no claims *
16 * about the suitability of this software for any purpose. It is *
17 * provided "as is" without express or implied warranty. *
18 **************************************************************************/
20 ///////////////////////////////////////////////////////////////////////////////
22 // handler class for HLT analysis components //
24 ///////////////////////////////////////////////////////////////////////////////
33 #include "AliL3StandardIncludes.h"
34 #include "AliHLTComponentHandler.h"
35 #include "AliHLTComponent.h"
36 #include "AliHLTDataTypes.h"
37 #include "AliHLTSystem.h"
39 ClassImp(AliHLTComponentHandler)
41 AliHLTComponentHandler::AliHLTComponentHandler()
46 AliHLTComponentHandler::~AliHLTComponentHandler()
51 Int_t AliHLTComponentHandler::RegisterComponent(AliHLTComponent* pSample)
55 if (FindComponent(pSample->GetComponentID())==NULL) {
56 iResult=InsertComponent(pSample);
58 Logging(kHLTLogInfo, "BASE", "Component Handler", "component %s registered", pSample->GetComponentID());
61 // component already registered
62 Logging(kHLTLogInfo, "BASE", "Component Handler", "component %s already registered, skipped", pSample->GetComponentID());
71 int AliHLTComponentHandler::DeregisterComponent( const char* componentID )
76 Int_t AliHLTComponentHandler::ScheduleRegister(AliHLTComponent* pSample)
80 fScheduleList.push_back(pSample);
87 int AliHLTComponentHandler::CreateComponent(const Char_t* componentID, void* environ_param, int argc, const char** argv, AliHLTComponent*& component )
91 AliHLTComponent* pSample=FindComponent(componentID);
93 component=pSample->Spawn();
95 component->Init(&fEnvironment, environ_param, argc, argv);
104 Int_t AliHLTComponentHandler::FindComponentIndex(const Char_t* componentID)
108 vector<AliHLTComponent*>::iterator element=fComponentList.begin();
109 while (element!=fComponentList.end() && iResult>=0) {
110 if (strcmp(componentID, (*element)->GetComponentID())==0) {
116 if (element==fComponentList.end()) iResult=-ENOENT;
123 AliHLTComponent* AliHLTComponentHandler::FindComponent(const Char_t* componentID)
125 AliHLTComponent* pSample=NULL;
126 Int_t index=FindComponentIndex(componentID);
128 pSample=(AliHLTComponent*)fComponentList.at(index);
133 Int_t AliHLTComponentHandler::InsertComponent(AliHLTComponent* pSample)
137 fComponentList.push_back(pSample);
144 void AliHLTComponentHandler::List() {
145 vector<AliHLTComponent*>::iterator element=fComponentList.begin();
147 while (element!=fComponentList.end()) {
148 Logging(kHLTLogInfo, "BASE", "Component Handler", "%d. %s", index++, (*element++)->GetComponentID());
152 void AliHLTComponentHandler::SetEnvironment(AliHLTComponentEnvironment* pEnv) {
154 memcpy(&fEnvironment, pEnv, sizeof(AliHLTComponentEnvironment));
158 int AliHLTComponentHandler::LoadLibrary( const char* libraryPath )
162 AliHLTComponent::SetGlobalComponentHandler(this);
163 AliHLTLibHandle hLib=dlopen(libraryPath, RTLD_NOW);
165 AliHLTComponent::UnsetGlobalComponentHandler();
166 Logging(kHLTLogDebug, "BASE", "Component Handler", "library %s loaded", libraryPath);
167 fLibraryList.push_back(hLib);
168 vector<AliHLTComponent*>::iterator element=fScheduleList.begin();
169 int iSize=fScheduleList.size();
171 while (iSize-- > 0) {
172 element=fScheduleList.begin();
173 iLocalResult=RegisterComponent(*element);
174 if (iResult==0) iResult=iLocalResult;
175 fScheduleList.erase(element);
178 Logging(kHLTLogError, "BASE", "Component Handler", "can not load library %s", libraryPath);
179 Logging(kHLTLogError, "BASE", "Component Handler", "dlopen error: %s", dlerror());
188 int AliHLTComponentHandler::UnloadLibrary( const char* libraryPath )
194 int AliHLTComponentHandler::UnloadLibraries()
197 vector<AliHLTLibHandle>::iterator element=fLibraryList.begin();
198 while (element!=fLibraryList.end()) {
205 int AliHLTComponentHandler::Logging(AliHLTComponent_LogSeverity severity, const char* origin, const char* keyword, const char* format, ... ) {
206 if (fEnvironment.fLoggingFunc) {
208 va_start(args, format);
209 return (*fEnvironment.fLoggingFunc)( fEnvironment.fParam, severity, origin, keyword, AliHLTSystem::BuildLogString(format, args));