00001 #include "FitAlgorithmMap.h" 00002 #include "FitAlgorithm.h" 00003 #include "SctData/ConfigurationVariable.h" 00004 00005 #include <iostream> 00006 using namespace std; 00007 00008 namespace SctFitter { 00009 00010 FitAlgorithmMap& FitAlgorithmMap::instance() { 00011 static FitAlgorithmMap* map = new FitAlgorithmMap(); 00012 return *map; 00013 } 00014 00015 const FitAlgorithm& FitAlgorithmMap::getAlgorithm(const std::string name) const throw(Sct::InvalidArgument) { 00016 if (algMap.count(name) == 0) { 00017 std::cout << "Known names for algorithms" << endl; 00018 for (map<std::string, shared_ptr<FitAlgorithm> >::const_iterator i=algMap.begin(); 00019 i!=algMap.end(); ++i){ 00020 std::cout << "[" << (*i).first << "] " << endl; 00021 } 00022 Sct::InvalidArgumentError iae("No map for ConfigurationVariable: " + name, __FILE__, __LINE__ ); 00023 iae.setSeverity(MRS_DIAGNOSTIC); 00024 throw iae; 00025 } 00026 return *(*algMap.find(name)).second; 00027 } 00028 00029 bool FitAlgorithmMap::setAlgorithm(string variableName, auto_ptr<FitAlgorithm> alg) throw() { 00030 algMap[variableName] = shared_ptr<FitAlgorithm>(alg); 00031 return true; 00032 } 00033 00034 std::list<std::string> FitAlgorithmMap::listAlgorithms() const{ 00035 std::list<std::string> alg_list; 00036 for (map<std::string, shared_ptr<FitAlgorithm> >::const_iterator i=algMap.begin(); 00037 i!=algMap.end(); ++i){ 00038 alg_list.push_back((*i).first); 00039 } 00040 return alg_list; 00041 } 00042 00043 }