CMS 3D CMS Logo

IOVProxy.cc

Go to the documentation of this file.
00001 #include "CondCore/IOVService/interface/IOVProxy.h"
00002 #include "CondCore/DBCommon/interface/TypedRef.h"
00003 #include "CondCore/DBCommon/interface/Time.h"
00004 #include "CondCore/DBCommon/interface/ClassInfoLoader.h"
00005 
00006 #include "IOV.h"
00007 
00008 
00009 
00010 namespace cond {
00011 
00012   namespace impl {
00013     struct IOVImpl {
00014       IOVImpl(cond::PoolTransaction& db,
00015               const std::string & token,
00016               bool nolib) :
00017         pooldb(db){
00018         db.start(true);
00019         iov = cond::TypedRef<cond::IOV>(db,token);
00020         if (iov->iov.empty() || nolib) return;
00021         // load dict
00022         std::string ptok = iov->iov.front().second;
00023         db.commit();   
00024         cond::reflexTypeByToken(ptok);
00025         db.start(true);
00026         iov = cond::TypedRef<cond::IOV>(db,token);
00027       }
00028       ~IOVImpl(){
00029         pooldb.commit();
00030       }
00031       cond::PoolTransaction & pooldb;
00032       cond::TypedRef<cond::IOV> iov;
00033     };
00034 
00035   }
00036 
00037 
00038   IOVProxy::IterHelp::IterHelp(impl::IOVImpl & impl) :
00039     iov(*impl.iov), elem(&impl.pooldb){}
00040   
00041 
00042   void IOVElement::set(IOV const & v, int i) {
00043     m_since = (i==0) ? v.firstsince : v.iov[i-1].first+1;
00044     m_till  = v.iov[i].first;
00045     m_token = v.iov[i].second;
00046   }
00047 
00048 
00049 
00050   IOVProxy::IOVProxy() : m_low(0), m_high(0){}
00051  
00052   IOVProxy::~IOVProxy() {}
00053 
00054   IOVProxy::IOVProxy(cond::PoolTransaction& db,
00055                      const std::string & token, bool nolib) :
00056     m_iov(new impl::IOVImpl(db,token,nolib)), m_low(0), m_high(size()){}
00057 
00058 
00059   void IOVProxy::setRange(cond::Time_t since, cond::Time_t  till) const {
00060     m_low=iov().find(since)-iov().iov.begin();
00061     m_high=iov().find(till)-iov().iov.begin();
00062     m_high=std::min(m_high+1,size());
00063   }
00064 
00065   void IOVProxy::head(int n) const {
00066     m_high = std::min(m_low+n,m_high);
00067   }
00068 
00069   void  IOVProxy::tail(int n) const {
00070     m_low = std::max(m_high-n,m_low);
00071   }
00072 
00073 
00074 
00075   int IOVProxy::size() const {
00076     return iov().iov.size();
00077   }
00078 
00079   IOV const & IOVProxy::iov() const {
00080     return *(*m_iov).iov;
00081   }
00082 
00083   TimeType IOVProxy::timetype() const {
00084     return (TimeType)(iov().timetype);     
00085   }
00086 
00087 }

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