00001 #include "SliceDataWriter.h"
00002 #include "scan.h"
00003 #include "ScanWriterFactory.h"
00004 #include "ScanResultWriter.h"
00005 #include "dataTypes.h"
00006 #include "Sct/UnsupportedOperationError.h"
00007
00008 namespace SctData {
00009
00010
00011 bool SliceDataWriter::inMap = ScanWriterFactory::getFactory().addWriterToMap(SR_DT_SLICE, ScanResultWriter::getRawWriter(), *(new SliceDataWriter()));
00012
00013
00014 void SliceDataWriter::writeData(scan_result_ptrs& scanResult, OStream& out) {
00015 ScanResultWriter::writeClass("SliceRawData", out);
00016
00017
00018 switch (scanResult.header.width) {
00019 case SR_WD_32: {
00020 out << scanResult.header.size/2 << scanResult.header.dataType << scanResult.header.width;
00021
00022 UINT32* data = reinterpret_cast<UINT32*>(scanResult.data);
00023 out.put(data, scanResult.header.size/2);
00024 }
00025 break;
00026
00027 case SR_WD_16: {
00028
00029 out << scanResult.header.size << scanResult.header.dataType << scanResult.header.width;
00030
00031 UINT16* data = reinterpret_cast<UINT16*>(scanResult.data);
00032 out.put(data, scanResult.header.size);
00033 }
00034 break;
00035
00036 default:
00037 ostringstream oss;
00038 oss << "SliceDataWriter only supports 16 and 32 bit widths, was given: " << scanResult.header.width;
00039 throw UnsupportedOperationError(oss.str(), __FILE__, __LINE__);
00040 break;
00041 }
00042 }
00043
00044 }