diff --git a/mfbt/WeakPtr.h b/mfbt/WeakPtr.h index 745ec6656fa7..2489d5dafd14 100644 --- a/mfbt/WeakPtr.h +++ b/mfbt/WeakPtr.h @@ -77,13 +77,13 @@ namespace mozilla { -template class WeakPtrBase; -template class SupportsWeakPtrBase; +template class WeakPtr; +template class SupportsWeakPtr; namespace detail { // This can live beyond the lifetime of the class derived from -// SupportsWeakPtrBase. +// SupportsWeakPtr. template class WeakReference : public ::mozilla::RefCounted > { @@ -118,8 +118,8 @@ public: #endif private: - friend class WeakPtrBase; - friend class SupportsWeakPtrBase; + friend class WeakPtr; + friend class SupportsWeakPtr; void detach() { mPtr = nullptr; } @@ -129,48 +129,43 @@ private: } // namespace detail template -class SupportsWeakPtrBase +class SupportsWeakPtr { public: - WeakPtrBase asWeakPtr() + WeakPtr asWeakPtr() { if (!weakRef) { weakRef = new detail::WeakReference(static_cast(this)); } - return WeakPtrBase(weakRef); + return WeakPtr(weakRef); } protected: - ~SupportsWeakPtrBase() + ~SupportsWeakPtr() { - static_assert(IsBaseOf, T>::value, - "T must derive from SupportsWeakPtrBase"); + static_assert(IsBaseOf, T>::value, + "T must derive from SupportsWeakPtr"); if (weakRef) { weakRef->detach(); } } private: - friend class WeakPtrBase; + friend class WeakPtr; RefPtr> weakRef; }; template -class SupportsWeakPtr : public SupportsWeakPtrBase -{ -}; - -template -class WeakPtrBase +class WeakPtr { public: - WeakPtrBase(const WeakPtrBase& aOther) + WeakPtr(const WeakPtr& aOther) : mRef(aOther.mRef) {} // Ensure that mRef is dereferenceable in the uninitialized state. - WeakPtrBase() : mRef(new detail::WeakReference(nullptr)) {} + WeakPtr() : mRef(new detail::WeakReference(nullptr)) {} operator T*() const { return mRef->get(); } T& operator*() const { return *mRef->get(); } @@ -180,23 +175,13 @@ public: T* get() const { return mRef->get(); } private: - friend class SupportsWeakPtrBase; + friend class SupportsWeakPtr; - explicit WeakPtrBase(const RefPtr>& aOther) : mRef(aOther) {} + explicit WeakPtr(const RefPtr>& aOther) : mRef(aOther) {} RefPtr> mRef; }; -template -class WeakPtr : public WeakPtrBase -{ - typedef WeakPtrBase Base; -public: - WeakPtr(const WeakPtr& aOther) : Base(aOther) {} - MOZ_IMPLICIT WeakPtr(const Base& aOther) : Base(aOther) {} - WeakPtr() {} -}; - } // namespace mozilla #endif /* mozilla_WeakPtr_h */