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
00067
00068 MSG("LIFilter", Msg::kVerbose)
00069 << "SimplePatternFinder selected" << endl;
00070
00071
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
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