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;
78template <
typename Y,
typename B,
typename D>
79class 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;
304template <
typename T,
typename Y>
306{
return a.
get() == b.
get(); }
312template <
typename T,
typename Y>
314{
return a.
get() == b; }
320template <
typename T,
typename Y>
322{
return a.
get() != b.
get(); }
328template <
typename T,
typename Y>
330{
return a.
get() != b; }
336template <
typename T,
typename Y>
338{
return a.
get() < b.
get(); }
344template <
typename T,
typename Y>
346{
return a.
get() < b; }
Owning smart pointer.
Definition AutoPtr.h:123
AutoPtr(Y *ptr)
Constructor.
Definition AutoPtr.h:146
T & operator*() const
Access value.
Definition AutoPtr.h:213
bool operator!=(const AutoPtr< T > &a, const Y *b)
Equality comparison operator.
Definition AutoPtr.h:329
T * release()
Release ownership.
Definition AutoPtr.h:237
AutoPtr(Y *ptr, Deleter deleter)
Constructor.
Definition AutoPtr.h:155
bool operator==(const AutoPtr< T > &a, const Y *b)
Equality comparison operator.
Definition AutoPtr.h:313
~AutoPtr()
Destructor.
Definition AutoPtr.h:172
AutoPtr & operator=(AutoPtr &&other)
Move assignment operator.
Definition AutoPtr.h:178
AutoPtr(AutoPtr &&other)
Move constructor.
Definition AutoPtr.h:167
bool operator!() const
Returns true if nullptr.
Definition AutoPtr.h:225
bool operator!=(const AutoPtr< T > &a, const AutoPtr< Y > &b)
Equality comparison operator.
Definition AutoPtr.h:321
bool operator<(const AutoPtr< T > &a, const Y *b)
Less-than comparison operator.
Definition AutoPtr.h:345
AutoPtr< T > move(AutoPtr< T > &p)
Move to other instance.
Definition AutoPtr.h:295
bool operator==(const AutoPtr< T > &a, const AutoPtr< Y > &b)
Equality comparison operator.
Definition AutoPtr.h:305
T * operator->() const
Access value.
Definition AutoPtr.h:219
bool operator<(const AutoPtr< T > &a, const AutoPtr< Y > &b)
Less-than comparison operator.
Definition AutoPtr.h:337
void reset()
Reset value.
Definition AutoPtr.h:250
void reset(Y *ptr)
Reset value.
Definition AutoPtr.h:262
T * get() const
Access value.
Definition AutoPtr.h:207
AutoPtr()
Default constructor.
Definition AutoPtr.h:140
AutoPtr(AutoPtrRef< T > rhs)
Copy constructor (C++03 move via AutoPtrRef).
Definition AutoPtr.h:162
Cosmo Component Model.
Definition Api.h:53
Core module.
Definition Allocator.h:33