CMS 3D CMS Logo

 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Properties Friends Macros Pages
ESHandle.h
Go to the documentation of this file.
1 #ifndef FWCore_Framework_ESHandle_h
2 #define FWCore_Framework_ESHandle_h
3 // -*- C++ -*-
4 //
5 // Package: Framework
6 // Class : ESHandle
7 //
16 //
17 // Author: Chris Jones
18 // Created: Fri Apr 1 14:47:35 EST 2005
19 //
20 
21 // system include files
22 
23 // user include files
26 
27 #include <exception>
28 #include <memory>
29 #include <utility>
30 
31 namespace edm {
32 
33 class ESHandleBase {
34  public:
36  ESHandleBase(void const* iData, edm::eventsetup::ComponentDescription const* desc)
37  : data_(iData), description_(desc) {}
38 
40  ESHandleBase(std::shared_ptr<ESHandleExceptionFactory>&& iWhyFailed) :
41  data_(nullptr),
43  whyFailedFactory_(std::move(iWhyFailed)) {}
44 
46 
47  bool isValid() const { return 0 != data_ && 0 != description_; }
48 
49  bool failedToGet() const { return bool(whyFailedFactory_); }
50 
51  void swap(ESHandleBase& iOther) {
52  std::swap(data_, iOther.data_);
55  }
56 
57  std::shared_ptr<ESHandleExceptionFactory> const&
59 
60  protected:
61  void const *productStorage() const {
62  if (whyFailedFactory_) {
63  std::rethrow_exception(whyFailedFactory_->make());
64  }
65  return data_;
66  }
67 
68  private:
69  // ---------- member data --------------------------------
70  void const* data_;
72  std::shared_ptr<ESHandleExceptionFactory> whyFailedFactory_;
73 };
74 
75 template<typename T>
76 class ESHandle : public ESHandleBase {
77  public:
78  typedef T value_type;
79 
81  ESHandle(T const* iData) : ESHandleBase(iData, 0) {}
82  ESHandle(T const* iData, edm::eventsetup::ComponentDescription const* desc) : ESHandleBase(iData, desc) {}
83  ESHandle(std::shared_ptr<ESHandleExceptionFactory> &&);
84 
85  // ---------- const member functions ---------------------
86  T const* product() const { return static_cast<T const *>(productStorage()); }
87  T const* operator->() const { return product(); }
88  T const& operator*() const { return *product(); }
89  // ---------- static member functions --------------------
90  static const bool transientAccessOnly = false;
91 
92  // ---------- member functions ---------------------------
93 
94  private:
95 };
96 
97 template <class T>
98 ESHandle<T>::ESHandle(std::shared_ptr<edm::ESHandleExceptionFactory> && iWhyFailed) :
99  ESHandleBase(std::move(iWhyFailed))
100 { }
101 
102  // Free swap function
103  inline
104  void
106  {
107  a.swap(b);
108  }
109 }
110 #endif
void swap(ora::Record &rh, ora::Record &lh)
Definition: Record.h:70
static const bool transientAccessOnly
Definition: ESHandle.h:90
edm::eventsetup::ComponentDescription const * description() const
Definition: ESHandle.cc:10
#define nullptr
T const & operator*() const
Definition: ESHandle.h:88
bool failedToGet() const
Definition: ESHandle.h:49
void swap(edm::DataFrameContainer &lhs, edm::DataFrameContainer &rhs)
def move
Definition: eostools.py:510
std::shared_ptr< ESHandleExceptionFactory > whyFailedFactory_
Definition: ESHandle.h:72
edm::eventsetup::ComponentDescription const * description_
Definition: ESHandle.h:71
T const * operator->() const
Definition: ESHandle.h:87
void const * data_
Definition: ESHandle.h:70
ESHandleBase(std::shared_ptr< ESHandleExceptionFactory > &&iWhyFailed)
Used when the attempt to get the data failed.
Definition: ESHandle.h:40
std::shared_ptr< ESHandleExceptionFactory > const & whyFailedFactory() const
Definition: ESHandle.h:58
ESHandle(T const *iData, edm::eventsetup::ComponentDescription const *desc)
Definition: ESHandle.h:82
T const * product() const
Definition: ESHandle.h:86
double b
Definition: hdecay.h:120
ESHandle(T const *iData)
Definition: ESHandle.h:81
double a
Definition: hdecay.h:121
void const * productStorage() const
Definition: ESHandle.h:61
bool isValid() const
Definition: ESHandle.h:47
long double T
ESHandleBase(void const *iData, edm::eventsetup::ComponentDescription const *desc)
Definition: ESHandle.h:36
void swap(ESHandleBase &iOther)
Definition: ESHandle.h:51