00001 #include "TestDataStreamer_v2.h"
00002 #include "TestDataWrapper.h"
00003 #include <memory>
00004 #include "CalibrationController/IS/TestData.h"
00005
00006 using namespace Sct;
00007
00008 namespace SctCalibrationController {
00009
00010
00011 unsigned TestDataStreamer_v2::s_version=2;
00012
00013 TestDataStreamer_v2::TestDataStreamer_v2() throw() {}
00014
00015 bool TestDataStreamer_v2::inMap = IOManager::addToMap("TestData", std::auto_ptr<Streamer>(new TestDataStreamer_v2()));
00016
00017 shared_ptr<Streamable> TestDataStreamer_v2::read(IStream& in, const IOManager& manager) const throw(LogicError, IoError) {
00018 shared_ptr<TestData> td (new TestData);
00019 shared_ptr<Streamable> wrapper (new TestDataWrapper(td));
00020 read(in, *wrapper, manager);
00021 return wrapper;
00022 }
00023
00024 void TestDataStreamer_v2::write(OStream& out, const Streamable& ob, const IOManager& manager) const throw(LogicError, IoError) {
00025 const TestDataWrapper& wrapper = dynamic_cast<const TestDataWrapper&>(ob);
00026 boost::shared_ptr<const TestData> td = boost::dynamic_pointer_cast<const TestData>(wrapper.getWrapped());
00027 if (!td.get()) throw Sct::IllegalStateError("Null pointer or bad cast of TestData object", __FILE__, __LINE__);
00028 out << td->testName << td->runNumber << td->nScans << td->startScanNumber << td->testVariable;
00029 out.put( td->testPoints, td->testPoints_size );
00030 out << (int)td->status << td->startTime << td->endTime;
00031 out.put( td->modules, td->modules_size );
00032 out << td->fitAlgorithm;
00033 out << td->analysisAlgorithm;
00034 out << td->options;
00035 out << td->version;
00036 }
00037
00038 void TestDataStreamer_v2::read(IStream& in, Streamable& ob, const IOManager& manager) const throw(LogicError, IoError) {
00039 TestDataWrapper& wrapper = dynamic_cast<TestDataWrapper&>(ob);
00040 boost::shared_ptr<TestData> td = boost::dynamic_pointer_cast<TestData>(wrapper.getWrapped());
00041 if (!td.get()) throw Sct::IllegalStateError("Null pointer or bad cast of TestData object", __FILE__, __LINE__);
00042 in >> td->testName >> td->runNumber >> td->nScans >> td->startScanNumber >> td->testVariable;
00043 if ( td->testPoints_size != 0 ) delete[] td->testPoints;
00044 in.get( &td->testPoints, td->testPoints_size );
00045 in >> (int&)td->status >> td->startTime >> td->endTime;
00046 if ( td->modules_size != 0 ) delete[] td->modules;
00047 in.get( &td->modules, td->modules_size );
00048 in >> td->fitAlgorithm;
00049 in >> td->analysisAlgorithm;
00050 in >> td->options;
00051 in >> td->version;
00052 }
00053 }