Index: include/private/SkTemplates.h |
diff --git a/include/private/SkTemplates.h b/include/private/SkTemplates.h |
index e36910e81446365e15c9cb2a2aa8124da7605f16..811b817d2258df0c6216497d6667963419a1a52d 100644 |
--- a/include/private/SkTemplates.h |
+++ b/include/private/SkTemplates.h |
@@ -13,8 +13,8 @@ |
#include "SkMath.h" |
#include "SkTLogic.h" |
#include "SkTypes.h" |
-#include "SkUniquePtr.h" |
#include <limits.h> |
+#include <memory> |
#include <new> |
/** \file SkTemplates.h |
@@ -58,9 +58,9 @@ template <typename R, typename T, R (*P)(T*)> struct SkFunctionWrapper { |
function. |
*/ |
template <typename T, void (*P)(T*)> class SkAutoTCallVProc |
- : public skstd::unique_ptr<T, SkFunctionWrapper<void, T, P>> { |
+ : public std::unique_ptr<T, SkFunctionWrapper<void, T, P>> { |
public: |
- SkAutoTCallVProc(T* obj): skstd::unique_ptr<T, SkFunctionWrapper<void, T, P>>(obj) {} |
+ SkAutoTCallVProc(T* obj): std::unique_ptr<T, SkFunctionWrapper<void, T, P>>(obj) {} |
operator T*() const { return this->get(); } |
T* detach() { return this->release(); } |
@@ -75,9 +75,9 @@ reference is null when the destructor is called, we do not call the |
function. |
*/ |
template <typename T, int (*P)(T*)> class SkAutoTCallIProc |
- : public skstd::unique_ptr<T, SkFunctionWrapper<int, T, P>> { |
+ : public std::unique_ptr<T, SkFunctionWrapper<int, T, P>> { |
public: |
- SkAutoTCallIProc(T* obj): skstd::unique_ptr<T, SkFunctionWrapper<int, T, P>>(obj) {} |
+ SkAutoTCallIProc(T* obj): std::unique_ptr<T, SkFunctionWrapper<int, T, P>>(obj) {} |
operator T*() const { return this->get(); } |
T* detach() { return this->release(); } |
@@ -93,18 +93,21 @@ public: |
The size of a SkAutoTDelete is small: sizeof(SkAutoTDelete<T>) == sizeof(T*) |
*/ |
-template <typename T> class SkAutoTDelete : public skstd::unique_ptr<T> { |
+template <typename T> class SkAutoTDelete : public std::unique_ptr<T> { |
public: |
- SkAutoTDelete(T* obj = NULL) : skstd::unique_ptr<T>(obj) {} |
+ SkAutoTDelete(T* obj = NULL) : std::unique_ptr<T>(obj) {} |
operator T*() const { return this->get(); } |
void free() { this->reset(nullptr); } |
T* detach() { return this->release(); } |
+ |
+ // See SkAutoTUnref for why we do this. |
+ explicit operator bool() const { return this->get() != nullptr; } |
}; |
-template <typename T> class SkAutoTDeleteArray : public skstd::unique_ptr<T[]> { |
+template <typename T> class SkAutoTDeleteArray : public std::unique_ptr<T[]> { |
public: |
- SkAutoTDeleteArray(T array[]) : skstd::unique_ptr<T[]>(array) {} |
+ SkAutoTDeleteArray(T array[]) : std::unique_ptr<T[]>(array) {} |
void free() { this->reset(nullptr); } |
T* detach() { return this->release(); } |