OLD | NEW |
1 | 1 |
2 /* | 2 /* |
3 * Copyright 2006 The Android Open Source Project | 3 * Copyright 2006 The Android Open Source Project |
4 * | 4 * |
5 * Use of this source code is governed by a BSD-style license that can be | 5 * Use of this source code is governed by a BSD-style license that can be |
6 * found in the LICENSE file. | 6 * found in the LICENSE file. |
7 */ | 7 */ |
8 | 8 |
9 | 9 |
10 #ifndef SkRefCnt_DEFINED | 10 #ifndef SkRefCnt_DEFINED |
(...skipping 230 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
241 T* fObj; | 241 T* fObj; |
242 }; | 242 }; |
243 // Can't use the #define trick below to guard a bare SkAutoTUnref(...) because i
t's templated. :( | 243 // Can't use the #define trick below to guard a bare SkAutoTUnref(...) because i
t's templated. :( |
244 | 244 |
245 class SkAutoUnref : public SkAutoTUnref<SkRefCnt> { | 245 class SkAutoUnref : public SkAutoTUnref<SkRefCnt> { |
246 public: | 246 public: |
247 SkAutoUnref(SkRefCnt* obj) : SkAutoTUnref<SkRefCnt>(obj) {} | 247 SkAutoUnref(SkRefCnt* obj) : SkAutoTUnref<SkRefCnt>(obj) {} |
248 }; | 248 }; |
249 #define SkAutoUnref(...) SK_REQUIRE_LOCAL_VAR(SkAutoUnref) | 249 #define SkAutoUnref(...) SK_REQUIRE_LOCAL_VAR(SkAutoUnref) |
250 | 250 |
251 /** Wrapper class for SkRefCnt pointers. This manages ref/unref of a pointer to | |
252 a SkRefCnt (or subclass) object. | |
253 */ | |
254 template <typename T> class SkRefPtr { | |
255 public: | |
256 SkRefPtr() : fObj(NULL) {} | |
257 SkRefPtr(T* obj) : fObj(obj) { SkSafeRef(fObj); } | |
258 SkRefPtr(const SkRefPtr& o) : fObj(o.fObj) { SkSafeRef(fObj); } | |
259 ~SkRefPtr() { SkSafeUnref(fObj); } | |
260 | |
261 SkRefPtr& operator=(const SkRefPtr& rp) { | |
262 SkRefCnt_SafeAssign(fObj, rp.fObj); | |
263 return *this; | |
264 } | |
265 SkRefPtr& operator=(T* obj) { | |
266 SkRefCnt_SafeAssign(fObj, obj); | |
267 return *this; | |
268 } | |
269 | |
270 T* get() const { return fObj; } | |
271 T& operator*() const { return *fObj; } | |
272 T* operator->() const { return fObj; } | |
273 | |
274 typedef T* SkRefPtr::*unspecified_bool_type; | |
275 operator unspecified_bool_type() const { | |
276 return fObj ? &SkRefPtr::fObj : NULL; | |
277 } | |
278 | |
279 private: | |
280 T* fObj; | |
281 }; | |
282 | |
283 #endif | 251 #endif |
OLD | NEW |