Go to the documentation of this file.00001 #include "EventFilter/CSCRawToDigi/interface/CSCDDUDataItr.h"
00002 #include "EventFilter/CSCRawToDigi/interface/CSCDDUEventData.h"
00003 #include "FWCore/MessageLogger/interface/MessageLogger.h"
00004
00005
00006
00007
00008 CSCDDUDataItr::CSCDDUDataItr() :
00009 theDDUData(0),
00010 theCurrentCSC(-1),
00011 theNumberOfCSCs(0),
00012 theDataIsOwnedByMe(true)
00013 {}
00014
00015
00016 CSCDDUDataItr::CSCDDUDataItr(const char * buf) :
00017 theDDUData(0),
00018 theCurrentCSC(-1),
00019 theNumberOfCSCs(0),
00020 theDataIsOwnedByMe(true)
00021 {
00022
00023 const CSCDDUHeader * dduHeader
00024 = reinterpret_cast<const CSCDDUHeader *>(buf);
00025 if(dduHeader->check()){
00026 theDDUData = new CSCDDUEventData((unsigned short *)buf);
00027 theNumberOfCSCs = theDDUData->cscData().size();
00028 } else {
00029 LogTrace ("CSCDDUDataItr|CSCRawToDigi") << "Failed DDU header check.";
00030 }
00031 }
00032
00033
00034 CSCDDUDataItr::CSCDDUDataItr(const CSCDDUEventData * dduData) :
00035 theDDUData(dduData),
00036 theCurrentCSC(-1),
00037 theNumberOfCSCs(theDDUData->cscData().size()),
00038 theDataIsOwnedByMe(false)
00039 {
00040 }
00041
00042
00043 CSCDDUDataItr::~CSCDDUDataItr()
00044 {
00045 if(theDataIsOwnedByMe) delete theDDUData;
00046 }
00047
00048
00049 CSCDDUDataItr::CSCDDUDataItr(const CSCDDUDataItr & i) :
00050 theCurrentCSC(i.theCurrentCSC),
00051 theNumberOfCSCs(i.theNumberOfCSCs),
00052 theDataIsOwnedByMe(i.theDataIsOwnedByMe)
00053 {
00054 if(theDataIsOwnedByMe)
00055 {
00056 if(i.theDDUData != 0)
00057 {
00058 theDDUData = new CSCDDUEventData(*(i.theDDUData));
00059 }
00060 }
00061 else
00062 {
00063 theDDUData = i.theDDUData;
00064 }
00065 }
00066
00067
00068 void CSCDDUDataItr::operator=(const CSCDDUDataItr & i)
00069 {
00070 if(theDataIsOwnedByMe)
00071 {
00072 delete theDDUData;
00073 if(i.theDDUData != 0)
00074 {
00075 theDDUData = new CSCDDUEventData(*(i.theDDUData));
00076 }
00077 }
00078 else
00079 {
00080 theDDUData = i.theDDUData;
00081 }
00082
00083 theDDUData = i.theDDUData;
00084 theCurrentCSC = i.theCurrentCSC;
00085 theNumberOfCSCs = i.theNumberOfCSCs;
00086 theDataIsOwnedByMe = i.theDataIsOwnedByMe;
00087 }
00088
00089
00090 bool CSCDDUDataItr::next()
00091 {
00092 return (++theCurrentCSC < theNumberOfCSCs);
00093 }
00094
00095
00096 const CSCEventData & CSCDDUDataItr::operator*()
00097 {
00098 assert(theCurrentCSC >= 0 && theCurrentCSC < theNumberOfCSCs);
00099 return theDDUData->cscData()[theCurrentCSC];
00100 }
00101
00102