SequenceDataStreamer_v1.cpp

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 /* READ NOTES ON STREAMERS AND VERSIONS BEFORE EDITING THIS FILE! */
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 }

Generated on Mon Feb 6 14:01:29 2006 for SCT DAQ/DCS Software - C++ by  doxygen 1.4.6