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
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
00028 manager.writeImpl(out, ob, "SctData::ScanResult");
00029
00030
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 }