![]() |
![]() |
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