Main Page | Modules | Namespace List | Class Hierarchy | Alphabetical List | Data Structures | File List | Namespace Members | Data Fields | Globals | Related Pages

AnalysisAlgorithmMap.cpp

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(shared_ptr<const TestData> testData, const string& moduleName) const throw(Sct::InvalidArgument) {
00018   if (!testData.get()) throw Sct::InvalidArgumentError("Attempt to use null TestData",__FILE__,__LINE__);
00019     string nameToUse = testData->testName;
00020     if (nameToUse=="NONE") {
00021       shared_ptr<AnalysisAlgorithm> alg;
00022       return alg;
00023     }
00024 
00025     if (testData->analysisAlgorithm!=""){
00026       nameToUse=testData->analysisAlgorithm;
00027     }
00028 
00029     if (algMap.count(nameToUse) == 0) {
00030     Sct::InvalidArgumentError iae("No map for Test: " + nameToUse, __FILE__, __LINE__);
00031     iae.setSeverity(MRS_DIAGNOSTIC);
00032     throw iae;
00033     }
00034     
00035     return (*algMap.find(nameToUse)).second->clone(testData, moduleName);
00036 }
00037     
00038 bool AnalysisAlgorithmMap::setAlgorithm(const string testName, auto_ptr<AnalysisAlgorithm> alg) throw() {
00039     algMap[testName] = shared_ptr<AnalysisAlgorithm>(alg);
00040     return true;    
00041 }
00042 
00043 string AnalysisAlgorithmMap::getStatus(string testName) {
00044     if (algMap.count(testName) == 0) {
00045     return string();
00046     }
00047     return algMap[testName]->getStatus();
00048 }
00049     
00050 string AnalysisAlgorithmMap::getAllStatus() {
00051     ostringstream status;
00052     for (MapType::const_iterator i=algMap.begin(); i!=algMap.end(); ++i) {
00053     status << i->first << " Algorithm " << i->second->getStatus() << "\n";
00054     }
00055     return status.str();
00056 }
00057 
00058 std::list<std::string> AnalysisAlgorithmMap::listAlgorithms(){
00059   std::list<std::string> alg_list;
00060   for (MapType::const_iterator i=algMap.begin(); i!=algMap.end(); ++i) {
00061     alg_list.push_back(i->first);
00062   }
00063   return alg_list;
00064 }
00065     
00066 }

Generated on Thu Dec 15 21:14:22 2005 for SCT DAQ/DCS Software - C++ by doxygen 1.3.5