Teamcenter C++ API Reference  2312
ScopedPtr.hxx
Go to the documentation of this file.
1 // Copyright 2022 Siemens Digital Industries Software
2 // ==================================================
3 // Copyright 2014.
4 // Siemens Product Lifecycle Management Software Inc.
5 // All Rights Reserved.
6 // ==================================================
7 // Copyright 2022 Siemens Digital Industries Software
8 
18 #ifndef TEAMCENTER_BASE_UTILS_SCOPED_PTR_HXX
19 #define TEAMCENTER_BASE_UTILS_SCOPED_PTR_HXX
20 
21 #include <base_utils/libbase_utils_exports.h>
22 
23 namespace Teamcenter
24 {
25 
30 template < class T > struct scoped_ptr_default_deallocator
31 {
32  void operator() (T* bucket) const { delete bucket; }
33 };
34 
97 template < class T, class F=scoped_ptr_default_deallocator< T > > class scoped_ptr
98 {
99 public:
100 
104  explicit scoped_ptr( T* b = 0 ) : bucket( b ) {}
105 
109  virtual ~scoped_ptr() { F f; f( bucket ); } /* */
110 
114  scoped_ptr& operator=( T * ptr ) { F f; f( bucket ); bucket = ptr; return *this; }
115 
116  T** operator&() { bucket = 0; return &bucket; }
117  T& operator*() const { return *bucket; }
118  T* operator->() const { return bucket; }
119 
120  operator T*() const { return bucket; }
121  /* */
122 
126  T*& getReference() { return bucket; }
127 
131  T* get() const { return bucket; }
132 
141  const T* getString() const { static const T s_empty = T(); return bucket ? bucket : &s_empty; }
142 
146  T* release() { T* tmp = bucket; bucket = 0; return tmp; }
147 
148  bool operator == (const T* t) const { return bucket == t; }
149  bool operator != (const T* t) const { return bucket != t; }
150 
151  bool operator! () const
152  {
153  return bucket == 0;
154  }
155 
156 protected:
160  T* bucket;
161 
162 private:
163  scoped_ptr( const scoped_ptr& );
164  scoped_ptr& operator = ( const scoped_ptr& );
165 };
166 
168 extern BASE_UTILS_API void free_unpacked_SM_string_array ( char ** array );
169 
205 {
206  void operator() ( char** bucket ) { free_unpacked_SM_string_array ( bucket ); };
207  void operator() ( const char** bucket ) { free_unpacked_SM_string_array ( (char**) bucket ); };
208 };
209 
210 }// end namespace Teamcenter
211 
212 #include <base_utils/libbase_utils_undef.h>
213 
214 #endif // TEAMCENTER_BASE_UTILS_SCOPED_PTR_HXX