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