CMS 3D CMS Logo

IOVRevIteratorImpl.cc

Go to the documentation of this file.
00001 #include "IOVRevIteratorImpl.h"
00002 #include<utility>
00003 cond::IOVRevIteratorImpl::IOVRevIteratorImpl( cond::PoolTransaction& pooldb,
00004                                         const std::string & token)
00005   : m_pooldb(pooldb),m_token(token), m_count(0),  m_isInit(false), m_isOpen(false){
00006 } 
00007 cond::IOVRevIteratorImpl::~IOVRevIteratorImpl(){
00008 }
00009 
00010 void cond::IOVRevIteratorImpl::open() const{
00011   if (m_isOpen) return;
00012   const_cast<cond::IOVRevIteratorImpl*>(this)->m_iov=
00013     cond::TypedRef<cond::IOV>(m_pooldb, m_token);
00014   const_cast<cond::IOVRevIteratorImpl*>(this)->m_isOpen=true;
00015 }
00016 
00017 void cond::IOVRevIteratorImpl::init(){
00018   open();
00019   m_isInit=true;
00020   m_pos=m_iov->iov.rbegin();
00021   m_next=m_pos; m_next++;
00022   m_count = empty() ? 0 : size()-1;
00023 }
00024 
00025 
00026 bool cond::IOVRevIteratorImpl::rewind() {
00027   init();
00028   return !empty();
00029 }
00030 
00031 bool cond::IOVRevIteratorImpl::empty() const {
00032   open();
00033   return m_iov->iov.empty();
00034 }
00035 size_t cond::IOVRevIteratorImpl::size() const {
00036   open();
00037   return m_iov->iov.size();
00038 }
00039 size_t cond::IOVRevIteratorImpl::position() const {
00040   return m_count;
00041 }
00042 
00043 
00044 bool  cond::IOVRevIteratorImpl::atEnd() const {
00045   return  m_isInit && m_pos==iov().rend();
00046 }
00047 
00048 bool cond::IOVRevIteratorImpl::next(){
00049   if(!m_isInit){
00050     init();
00051     return !empty();
00052   }
00053   if (atEnd() ) return false;
00054   m_pos=m_next;
00055   if (atEnd() ) return false;
00056   ++m_next;
00057   --m_count;
00058   return true;
00059 }
00060 
00061 std::string 
00062 cond::IOVRevIteratorImpl::payloadToken() const{
00063   if(!m_isInit) return std::string("");
00064   
00065   return atEnd() ? std::string("") : m_pos->second;
00066   
00067 }
00068 
00069 cond::ValidityInterval
00070 cond::IOVRevIteratorImpl::validity() const{
00071   cond::Time_t since=0;
00072   cond::Time_t till=0;
00073   if (m_isInit && !atEnd()) {
00074     till = m_pos->first;
00075     since = (m_next!=iov().rend()) ?  m_next->first + 1 : m_iov->firstsince;
00076   }
00077   return cond::ValidityInterval(since,till);
00078 }

Generated on Tue Jun 9 17:26:09 2009 for CMSSW by  doxygen 1.5.4