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 }