CMS 3D CMS Logo

TestHandle.h
Go to the documentation of this file.
1 #ifndef Subsystem_Package_TestHandle_h
2 #define Subsystem_Package_TestHandle_h
3 // -*- C++ -*-
4 //
5 // Package: Subsystem/Package
6 // Class : TestHandle
7 //
16 //
17 // Original Author: root
18 // Created: Thu, 03 May 2018 15:50:05 GMT
19 //
20 
21 // system include files
22 #include <memory>
23 
24 // user include files
27 
28 // forward declarations
29 
30 namespace edm {
31  namespace test {
32  template <typename T>
33  class TestHandle {
34  public:
35  explicit TestHandle(T const* product) : product_{product} {}
36 
37  explicit TestHandle(std::shared_ptr<HandleExceptionFactory> iFailed)
38  : product_{nullptr}, whyFailedFactory_{std::move(iFailed)} {}
39 
40  operator bool() { return product_ != nullptr; }
41 
42  bool isValid() const { return product_ != nullptr; }
43 
44  T const* product() const { return productStorage(); }
45 
46  T const* operator->() const { return product(); }
47 
48  T const& operator*() const { return *product(); }
49 
50  private:
51  T const* productStorage() const {
52  if (product_) {
53  return product_;
54  }
55  throw *(whyFailedFactory_->make());
56  }
57 
58  T const* product_;
59  std::shared_ptr<HandleExceptionFactory> whyFailedFactory_;
60  };
61 
62  } // namespace test
63 } // namespace edm
64 
65 #endif
T const * product() const
Definition: TestHandle.h:44
TestHandle(T const *product)
Definition: TestHandle.h:35
std::shared_ptr< HandleExceptionFactory > whyFailedFactory_
Definition: TestHandle.h:59
bool isValid() const
Definition: TestHandle.h:42
HLT enums.
TestHandle(std::shared_ptr< HandleExceptionFactory > iFailed)
Definition: TestHandle.h:37
T const * productStorage() const
Definition: TestHandle.h:51
long double T
T const * operator->() const
Definition: TestHandle.h:46
def move(src, dest)
Definition: eostools.py:511
T const & operator*() const
Definition: TestHandle.h:48