xref: /aosp_15_r20/external/lzma/CPP/Common/AutoPtr.h (revision f6dc9357d832569d4d1f5d24eacdb3935a1ae8e6)
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