FitScanResultStreamer_v1.cpp

00001 #include "FitScanResultStreamer_v1.h"
00002 #include "../FitScanResult.h"
00003 #include "../FitObject.h"
00004 #include "Sct/VersionNotSupportedException.h"
00005 
00006 using namespace Sct;
00007 using namespace boost;
00008 
00009 namespace SctData {
00010 namespace IO {
00011 
00012 /* READ NOTES ON STREAMERS AND VERSIONS BEFORE EDITING THIS FILE! */
00013 unsigned FitScanResultStreamer_v1::s_version=1;
00014 
00015 FitScanResultStreamer_v1::FitScanResultStreamer_v1() throw() {}
00016 
00017 bool FitScanResultStreamer_v1::inMap = IOManager::addToMap("SctData::FitScanResult",  auto_ptr<Streamer>(new FitScanResultStreamer_v1()));
00018 
00019 
00020 shared_ptr<Streamable> FitScanResultStreamer_v1::read(IStream& in, const IOManager& manager) const throw(LogicError, IoError) {
00021     shared_ptr<Streamable> ad (&helper.create());
00022     read(in, *ad, manager);
00023     return ad;
00024 }
00025 
00026 void FitScanResultStreamer_v1::write(OStream& out, const Streamable& ob, const IOManager& manager) const throw(LogicError, IoError) {
00027     //Let superclass do its worker
00028   manager.writeImpl(out, ob, "SctData::ScanResult");
00029     
00030     //Downcast should always work!
00031     const FitScanResult& fit = dynamic_cast<const FitScanResult&>(ob);
00032     
00033     unsigned int n = 0;
00034     string className;
00035     
00036     n = fit.getNLinkFits();
00037     out << n;
00039     if (n>0) manager.writeClassName(out, fit.getLinkFit(0).getClassName());
00040     for (unsigned i=0; i<n; i++) {
00041         FitObject& fo = fit.getLinkFit(i);
00042         manager.writeImpl(out, fo, false);
00043     }
00044     
00045     n = fit.getNChipFits();
00046     out << n;
00047     if (n>0) manager.writeClassName(out, fit.getChipFit(0).getClassName());
00048     for (unsigned i=0; i<n; i++) {
00049         FitObject& fo = fit.getChipFit(i);
00050         manager.writeImpl(out, fo, false);
00051     }
00052     
00053     n = fit.getNChannelFits();
00054     out << n;
00055     if (n>0) manager.writeClassName(out, fit.getChannelFit(0).getClassName());
00056     for (unsigned i=0; i<fit.getNChannelFits(); i++) {
00057         FitObject& fo = fit.getChannelFit(i);
00058         manager.writeImpl(out, fo, false);
00059     }
00060     
00061     manager.writeImpl(out, fit.getDefects(), false);
00062 }
00063 
00064 
00065 void FitScanResultStreamer_v1::read(IStream& in, Streamable& ob, const IOManager& manager) const throw(LogicError, IoError) {
00066   manager.readImpl(in, ob, "SctData::ScanResult");
00067 
00068     FitScanResult& fit = dynamic_cast<FitScanResult&>(ob);
00069     
00070     unsigned size;
00071     
00072     in >> size;    
00073     string className; 
00074     fit.setNLinkFits(size);
00075     if (size > 0) {
00076         className = manager.readClassName(in);
00077     }
00078     for (unsigned i=0; i<size ; i++) {
00079         shared_ptr<FitObject> fo (dynamic_pointer_cast<FitObject>(manager.readImpl(in, className)));
00080     fit.setLinkFit(i, fo);
00081     }
00082     
00083     in >> size;    
00084     fit.setNChipFits(size);
00085     if (size > 0) {
00086          className= manager.readClassName(in);
00087     }
00088     for (unsigned i=0; i<size ; i++) {
00089         shared_ptr<FitObject> fo (dynamic_pointer_cast<FitObject>(manager.readImpl(in, className)));
00090     fit.setChipFit(i, fo);
00091     }
00092     
00093     in >> size;    
00094     fit.setNChannelFits(size);
00095     if (size > 0) {
00096     className = manager.readClassName(in);
00097     }
00098     for (unsigned i=0; i<size ; i++) {
00099         shared_ptr<FitObject> fo (dynamic_pointer_cast<FitObject>(manager.readImpl(in, className)));
00100     fit.setChannelFit(i, fo);
00101     }
00102     manager.readImpl(in, fit.getDefects(), false);
00103 }
00104 
00105 }
00106 }

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