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 }