00001 #include "ScanWriterFactory.h" 00002 #include "ScanResultWriter.h" 00003 #include "ScanDataWriter.h" 00004 #include "Sct/IoExceptions.h" 00005 #include <sstream> 00006 00007 namespace SctData { 00008 00009 ScanWriterFactory::ScanWriterFactory() {} 00010 00011 00012 ScanWriterFactory& ScanWriterFactory::getFactory() { 00013 static ScanWriterFactory* bertha = new ScanWriterFactory(); 00014 return *bertha; 00015 } 00016 00017 bool ScanWriterFactory::addWriterToMap(UINT16 dataType, ScanResultWriter& resultWriter, ScanDataWriter& dataWriter) { 00018 if (writerMap.find(dataType) != writerMap.end()) return false; 00019 writerMap[dataType] = pair<ScanResultWriter*, ScanDataWriter*>(&resultWriter, &dataWriter); 00020 return true; 00021 } 00022 00023 ScanDataWriter& ScanWriterFactory::getDataWriter(UINT16 dataType) { 00024 if (getFactory().writerMap.find(dataType) == getFactory().writerMap.end()) { 00025 std::ostringstream oss; 00026 oss << "No ScanDataWriter for dataType: " << dataType; 00027 throw Sct::NoSuchStreamerException("ScanHeader.dataType", oss.str(), __FILE__, __LINE__); 00028 } 00029 return *(getFactory().writerMap[dataType].second); 00030 } 00031 00032 ScanResultWriter& ScanWriterFactory::getResultWriter(UINT16 dataType) { 00033 if (getFactory().writerMap.find(dataType) == getFactory().writerMap.end()) { 00034 std::ostringstream oss; 00035 oss << "No ScanResultWriter for dataType: " << dataType; 00036 throw Sct::NoSuchStreamerException("ScanHeader.dataType", oss.str(), __FILE__, __LINE__); 00037 } 00038 return *(getFactory().writerMap[dataType].first); 00039 } 00040 00041 00042 }