00001 #include "IOVIteratorImpl.h" 00002 00003 cond::IOVIteratorImpl::IOVIteratorImpl( 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::IOVIteratorImpl::~IOVIteratorImpl(){ 00008 } 00009 00010 void cond::IOVIteratorImpl::open() const{ 00011 if (m_isOpen) return; 00012 const_cast<cond::IOVIteratorImpl*>(this)->m_iov= 00013 cond::TypedRef<cond::IOV>(m_pooldb, m_token); 00014 const_cast<cond::IOVIteratorImpl*>(this)->m_isOpen=true; 00015 } 00016 void cond::IOVIteratorImpl::init(){ 00017 open(); 00018 m_isInit=true; 00019 m_pos=m_iov->iov.begin(); 00020 m_count = 0; 00021 m_since=m_iov->firstsince; 00022 } 00023 00024 00025 bool cond::IOVIteratorImpl::rewind() { 00026 init(); 00027 return !empty(); 00028 } 00029 00030 bool cond::IOVIteratorImpl::empty() const { 00031 open(); 00032 return m_iov->iov.empty(); 00033 } 00034 size_t cond::IOVIteratorImpl::size() const { 00035 open(); 00036 return m_iov->iov.size(); 00037 } 00038 size_t cond::IOVIteratorImpl::position() const { 00039 return m_count; 00040 } 00041 00042 00043 bool cond::IOVIteratorImpl::atEnd() const { 00044 return m_isInit && m_pos==m_iov->iov.end(); 00045 } 00046 00047 bool cond::IOVIteratorImpl::next(){ 00048 if(!m_isInit){ 00049 init(); 00050 return !empty(); 00051 } 00052 if (atEnd() ) return false; 00053 00054 m_since = m_pos->first+1; 00055 ++m_pos; 00056 if (atEnd() ) return false; 00057 ++m_count; 00058 return true; 00059 } 00060 00061 std::string 00062 cond::IOVIteratorImpl::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::IOVIteratorImpl::validity() const{ 00071 cond::Time_t since=0; 00072 cond::Time_t till=0; 00073 if (m_isInit && !atEnd()) { 00074 since = m_since; 00075 till = m_pos->first; 00076 } 00077 return cond::ValidityInterval(since,till); 00078 }