00001 #include "McEventSelector/McIterator.h" 00002 00003 #include <iostream> 00004 #include "McEventSelector/McAddress.h" 00005 00006 IOpaqueAddress* McIterator::operator*() const { 00007 return dereference(); 00008 } 00009 IOpaqueAddress* McIterator::operator->() const { 00010 return dereference(); 00011 } 00012 IEvtSelector::Iterator& McIterator::operator++() { 00013 if(m_eventNo>=m_eventsP){ 00014 m_runNo++; 00015 m_eventNo=1; 00016 } 00017 m_eventNo++; 00018 return *this; 00019 } 00020 IEvtSelector::Iterator& McIterator::operator--() { 00021 m_eventNo--; 00022 return *this; 00023 } 00024 IEvtSelector::Iterator& McIterator::operator++(int){ 00025 00026 if(m_eventNo>=m_eventsP){ 00027 m_runNo++; 00028 m_eventNo=1; 00029 } 00030 m_eventNo++; 00031 return *this; 00032 } 00033 00034 IEvtSelector::Iterator& McIterator::operator--(int){ 00035 m_eventNo--; 00036 return *this; 00037 } 00038 00039 bool McIterator::operator==(const IEvtSelector::Iterator& it) const { 00040 const McIterator* zIt = dynamic_cast<const McIterator*>(&it); 00041 return (NULL != zIt) && 00042 (m_runNo == zIt->runNumber()) && 00043 (m_eventNo == zIt->eventNumber()) ; 00044 } 00045 00046 00047 bool McIterator::operator!=(const IEvtSelector::Iterator& it) const { 00048 return !operator==(it); 00049 } 00050 00051 McAddress* McIterator::dereference() const { 00052 McAddress* zAddress(dynamic_cast<McAddress*>(m_evtSelector->reference(*this))); 00053 if (NULL != zAddress) { 00054 zAddress->setRunEvt(m_runNo, m_eventNo); 00055 // cerr << "McIterator::dereference: to object " 00056 // << zAddress->objectName() << " : " << zAddress->clID()<< " : " 00057 // << zAddress->svcType()<<endl; 00058 } else 00059 std::cerr << "McIterator::dereference() ERROR invalid opaque address type!! " << std::endl; 00060 return zAddress; 00061 }