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