00001 #include "AnalysisAlgorithmMap.h" 00002 #include "AnalysisAlgorithm.h" 00003 #include "CalibrationController/IS/TestData.h" 00004 #include <sstream> 00005 00006 using namespace std; 00007 00008 namespace SctAnalysis { 00009 00010 typedef map<string, shared_ptr<AnalysisAlgorithm> > MapType; 00011 00012 AnalysisAlgorithmMap& AnalysisAlgorithmMap::instance() { 00013 static AnalysisAlgorithmMap* instance = new AnalysisAlgorithmMap(); 00014 return *instance; 00015 } 00016 00017 shared_ptr <AnalysisAlgorithm> AnalysisAlgorithmMap::getAlgorithm(const TestData& testData, const string& moduleName) const throw(Sct::InvalidArgument) { 00018 if (algMap.count(testData.testName) == 0) { 00019 Sct::InvalidArgumentError iae("No map for Test: " + testData.testName, __FILE__, __LINE__); 00020 iae.setSeverity(MRS_DIAGNOSTIC); 00021 throw iae; 00022 } 00023 return (*algMap.find(testData.testName)).second->clone(testData, moduleName); 00024 } 00025 00026 bool AnalysisAlgorithmMap::setAlgorithm(const string testName, auto_ptr<AnalysisAlgorithm> alg) throw() { 00027 algMap[testName] = shared_ptr<AnalysisAlgorithm>(alg); 00028 return true; 00029 } 00030 00031 string AnalysisAlgorithmMap::getStatus(string testName) { 00032 if (algMap.count(testName) == 0) { 00033 return string(); 00034 } 00035 return algMap[testName]->getStatus(); 00036 } 00037 00038 string AnalysisAlgorithmMap::getAllStatus() { 00039 ostringstream status; 00040 for (MapType::const_iterator i=algMap.begin(); i!=algMap.end(); ++i) { 00041 status << i->first << " Algorithm " << i->second->getStatus() << "\n"; 00042 } 00043 return status.str(); 00044 } 00045 00046 00047 }