Bug 850054 - Do some more work on nsMainThreadPtrHandle. r=bsmedberg

This commit is contained in:
Bobby Holley 2013-03-15 10:41:48 -07:00
parent d5a29e8dbd
commit 5093adb764

View File

@ -136,6 +136,8 @@ public:
return mRawPtr; return mRawPtr;
} }
bool operator==(const nsMainThreadPtrHolder<T>& aOther) const { return mRawPtr == aOther.mRawPtr; }
NS_IMETHOD_(nsrefcnt) Release(); NS_IMETHOD_(nsrefcnt) Release();
NS_IMETHOD_(nsrefcnt) AddRef(); NS_IMETHOD_(nsrefcnt) AddRef();
@ -163,6 +165,7 @@ class nsMainThreadPtrHandle
nsRefPtr<nsMainThreadPtrHolder<T> > mPtr; nsRefPtr<nsMainThreadPtrHolder<T> > mPtr;
public: public:
nsMainThreadPtrHandle() : mPtr(NULL) {}
nsMainThreadPtrHandle(nsMainThreadPtrHolder<T> *aHolder) : mPtr(aHolder) {} nsMainThreadPtrHandle(nsMainThreadPtrHolder<T> *aHolder) : mPtr(aHolder) {}
nsMainThreadPtrHandle(const nsMainThreadPtrHandle& aOther) : mPtr(aOther.mPtr) {} nsMainThreadPtrHandle(const nsMainThreadPtrHandle& aOther) : mPtr(aOther.mPtr) {}
nsMainThreadPtrHandle& operator=(const nsMainThreadPtrHandle& aOther) { nsMainThreadPtrHandle& operator=(const nsMainThreadPtrHandle& aOther) {
@ -183,8 +186,25 @@ class nsMainThreadPtrHandle
} }
return nullptr; return nullptr;
} }
const T* get() const
{
MOZ_ASSERT(NS_IsMainThread());
if (mPtr) {
return mPtr.get()->get();
}
return nullptr;
}
operator T*() { return get(); } operator T*() { return get(); }
T* operator->() { return get(); } T* operator->() { return get(); }
// These are safe to call on other threads with appropriate external locking.
bool operator==(const nsMainThreadPtrHandle<T>& aOther) const {
if (!mPtr || !aOther.mPtr)
return mPtr == aOther.mPtr;
return *mPtr == *aOther.mPtr;
}
bool operator!() { return !mPtr; }
}; };
#endif #endif