27 #ifndef COSMO_AUTO_PTR_H
28 #define COSMO_AUTO_PTR_H
30 #include <Pt/Cosmo/Api.h>
46 virtual ~AutoPtrImpl()
49 void reset(T* ptr = 0)
68 virtual void onReset(T* ptr) = 0;
70 virtual void onDestroy() = 0;
78 template <
typename Y,
typename B,
typename D>
79 class AutoPtrData :
public AutoPtrImpl<B>
82 AutoPtrData(Y* res, D del)
88 virtual void onReset(B* ptr)
90 _del(
static_cast<Y*
>(ptr) );
93 virtual void onDestroy()
109 explicit AutoPtrRef(AutoPtrImpl<T>* ap)
125 template <
typename Y>
129 void operator()(Y* res)
136 typedef T element_type;
145 template <
typename Y>
149 DefaultDelete<Y> deleter;
150 _ptr =
new AutoPtrData<Y, T, DefaultDelete<Y> >(ptr, deleter);
154 template <
typename Y,
typename Deleter>
158 _ptr =
new AutoPtrData<Y, T, Deleter>(ptr, deleter);
199 operator AutoPtrRef<Y>()
201 AutoPtrImpl<Y>* tmp = _ptr;
203 return AutoPtrRef<Y>(tmp);
209 return _ptr ? _ptr->get() : 0;
231 operator bool()
const
242 T* tmp = _ptr->get();
261 template <
typename Y>
276 DefaultDelete<Y> deleter;
277 _ptr =
new AutoPtrData<Y, T, DefaultDelete<Y> >(ptr, deleter);
287 AutoPtrImpl<T>* _ptr;
294 template <
typename T>
304 template <
typename T,
typename Y>
306 {
return a.
get() == b.
get(); }
312 template <
typename T,
typename Y>
314 {
return a.
get() == b; }
320 template <
typename T,
typename Y>
322 {
return a.
get() != b.
get(); }
328 template <
typename T,
typename Y>
330 {
return a.
get() != b; }
336 template <
typename T,
typename Y>
338 {
return a.
get() < b.
get(); }
344 template <
typename T,
typename Y>
346 {
return a.
get() < b; }
352 #endif // include guard
Core module.
Definition: Allocator.h:33
AutoPtr< T > move(AutoPtr< T > &p)
Move to other instance.
Definition: AutoPtr.h:295
void reset()
Reset value.
Definition: AutoPtr.h:250
bool operator!() const
Returns true if nullptr.
Definition: AutoPtr.h:225
T * operator->() const
Access value.
Definition: AutoPtr.h:219
bool operator==(const AutoPtr< T > &a, const AutoPtr< Y > &b)
Equality comparison operator.
Definition: AutoPtr.h:305
bool operator<(const AutoPtr< T > &a, const Y *b)
Less-than comparison operator.
Definition: AutoPtr.h:345
bool operator<(const AutoPtr< T > &a, const AutoPtr< Y > &b)
Less-than comparison operator.
Definition: AutoPtr.h:337
bool operator!=(const AutoPtr< T > &a, const AutoPtr< Y > &b)
Equality comparison operator.
Definition: AutoPtr.h:321
Owning smart pointer.
Definition: AutoPtr.h:123
bool operator==(const AutoPtr< T > &a, const Y *b)
Equality comparison operator.
Definition: AutoPtr.h:313
void reset(Y *ptr)
Reset value.
Definition: AutoPtr.h:262
T & operator*() const
Access value.
Definition: AutoPtr.h:213
AutoPtr(AutoPtrRef< T > rhs)
Copy constructor (C++03 move via AutoPtrRef).
Definition: AutoPtr.h:162
AutoPtr(Y *ptr, Deleter deleter)
Constructor.
Definition: AutoPtr.h:155
~AutoPtr()
Destructor.
Definition: AutoPtr.h:172
bool operator!=(const AutoPtr< T > &a, const Y *b)
Equality comparison operator.
Definition: AutoPtr.h:329
AutoPtr(Y *ptr)
Constructor.
Definition: AutoPtr.h:146
T * get() const
Access value.
Definition: AutoPtr.h:207
AutoPtr(AutoPtr &&other)
Move constructor.
Definition: AutoPtr.h:167
T * release()
Release ownership.
Definition: AutoPtr.h:237
AutoPtr()
Default constructor.
Definition: AutoPtr.h:140
AutoPtr & operator=(AutoPtr &&other)
Move assignment operator.
Definition: AutoPtr.h:178