X-Git-Url: http://git.uio.no/git/?a=blobdiff_plain;f=HLT%2Ftrigger%2FAliHLTGlobalTrigger.cxx;h=204ae0f9060cd76f5a43ce9ae36e2b01aa45f709;hb=11d95f543a7c2c8cba8dca84b423f7dcd39973f1;hp=08914ef3030e6a369462a562c24c796a03a90869;hpb=566a01d08aee7d7ccd555f87035ca3780efe954d;p=u%2Fmrichter%2FAliRoot.git diff --git a/HLT/trigger/AliHLTGlobalTrigger.cxx b/HLT/trigger/AliHLTGlobalTrigger.cxx index 08914ef3030..204ae0f9060 100644 --- a/HLT/trigger/AliHLTGlobalTrigger.cxx +++ b/HLT/trigger/AliHLTGlobalTrigger.cxx @@ -20,96 +20,39 @@ /// @date 19 Dec 2008 /// @brief Implementation of the AliHLTGlobalTrigger base class. /// -/// The AliHLTGlobalTriggerComponent class is an abstract class from which a -/// derived class is constructed by AliHLTTriggerMenu on the fly. The derived +/// The AliHLTGlobalTrigger base class is an abstract class from which a +/// derived class is constructed from AliHLTTriggerMenu on the fly. The derived /// class then implements triggering based on the particular trigger menu. #include "AliHLTGlobalTrigger.h" -#include "AliHLTGlobalTriggerDecision.h" -#include +#include "AliHLTGlobalTriggerWrapper.h" +#include "TClass.h" ClassImp(AliHLTGlobalTrigger) -// Static factory array. -AliHLTGlobalTrigger::Factory* -AliHLTGlobalTrigger::Factory::fFactory[AliHLTGlobalTrigger::Factory::kMaxFactories] - = {NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL}; - -AliHLTGlobalTrigger::AliHLTGlobalTrigger() : - AliHLTLogging(), - fCounters() -{ - // Default constructor. -} - - -AliHLTGlobalTrigger::~AliHLTGlobalTrigger() -{ - // Default destructor. -} - - -AliHLTGlobalTrigger* AliHLTGlobalTrigger::Factory::CreateNew(const char* name) -{ - // Creates a new instance of the named trigger class. - - for (int i = 0; i < kMaxFactories; i++) - { - if (fFactory[i] != NULL) - { - if (strcmp(fFactory[i]->ClassName(), name) == 0) - { - return fFactory[i]->New(); - } - } - } - return NULL; -} - - -AliHLTGlobalTrigger::Factory::Factory() : AliHLTLogging() +AliHLTGlobalTrigger* AliHLTGlobalTrigger::CreateNew(const char* name) { - // Default constructor resisters the class factory. + // Creates a new instance of the named global trigger class. - for (int i = 0; i < kMaxFactories; i++) + TClass* c = TClass::GetClass(name); + if (c == NULL) return NULL; + if (c->GetDeclFileLine() == -1 and c->GetImplFileLine() == -1) { - if (fFactory[i] == NULL) + // Could not find the implementation lines which should be there if the code + // was compiled. So assuming that this is an interpreted class. In this case + // we need to use a interface wrapper class to make things work properly. + AliHLTGlobalTriggerWrapper* trigger = new AliHLTGlobalTriggerWrapper(name); + if (not trigger->IsValid()) { - fFactory[i] = this; - return; + delete trigger; + return NULL; } + return trigger; } - - HLTFatal("Trying to register too many global trigger factories."); -} - - -AliHLTGlobalTrigger::Factory::~Factory() -{ - // The default destructor deregisters the factory. - - for (int i = 0; i < kMaxFactories; i++) - { - if (fFactory[i] == this) - { - fFactory[i] = NULL; - return; - } - } - - HLTFatal("Could not find factory to deregister."); -} - - -void AliHLTGlobalTrigger::ResetCounters(UInt_t number) -{ - // Resets the trigger counters. - - fCounters.Set(number); - for (UInt_t i = 0; i < number; i++) + else { - fCounters[i] = 0; + return static_cast(c->New()); } }