00001 #include "TestDataStreamer_v1.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_v1::s_version=1;
00012
00013 TestDataStreamer_v1::TestDataStreamer_v1() throw() {}
00014
00015 bool TestDataStreamer_v1::inMap = IOManager::addToMap("TestData", std::auto_ptr<Streamer>(new TestDataStreamer_v1()));
00016
00017 shared_ptr<Streamable> TestDataStreamer_v1::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_v1::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->version;
00033 }
00034
00035 void TestDataStreamer_v1::read(IStream& in, Streamable& ob, const IOManager& manager) const throw(LogicError, IoError) {
00036 TestDataWrapper& wrapper = dynamic_cast<TestDataWrapper&>(ob);
00037 boost::shared_ptr<TestData> td = boost::dynamic_pointer_cast<TestData>(wrapper.getWrapped());
00038 if (!td.get()) throw Sct::IllegalStateError("Null pointer or bad cast of TestData object", __FILE__, __LINE__);
00039 in >> td->testName >> td->runNumber >> td->nScans >> td->startScanNumber >> td->testVariable;
00040 if ( td->testPoints_size != 0 ) delete[] td->testPoints;
00041 in.get( &td->testPoints, td->testPoints_size );
00042 in >> (int&)td->status >> td->startTime >> td->endTime;
00043 if ( td->modules_size != 0 ) delete[] td->modules;
00044 in.get( &td->modules, td->modules_size );
00045 in >> td->version;
00046 }
00047 }