CMS 3D CMS Logo

/data/doxygen/doxygen-1.7.3/gen/CMSSW_4_2_8/src/FWCore/Framework/interface/ESHandle.h

Go to the documentation of this file.
00001 #ifndef FWCore_Framework_ESHandle_h
00002 #define FWCore_Framework_ESHandle_h
00003 // -*- C++ -*-
00004 //
00005 // Package:     Framework
00006 // Class  :     ESHandle
00007 // 
00016 //
00017 // Author:      Chris Jones
00018 // Created:     Fri Apr  1 14:47:35 EST 2005
00019 //
00020 
00021 // system include files
00022 
00023 // user include files
00024 #include "FWCore/Framework/interface/ComponentDescription.h"
00025 
00026 // forward declarations
00027 namespace edm {
00028 
00029 class ESHandleBase {
00030    public:
00031       ESHandleBase() : data_(0), description_(0) {}
00032       ESHandleBase(void const* iData, edm::eventsetup::ComponentDescription const* desc) 
00033            : data_(iData), description_(desc) {}
00034 
00035       edm::eventsetup::ComponentDescription const* description() const;
00036       
00037       bool isValid() const { return 0 != data_ && 0 != description_; }
00038 
00039       void swap(ESHandleBase& iOther) {
00040          std::swap(data_, iOther.data_);
00041          std::swap(description_, iOther.description_);
00042       }
00043    protected:
00044      void const *productStorage() const {return data_;}
00045 
00046    private:
00047       // ---------- member data --------------------------------
00048       void const* data_; 
00049       edm::eventsetup::ComponentDescription const* description_;
00050 };
00051 
00052 template<typename T>
00053 class ESHandle : public ESHandleBase {
00054    public:
00055       typedef T value_type;
00056    
00057       ESHandle() : ESHandleBase() {}
00058       ESHandle(T const* iData) : ESHandleBase(iData, 0) {}
00059       ESHandle(T const* iData, edm::eventsetup::ComponentDescription const* desc) : ESHandleBase(iData, desc) {}
00060 
00061       // ---------- const member functions ---------------------
00062       T const* product() const { return static_cast<T const *>(productStorage()); }
00063       T const* operator->() const { return product(); }
00064       T const& operator*() const { return *product(); }
00065       // ---------- static member functions --------------------
00066       static const bool transientAccessOnly = false;
00067 
00068       // ---------- member functions ---------------------------
00069       
00070    private:
00071 };
00072 
00073   // Free swap function
00074   inline
00075   void
00076   swap(ESHandleBase& a, ESHandleBase& b) 
00077   {
00078     a.swap(b);
00079   }
00080 }
00081 #endif