diff options
author | mtklein <mtklein@chromium.org> | 2016-03-16 10:28:35 -0700 |
---|---|---|
committer | Commit bot <commit-bot@chromium.org> | 2016-03-16 10:28:35 -0700 |
commit | 5f939ab658a228dce34a3b14a545638407150b92 (patch) | |
tree | 3eff56fe1aad736cb0e8e07735c06690c5d7d0a4 /src/core/SkAdvancedTypefaceMetrics.h | |
parent | af1e21e7ebb155d2505da0eb974c672953dfefef (diff) |
Use std::unique_ptr.
TBR=reed@google.com
Committed: https://skia.googlesource.com/skia/+/20c1e3abfc681771f73eb19fde7284196e028940
Committed: https://skia.googlesource.com/skia/+/3dd9ed37c24611af86f0fe374bd3698b63f09450
GOLD_TRYBOT_URL= https://gold.skia.org/search2?unt=true&query=source_type%3Dgm&master=false&issue=1780933003
Committed: https://skia.googlesource.com/skia/+/2691d76a06e1af6282f8b3a3140cc93361be10c4
Review URL: https://codereview.chromium.org/1780933003
Diffstat (limited to 'src/core/SkAdvancedTypefaceMetrics.h')
-rw-r--r-- | src/core/SkAdvancedTypefaceMetrics.h | 35 |
1 files changed, 32 insertions, 3 deletions
diff --git a/src/core/SkAdvancedTypefaceMetrics.h b/src/core/SkAdvancedTypefaceMetrics.h index b2c9ac3142..5a2180fade 100644 --- a/src/core/SkAdvancedTypefaceMetrics.h +++ b/src/core/SkAdvancedTypefaceMetrics.h @@ -16,6 +16,35 @@ #include "SkTDArray.h" #include "SkTemplates.h" +// Whatever std::unique_ptr Clank's using doesn't seem to work with AdvanceMetric's +// style of forward-declaration. Probably just a bug in an old libc++ / libstdc++. +// For now, hack around it with our own smart pointer. It'd be nice to clean up. +template <typename T> +class SkHackyAutoTDelete : SkNoncopyable { +public: + explicit SkHackyAutoTDelete(T* ptr = nullptr) : fPtr(ptr) {} + ~SkHackyAutoTDelete() { delete fPtr; } + + T* get() const { return fPtr; } + T* operator->() const { return fPtr; } + + void reset(T* ptr) { + if (ptr != fPtr) { + delete fPtr; + fPtr = ptr; + } + } + void free() { this->reset(nullptr); } + T* detach() { + T* ptr = fPtr; + fPtr = nullptr; + return ptr; + } + +private: + T* fPtr; +}; + /** \class SkAdvancedTypefaceMetrics The SkAdvancedTypefaceMetrics class is used by the PDF backend to correctly @@ -97,7 +126,7 @@ public: uint16_t fStartId; uint16_t fEndId; SkTDArray<Data> fAdvance; - SkAutoTDelete<AdvanceMetric<Data> > fNext; + SkHackyAutoTDelete<AdvanceMetric<Data> > fNext; }; struct VerticalMetric { @@ -130,9 +159,9 @@ template <typename Data> void resetRange(SkAdvancedTypefaceMetrics::AdvanceMetric<Data>* range, int startId); -template <typename Data> +template <typename Data, template<typename> class AutoTDelete> SkAdvancedTypefaceMetrics::AdvanceMetric<Data>* appendRange( - SkAutoTDelete<SkAdvancedTypefaceMetrics::AdvanceMetric<Data> >* nextSlot, + AutoTDelete<SkAdvancedTypefaceMetrics::AdvanceMetric<Data> >* nextSlot, int startId); template <typename Data> |