| Index: include/core/SkRefCnt.h
|
| ===================================================================
|
| --- include/core/SkRefCnt.h (revision 11945)
|
| +++ include/core/SkRefCnt.h (working copy)
|
| @@ -14,25 +14,9 @@
|
| #include "SkInstCnt.h"
|
| #include "SkTemplates.h"
|
|
|
| -#ifdef SK_REF_CNT_BASE_INCLUDE
|
| -#include SK_REF_CNT_BASE_INCLUDE
|
| -#else
|
| /** \class SkRefCntBase
|
|
|
| - Default implementation of SkRefCntBase. The base class' contract is to
|
| - provide an implementation of aboutToRef. Embedders of skia can specify
|
| - an alternate implementation by setting SK_REF_CNT_BASE_INCLUDE. This is
|
| - useful for adding debug run-time checks to enforce certain usage patterns.
|
| -*/
|
| -class SK_API SkRefCntBase {
|
| -public:
|
| - void aboutToRef() const {}
|
| -};
|
| -#endif
|
| -
|
| -/** \class SkRefCnt
|
| -
|
| - SkRefCnt is the base class for objects that may be shared by multiple
|
| + SkRefCntBase is the base class for objects that may be shared by multiple
|
| objects. When an existing owner wants to share a reference, it calls ref().
|
| When an owner wants to release its reference, it calls unref(). When the
|
| shared object's reference count goes to zero as the result of an unref()
|
| @@ -40,17 +24,17 @@
|
| destructor to be called explicitly (or via the object going out of scope on
|
| the stack or calling delete) if getRefCnt() > 1.
|
| */
|
| -class SK_API SkRefCnt : public SkRefCntBase {
|
| +class SK_API SkRefCntBase : public SkNoncopyable {
|
| public:
|
| - SK_DECLARE_INST_COUNT_ROOT(SkRefCnt)
|
| + SK_DECLARE_INST_COUNT_ROOT(SkRefCntBase)
|
|
|
| /** Default construct, initializing the reference count to 1.
|
| */
|
| - SkRefCnt() : fRefCnt(1) {}
|
| + SkRefCntBase() : fRefCnt(1) {}
|
|
|
| /** Destruct, asserting that the reference count is 1.
|
| */
|
| - virtual ~SkRefCnt() {
|
| + virtual ~SkRefCntBase() {
|
| #ifdef SK_DEBUG
|
| SkASSERT(fRefCnt == 1);
|
| fRefCnt = 0; // illegal value, to catch us if we reuse after delete
|
| @@ -77,7 +61,6 @@
|
| */
|
| void ref() const {
|
| SkASSERT(fRefCnt > 0);
|
| - this->INHERITED::aboutToRef();
|
| sk_atomic_inc(&fRefCnt); // No barrier required.
|
| }
|
|
|
| @@ -102,11 +85,6 @@
|
| }
|
| #endif
|
|
|
| - /**
|
| - * Alias for unref(), for compatibility with WTF::RefPtr.
|
| - */
|
| - void deref() { this->unref(); }
|
| -
|
| protected:
|
| /**
|
| * Allow subclasses to call this if they've overridden internal_dispose
|
| @@ -123,12 +101,6 @@
|
|
|
| private:
|
| /**
|
| - * Make SkRefCnt non-copyable.
|
| - */
|
| - SkRefCnt(const SkRefCnt&);
|
| - SkRefCnt& operator=(const SkRefCnt&);
|
| -
|
| - /**
|
| * Called when the ref count goes to 0.
|
| */
|
| virtual void internal_dispose() const {
|
| @@ -143,9 +115,17 @@
|
|
|
| mutable int32_t fRefCnt;
|
|
|
| - typedef SkRefCntBase INHERITED;
|
| + typedef SkNoncopyable INHERITED;
|
| };
|
|
|
| +#ifdef SK_REF_CNT_MIXIN_INCLUDE
|
| +// It is the responsibility of the following include to define the type SkRefCnt.
|
| +// This SkRefCnt should normally derive from SkRefCntBase.
|
| +#include SK_REF_CNT_MIXIN_INCLUDE
|
| +#else
|
| +class SK_API SkRefCnt : public SkRefCntBase { };
|
| +#endif
|
| +
|
| ///////////////////////////////////////////////////////////////////////////////
|
|
|
| /** Helper macro to safely assign one SkRefCnt[TS]* to another, checking for
|
|
|