1*f6dc9357SAndroid Build Coastguard Worker // Common/AutoPtr.h 2*f6dc9357SAndroid Build Coastguard Worker 3*f6dc9357SAndroid Build Coastguard Worker #ifndef ZIP7_INC_COMMON_AUTOPTR_H 4*f6dc9357SAndroid Build Coastguard Worker #define ZIP7_INC_COMMON_AUTOPTR_H 5*f6dc9357SAndroid Build Coastguard Worker 6*f6dc9357SAndroid Build Coastguard Worker template<class T> class CMyUniquePtr 7*f6dc9357SAndroid Build Coastguard Worker // CMyAutoPtr 8*f6dc9357SAndroid Build Coastguard Worker { 9*f6dc9357SAndroid Build Coastguard Worker T *_p; 10*f6dc9357SAndroid Build Coastguard Worker 11*f6dc9357SAndroid Build Coastguard Worker CMyUniquePtr(CMyUniquePtr<T>& p); // : _p(p.release()) {} 12*f6dc9357SAndroid Build Coastguard Worker CMyUniquePtr<T>& operator=(T *p); 13*f6dc9357SAndroid Build Coastguard Worker CMyUniquePtr<T>& operator=(CMyUniquePtr<T>& p); 14*f6dc9357SAndroid Build Coastguard Worker /* 15*f6dc9357SAndroid Build Coastguard Worker { 16*f6dc9357SAndroid Build Coastguard Worker reset(p.release()); 17*f6dc9357SAndroid Build Coastguard Worker return (*this); 18*f6dc9357SAndroid Build Coastguard Worker } 19*f6dc9357SAndroid Build Coastguard Worker */ 20*f6dc9357SAndroid Build Coastguard Worker void reset(T* p = NULL) 21*f6dc9357SAndroid Build Coastguard Worker { 22*f6dc9357SAndroid Build Coastguard Worker if (p != _p) 23*f6dc9357SAndroid Build Coastguard Worker delete _p; 24*f6dc9357SAndroid Build Coastguard Worker _p = p; 25*f6dc9357SAndroid Build Coastguard Worker } 26*f6dc9357SAndroid Build Coastguard Worker public: _p(p)27*f6dc9357SAndroid Build Coastguard Worker CMyUniquePtr(T *p = NULL) : _p(p) {} ~CMyUniquePtr()28*f6dc9357SAndroid Build Coastguard Worker ~CMyUniquePtr() { delete _p; } 29*f6dc9357SAndroid Build Coastguard Worker T& operator*() const { return *_p; } 30*f6dc9357SAndroid Build Coastguard Worker T* operator->() const { return _p; } 31*f6dc9357SAndroid Build Coastguard Worker // operator bool() const { return _p != NULL; } get()32*f6dc9357SAndroid Build Coastguard Worker T* get() const { return _p; } release()33*f6dc9357SAndroid Build Coastguard Worker T* release() 34*f6dc9357SAndroid Build Coastguard Worker { 35*f6dc9357SAndroid Build Coastguard Worker T *tmp = _p; 36*f6dc9357SAndroid Build Coastguard Worker _p = NULL; 37*f6dc9357SAndroid Build Coastguard Worker return tmp; 38*f6dc9357SAndroid Build Coastguard Worker } Create_if_Empty()39*f6dc9357SAndroid Build Coastguard Worker void Create_if_Empty() 40*f6dc9357SAndroid Build Coastguard Worker { 41*f6dc9357SAndroid Build Coastguard Worker if (!_p) 42*f6dc9357SAndroid Build Coastguard Worker _p = new T; 43*f6dc9357SAndroid Build Coastguard Worker } 44*f6dc9357SAndroid Build Coastguard Worker }; 45*f6dc9357SAndroid Build Coastguard Worker 46*f6dc9357SAndroid Build Coastguard Worker #endif 47