CMS 3D CMS Logo

/data/refman/pasoursint/CMSSW_4_1_8_patch9/src/EventFilter/CSCRawToDigi/src/CSCDDUDataItr.cc

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 // theCurrentCSC starts at -1, since user is expected to next() before he dereferences
00007 // for the first time
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   // check if it's OK first
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