CMS 3D CMS Logo

OrphanHandle.h
Go to the documentation of this file.
1 #ifndef DataFormats_Common_OrphanHandle_h
2 #define DataFormats_Common_OrphanHandle_h
3 
4 /*----------------------------------------------------------------------
5 
6 OrphanHandle: Non-owning "smart pointer" for reference to EDProducts.
7 
8 This is a very preliminary version, and lacks safety features and elegance.
9 
10 If the pointed-to EDProduct is destroyed, use of the OrphanHandle
11 becomes undefined. There is no way to query the OrphanHandle to
12 discover if this has happened.
13 
14 OrphanHandles can have:
15  -- Product pointer null and id == 0;
16  -- Product pointer valid and id != 0;
17 
18 To check validity, one can use the isValid() function.
19 
20 ----------------------------------------------------------------------*/
21 
23 
24 namespace edm {
25  template <typename T>
26  class OrphanHandle : public OrphanHandleBase {
27  public:
28  typedef T element_type;
29 
30  // Default constructed handles are invalid.
31  OrphanHandle();
32 
33  OrphanHandle(T const* prod, ProductID const& id);
34 
35  ~OrphanHandle();
36 
37  T const* product() const;
38  T const* operator->() const; // alias for product()
39  T const& operator*() const;
40 
41  private:
42  };
43 
44  template <class T>
46 
47  template <class T>
49 
50  template <class T>
52 
53  template <class T>
54  T const* OrphanHandle<T>::product() const {
55  return static_cast<T const*>(productStorage());
56  }
57 
58  template <class T>
59  T const* OrphanHandle<T>::operator->() const {
60  return product();
61  }
62 
63  template <class T>
64  T const& OrphanHandle<T>::operator*() const {
65  return *product();
66  }
67 
68 } // namespace edm
69 #endif
T const * operator->() const
Definition: OrphanHandle.h:59
T const & operator*() const
Definition: OrphanHandle.h:64
T const * product() const
Definition: OrphanHandle.h:54
HLT enums.
MatrixMeschach operator*(const MatrixMeschach &mat1, const MatrixMeschach &mat2)
long double T