CMS 3D CMS Logo

 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Properties Friends Macros Pages
ConstRespectingPtr.h
Go to the documentation of this file.
1 #ifndef FWCore_Utilities_ConstRespectingPtr_h
2 #define FWCore_Utilities_ConstRespectingPtr_h
3 
4 // Package: FWCore/Utilities
5 // Class : ConstRespectingPtr
6 //
17 // Original Author: W. David Dagenhart
18 // Created: 20 March 2014
19 
20 #if !defined(__CINT__) && !defined(__MAKECINT__) && !defined(__REFLEX__)
21 #include <memory>
22 #endif
23 
24 namespace edm {
25 
26  template <typename T>
28 
29  public:
30 
32  explicit ConstRespectingPtr(T*);
34 
35  T const* operator->() const { return m_data; }
36  T const& operator*() const { return *m_data; }
37  T const* get() const { return m_data; }
38 
39  T* operator->() { return m_data; }
40  T& operator*() { return *m_data; }
41  T* get() { return m_data; }
42 
43  bool isSet() const;
44 
45 #if !defined(__CINT__) && !defined(__MAKECINT__) && !defined(__REFLEX__)
46  void set(std::unique_ptr<T> iNewValue);
47 #endif
48 
49  T* release();
50  void reset();
51 
52  private:
53 
56 
58  };
59 
60 #if !defined(__CINT__) && !defined(__MAKECINT__) && !defined(__REFLEX__)
61 
62  template<typename T>
64 
65  template<typename T>
67 
68  template<typename T>
70  delete m_data;
71  }
72 
73  template<typename T>
74  bool ConstRespectingPtr<T>::isSet() const { return nullptr != m_data; }
75 
76  template<typename T>
77  void ConstRespectingPtr<T>::set(std::unique_ptr<T> iNewValue) {
78  delete m_data;
79  m_data = iNewValue.release();
80  }
81 
82  template<typename T>
84  T* tmp = m_data;
85  m_data = nullptr;
86  return tmp;
87  }
88 
89  template<typename T>
91  delete m_data;
92  m_data = nullptr;
93  }
94 #endif
95 }
96 #endif
#define nullptr
ConstRespectingPtr & operator=(ConstRespectingPtr< T > const &)
T const & operator*() const
T const * operator->() const
void set(std::unique_ptr< T > iNewValue)
std::vector< std::vector< double > > tmp
Definition: MVATrainer.cc:100
long double T