00001 //_____________________________________________________________________________ 00017 00018 #include <iostream> 00019 #include <cassert> 00020 00021 #include "Rtypes.h" 00022 00023 #include "MessageService/MsgService.h" 00024 00025 #include "CandFitTrackSA/TrackFilterFactory.h" 00026 #include "CandFitTrackSA/TracerSA.h" 00027 00028 using std::map; 00029 using std::string; 00030 00031 CVSID("$Id: TrackFilterFactory.cxx,v 1.1 2006/02/04 21:47:35 avva Exp $"); 00032 00034 TrackFilterFactory* TrackFilterFactory::fInstance = 0; 00035 00038 TrackFilterFactory& TrackFilterFactory::Instance() 00039 { 00040 TracerSA trace("TrackFilterFactory::Instance()"); 00041 00042 if ( !fInstance ) fInstance = new TrackFilterFactory; 00043 return *fInstance; 00044 } // TrackFilterFactory& TrackFilterFactory::Instance() 00045 00046 00047 00050 bool TrackFilterFactory::RegisterTrackFilter( 00051 const string& hbname, 00052 Creator creator) 00053 { 00054 TracerSA trace("TrackFilterFactory::RegisterTrackFilter(string, Creator)"); 00055 00056 // map<>::insert(value_type) returns pair<iterator, bool> 00057 return fCallbacks.insert(CallbackMap::value_type(hbname, creator)).second; 00058 } // bool TrackFilterFactory::RegisterTrackFilter(string, Creator) 00059 00060 00061 00064 bool TrackFilterFactory::UnregisterTrackFilter(const string& hbname) 00065 { 00066 TracerSA trace("TrackFilterFactory::UnregisterTrackFilter(string)"); 00067 00068 return fCallbacks.erase(hbname) == 1; 00069 } // bool TrackFilterFactory::UnregisterTrackFilter(string) 00070 00071 00076 TrackFilter* TrackFilterFactory::GetTrackFilter(const string& fsname) 00077 { 00078 TracerSA trace("TrackFilterFactory::GetTrackFilter(string)"); 00079 00080 // check if requested state already exists 00081 StateMap::const_iterator i = fTrackFilters.find(fsname); 00082 00083 // return state if exists 00084 if ( i != fTrackFilters.end() ) { 00085 return i->second; 00086 } 00087 00088 // create it if doesn't exist 00089 TrackFilter* state = CreateTrackFilter(fsname); 00090 if ( state ) { 00091 fTrackFilters[fsname] = state; 00092 return state; 00093 } 00094 00095 assert(kFALSE && "Unknown state requested!!"); 00096 } // TrackFilter* TrackFilterFactory::GetTrackFilter(string) 00097 00098 TrackFilter* TrackFilterFactory::GetTrackFilter(const char* fsname) 00099 { 00100 return GetTrackFilter(std::string(fsname)); 00101 } 00102 00106 TrackFilter* 00107 TrackFilterFactory::CreateTrackFilter(const string& hbname) 00108 { 00109 TracerSA trace("TrackFilterFactory::CreateTrackFilter(const string&)"); 00110 00111 // find fitter state creator callback 00112 CallbackMap::const_iterator i = fCallbacks.find(hbname); 00113 00114 // create if callback found 00115 if ( i != fCallbacks.end() ) { 00116 return (i->second)(); 00117 } 00118 00119 MSG("FitTrackSA",Msg::kError) 00120 << "Dont know anything about " << hbname << endl; 00121 return 0; 00122 } // TrackFilter* TrackFilterFactory::CreateTrackFilter(string) 00123 00124 00125 // ctor and copy-ctor are private 00126 TrackFilterFactory::TrackFilterFactory(){} 00127 TrackFilterFactory::TrackFilterFactory(const TrackFilterFactory&){} 00128 // TrackFilterFactory&TrackFilterFactory::operator=(constTrackFilterFactory&){} 00129 // TrackFilterFactory::~TrackFilterFactory(){}
1.3.9.1