diff options
Diffstat (limited to 'include/core/SkTemplates.h')
-rw-r--r-- | include/core/SkTemplates.h | 12 |
1 files changed, 12 insertions, 0 deletions
diff --git a/include/core/SkTemplates.h b/include/core/SkTemplates.h index 5d3fa2d10c..434fcb8c0e 100644 --- a/include/core/SkTemplates.h +++ b/include/core/SkTemplates.h @@ -77,7 +77,19 @@ template <typename T, void (*P)(T*)> class SkAutoTCallVProc : SkNoncopyable { public: SkAutoTCallVProc(T* obj): fObj(obj) {} ~SkAutoTCallVProc() { if (fObj) P(fObj); } + + operator T*() const { return fObj; } + T* operator->() const { SkASSERT(fObj); return fObj; } + T* detach() { T* obj = fObj; fObj = NULL; return obj; } + void reset(T* obj = NULL) { + if (fObj != obj) { + if (fObj) { + P(fObj); + } + fObj = obj; + } + } private: T* fObj; }; |