diff options
author | 2013-01-04 18:11:21 +0000 | |
---|---|---|
committer | 2013-01-04 18:11:21 +0000 | |
commit | 6eb549e8ca3d88d7536859fd5aa3343fc3011f2f (patch) | |
tree | d97411a5a61648e62f2e23e6139982681b9fa6d1 /include/core/SkRefCnt.h | |
parent | e8a76ae8edc4f90456f9d8f90e56bf97f2657f3a (diff) |
Revert "Remove SkRefPtr" - r7021
samplecode/ still needs to be updated.
Review URL: https://codereview.appspot.com/7032048
git-svn-id: http://skia.googlecode.com/svn/trunk@7022 2bbb7eff-a529-9590-31e7-b0007b416f81
Diffstat (limited to 'include/core/SkRefCnt.h')
-rw-r--r-- | include/core/SkRefCnt.h | 32 |
1 files changed, 32 insertions, 0 deletions
diff --git a/include/core/SkRefCnt.h b/include/core/SkRefCnt.h index 17d77de288..21ed0efec3 100644 --- a/include/core/SkRefCnt.h +++ b/include/core/SkRefCnt.h @@ -229,5 +229,37 @@ private: SkRefCnt* fObj; }; +/** Wrapper class for SkRefCnt pointers. This manages ref/unref of a pointer to + a SkRefCnt (or subclass) object. + */ +template <typename T> class SkRefPtr { +public: + SkRefPtr() : fObj(NULL) {} + SkRefPtr(T* obj) : fObj(obj) { SkSafeRef(fObj); } + SkRefPtr(const SkRefPtr& o) : fObj(o.fObj) { SkSafeRef(fObj); } + ~SkRefPtr() { SkSafeUnref(fObj); } + + SkRefPtr& operator=(const SkRefPtr& rp) { + SkRefCnt_SafeAssign(fObj, rp.fObj); + return *this; + } + SkRefPtr& operator=(T* obj) { + SkRefCnt_SafeAssign(fObj, obj); + return *this; + } + + T* get() const { return fObj; } + T& operator*() const { return *fObj; } + T* operator->() const { return fObj; } + + typedef T* SkRefPtr::*unspecified_bool_type; + operator unspecified_bool_type() const { + return fObj ? &SkRefPtr::fObj : NULL; + } + +private: + T* fObj; +}; + #endif |