Main Page | Modules | Namespace List | Class Hierarchy | Alphabetical List | Class List | Directories | File List | Namespace Members | Class Members | File Members | Related Pages

LIFinderFactory.cxx

Go to the documentation of this file.
00001 
00016 #include "MessageService/MsgService.h"
00017 
00018 #include "LIFinderFactory.h"
00019 #include "LIPatternFinder.h"
00020 #include "LIPatternFinderSimple.h"
00021 #include "LIPatternFinderFancy.h"
00022 
00023 ClassImp(LIFinderFactory)
00024 
00025 //_____________________________________________________________________
00026 CVSID("$Id: LIFinderFactory.cxx,v 1.2 2004/04/07 20:44:30 costas Exp $");
00027 //_____________________________________________________________________
00028 LIFinderFactory * LIFinderFactory::fSelf = 0;
00029 //_____________________________________________________________________
00030 LIFinderFactory * LIFinderFactory::GetInstance(void)
00031 {
00032   MSG("LIFilter", Msg::kVerbose) << "LIFinderFactory::Instance" << endl;
00033   
00034   if(fSelf == 0) {
00035 
00036     static LIFinderFactory::Cleaner cleaner;
00037     
00038     cleaner.DummyMethodAndSilentCompiler();
00039     
00040     fSelf = new LIFinderFactory;
00041   }
00042   
00043   return fSelf;
00044 }
00045 //_____________________________________________________________________
00046 LIFinderFactory::LIFinderFactory()
00047 {
00048   fSelf = 0;
00049 }
00050 //_____________________________________________________________________
00051 LIFinderFactory::~LIFinderFactory()
00052 {
00053   fSelf = 0;
00054 
00055   fAvailableAlgorithms.clear();
00056 }
00057 //_____________________________________________________________________
00058 LIPatternFinder * LIFinderFactory::LIFinder(const char * algname)
00059 {
00060   MSG("LIFilter", Msg::kVerbose)
00061            << "LIFinderFactory: [" << algname
00062                                    << "] algorithm requested " << endl;
00063 
00064   if( strcmp(algname,"SimplePatternFinder") == 0 ) {
00065 
00066     //--- retrieve or instantiate a LIPatternFinderSimple object
00067 
00068     MSG("LIFilter", Msg::kVerbose)
00069                              << "SimplePatternFinder selected" << endl;
00070 
00071     //return new LIPatternFinderSimple;
00072                                  
00073     if( AlgorithmExists("SimplePatternFinder") )
00074           return GetAlgorithm("SimplePatternFinder");
00075     else  {                    
00076           LIPatternFinder * pattern_finder = new LIPatternFinderSimple;
00077           AddAlgorithm("SimplePatternFinder", pattern_finder);
00078           return GetAlgorithm("SimplePatternFinder");
00079     }
00080     
00081   } else if ( strcmp(algname,"FancyPatternFinder") == 0 ) {
00082 
00083     //--- retrieve or instantiate a LIPatternFinderFancy object
00084 
00085     MSG("LIFilter", Msg::kVerbose)
00086                               << "FancyPatternFinder selected" << endl;
00087 
00088     if( AlgorithmExists("FancyPatternFinder") )
00089           return GetAlgorithm("FancyPatternFinder");
00090     else  {
00091           LIPatternFinder * pattern_finder = new LIPatternFinderFancy;
00092           AddAlgorithm("FancyPatternFinder", pattern_finder);
00093           return GetAlgorithm("FancyPatternFinder");
00094     }
00095 
00096   } else return 0;
00097 }
00098 //_____________________________________________________________________
00099 bool LIFinderFactory::AlgorithmExists(const char * alg_name) const
00100 {
00101   return (fAvailableAlgorithms.count(string(alg_name)) == 1);
00102 }
00103 //_____________________________________________________________________
00104 void LIFinderFactory::AddAlgorithm(
00105                           const char * alg_name, LIPatternFinder * alg)
00106 {
00107   fAvailableAlgorithms.insert(
00108           map<string, LIPatternFinder *>::value_type(
00109                                               string(alg_name), alg) );
00110 }
00111 //_____________________________________________________________________
00112 LIPatternFinder * LIFinderFactory::GetAlgorithm(
00113                                            const char * alg_name) const
00114 {
00115   map<string, LIPatternFinder *>::const_iterator alg_iter;
00116 
00117   alg_iter = fAvailableAlgorithms.find(string(alg_name));
00118 
00119   return alg_iter->second;
00120 }
00121 //_____________________________________________________________________
00122 

Generated on Mon Feb 15 11:06:51 2010 for loon by  doxygen 1.3.9.1