diff options
author | Steve Block <steveblock@google.com> | 2010-08-27 11:02:25 +0100 |
---|---|---|
committer | Steve Block <steveblock@google.com> | 2010-09-02 17:17:20 +0100 |
commit | e8b154fd68f9b33be40a3590e58347f353835f5c (patch) | |
tree | 0733ce26384183245aaa5656af26c653636fe6c1 /JavaScriptCore/wtf/gobject/GRefPtr.h | |
parent | da56157816334089526a7a115a85fd85a6e9a1dc (diff) | |
download | external_webkit-e8b154fd68f9b33be40a3590e58347f353835f5c.zip external_webkit-e8b154fd68f9b33be40a3590e58347f353835f5c.tar.gz external_webkit-e8b154fd68f9b33be40a3590e58347f353835f5c.tar.bz2 |
Merge WebKit at r66079 : Initial merge by git
Change-Id: Ie2e1440fb9d487d24e52c247342c076fecaecac7
Diffstat (limited to 'JavaScriptCore/wtf/gobject/GRefPtr.h')
-rw-r--r-- | JavaScriptCore/wtf/gobject/GRefPtr.h | 160 |
1 files changed, 13 insertions, 147 deletions
diff --git a/JavaScriptCore/wtf/gobject/GRefPtr.h b/JavaScriptCore/wtf/gobject/GRefPtr.h index 9a07d93..064c87e 100644 --- a/JavaScriptCore/wtf/gobject/GRefPtr.h +++ b/JavaScriptCore/wtf/gobject/GRefPtr.h @@ -24,157 +24,30 @@ #define WTF_GRefPtr_h #include "AlwaysInline.h" +#include "PlatformRefPtr.h" #include <algorithm> -#include <glib.h> -namespace WTF { - -enum GRefPtrAdoptType { GRefPtrAdopt }; -template <typename T> inline T* refGPtr(T*); -template <typename T> inline void derefGPtr(T*); -template <typename T> class GRefPtr; -template <typename T> GRefPtr<T> adoptGRef(T*); -template <> GHashTable* refGPtr(GHashTable* ptr); -template <> void derefGPtr(GHashTable* ptr); - -#if GLIB_CHECK_VERSION(2, 24, 0) -template <> GVariant* refGPtr(GVariant* ptr); -template <> void derefGPtr(GVariant* ptr); -#endif - -template <typename T> class GRefPtr { -public: - GRefPtr() : m_ptr(0) { } - GRefPtr(T* ptr) : m_ptr(ptr) { if (ptr) refGPtr(ptr); } - GRefPtr(const GRefPtr& o) : m_ptr(o.m_ptr) { if (T* ptr = m_ptr) refGPtr(ptr); } - template <typename U> GRefPtr(const GRefPtr<U>& o) : m_ptr(o.get()) { if (T* ptr = m_ptr) refGPtr(ptr); } - - ~GRefPtr() { if (T* ptr = m_ptr) derefGPtr(ptr); } - - void clear() - { - T* ptr = m_ptr; - m_ptr = 0; - if (ptr) - derefGPtr(ptr); - } - - T* get() const { return m_ptr; } - T& operator*() const { return *m_ptr; } - ALWAYS_INLINE T* operator->() const { return m_ptr; } - - bool operator!() const { return !m_ptr; } +typedef struct _GHashTable GHashTable; +typedef struct _GVariant GVariant; +typedef void* gpointer; +extern "C" void g_object_unref(gpointer object); +extern "C" gpointer g_object_ref_sink(gpointer object); - // This conversion operator allows implicit conversion to bool but not to other integer types. - typedef T* GRefPtr::*UnspecifiedBoolType; - operator UnspecifiedBoolType() const { return m_ptr ? &GRefPtr::m_ptr : 0; } - - GRefPtr& operator=(const GRefPtr&); - GRefPtr& operator=(T*); - template <typename U> GRefPtr& operator=(const GRefPtr<U>&); - - void swap(GRefPtr&); - friend GRefPtr adoptGRef<T>(T*); - -private: - static T* hashTableDeletedValue() { return reinterpret_cast<T*>(-1); } - // Adopting constructor. - GRefPtr(T* ptr, GRefPtrAdoptType) : m_ptr(ptr) {} - - T* m_ptr; -}; - -template <typename T> inline GRefPtr<T>& GRefPtr<T>::operator=(const GRefPtr<T>& o) -{ - T* optr = o.get(); - if (optr) - refGPtr(optr); - T* ptr = m_ptr; - m_ptr = optr; - if (ptr) - derefGPtr(ptr); - return *this; -} - -template <typename T> inline GRefPtr<T>& GRefPtr<T>::operator=(T* optr) -{ - T* ptr = m_ptr; - if (optr) - refGPtr(optr); - m_ptr = optr; - if (ptr) - derefGPtr(ptr); - return *this; -} - -template <class T> inline void GRefPtr<T>::swap(GRefPtr<T>& o) -{ - std::swap(m_ptr, o.m_ptr); -} - -template <class T> inline void swap(GRefPtr<T>& a, GRefPtr<T>& b) -{ - a.swap(b); -} - -template <typename T, typename U> inline bool operator==(const GRefPtr<T>& a, const GRefPtr<U>& b) -{ - return a.get() == b.get(); -} - -template <typename T, typename U> inline bool operator==(const GRefPtr<T>& a, U* b) -{ - return a.get() == b; -} - -template <typename T, typename U> inline bool operator==(T* a, const GRefPtr<U>& b) -{ - return a == b.get(); -} - -template <typename T, typename U> inline bool operator!=(const GRefPtr<T>& a, const GRefPtr<U>& b) -{ - return a.get() != b.get(); -} - -template <typename T, typename U> inline bool operator!=(const GRefPtr<T>& a, U* b) -{ - return a.get() != b; -} - -template <typename T, typename U> inline bool operator!=(T* a, const GRefPtr<U>& b) -{ - return a != b.get(); -} - -template <typename T, typename U> inline GRefPtr<T> static_pointer_cast(const GRefPtr<U>& p) -{ - return GRefPtr<T>(static_cast<T*>(p.get())); -} - -template <typename T, typename U> inline GRefPtr<T> const_pointer_cast(const GRefPtr<U>& p) -{ - return GRefPtr<T>(const_cast<T*>(p.get())); -} +namespace WTF { -template <typename T> inline T* getPtr(const GRefPtr<T>& p) -{ - return p.get(); -} +template <> GHashTable* refPlatformPtr(GHashTable* ptr); +template <> void derefPlatformPtr(GHashTable* ptr); +template <> GVariant* refPlatformPtr(GVariant* ptr); +template <> void derefPlatformPtr(GVariant* ptr); -template <typename T> GRefPtr<T> adoptGRef(T* p) -{ - return GRefPtr<T>(p, GRefPtrAdopt); -} - -template <typename T> inline T* refGPtr(T* ptr) +template <typename T> inline T* refPlatformPtr(T* ptr) { if (ptr) g_object_ref_sink(ptr); return ptr; } -template <typename T> inline void derefGPtr(T* ptr) +template <typename T> inline void derefPlatformPtr(T* ptr) { if (ptr) g_object_unref(ptr); @@ -182,11 +55,4 @@ template <typename T> inline void derefGPtr(T* ptr) } // namespace WTF -using WTF::GRefPtr; -using WTF::refGPtr; -using WTF::derefGPtr; -using WTF::adoptGRef; -using WTF::static_pointer_cast; -using WTF::const_pointer_cast; - #endif // WTF_GRefPtr_h |