00001 #include "Sct/IoExceptions.h"
00002
00003 #include "../TrimRangeTestResult.h"
00004 #include "TrimRangeTestResult_ChipTrimStreamer_v1.h"
00005
00006 using std::ostringstream;
00007 using namespace Sct;
00008
00009 namespace SctData {
00010 namespace IO {
00011
00012
00013 unsigned TrimRangeTestResult_ChipTrimStreamer_v1::s_version=1;
00014
00015 TrimRangeTestResult_ChipTrimStreamer_v1::TrimRangeTestResult_ChipTrimStreamer_v1() throw() {}
00016
00017 bool TrimRangeTestResult_ChipTrimStreamer_v1::inMap = IOManager::addToMap("SctData::TrimRangeTestResult::ChipTrim", auto_ptr<Streamer>(new TrimRangeTestResult_ChipTrimStreamer_v1()));
00018
00019
00020 shared_ptr<Streamable> TrimRangeTestResult_ChipTrimStreamer_v1::read(IStream& in, const IOManager& manager) const throw(LogicError, IoError) {
00021 shared_ptr<Streamable> ad (new TrimRangeTestResult::ChipTrim());
00022 read(in, *ad, manager);
00023 return ad;
00024 }
00025
00026 void TrimRangeTestResult_ChipTrimStreamer_v1::write(OStream& out, const Streamable& ob, const IOManager& manager) const throw(LogicError, IoError) {
00027 const TrimRangeTestResult::ChipTrim& trim = dynamic_cast<const TrimRangeTestResult::ChipTrim&> (ob);
00028 out << trim.target << (int) trim.range;
00029 if (trim.channelTrim.size()!=nChannelChip){
00030 ostringstream os;
00031 os << "TrimRangeTestResult_ChipTrimStreamer_v1::writeTrim, bad size " << trim.channelTrim.size();
00032 throw StreamCorruptedException(os.str(), __FILE__, __LINE__ );
00033 }
00034 out << (int) trim.channelTrim.size();
00035 for (unsigned i=0; i<trim.channelTrim.size(); ++i){
00036 Stat<TrimRangeTestResult::Trim> t=trim.channelTrim.getAt(i);
00037 int trim_i = t.value.trim;
00038 out << t.valid << trim_i << t.value.vthr;
00039 }
00040 }
00041
00042 void TrimRangeTestResult_ChipTrimStreamer_v1::read(IStream& in, Streamable& ob, const IOManager& manager) const throw(Sct::LogicError, Sct::IoError){
00043 TrimRangeTestResult::ChipTrim& trim = dynamic_cast<TrimRangeTestResult::ChipTrim&> (ob);
00044 in >> trim.target;
00045 int range; in >> range ; trim.range=range;
00046 int size; in >> size; trim.channelTrim.resize(size);
00047 if (size!=nChannelChip){
00048 ostringstream os;
00049 os << "TrimRangeTestResult_ChipTrimStreamer_v1::readTrim, bad size " << trim.channelTrim.size();
00050 throw StreamCorruptedException(os.str(), __FILE__, __LINE__ );
00051 }
00052 for (unsigned i=0; i<size; ++i){
00053 Stat<TrimRangeTestResult::Trim>& t=trim.channelTrim.modifyAt(i);
00054 int trim_i;
00055 in >> t.valid >> trim_i >> t.value.vthr;
00056 t.value.trim=trim_i;
00057 }
00058 }
00059
00060 }
00061 }