diff options
author | Iain Merrick <husky@google.com> | 2010-08-19 17:55:56 +0100 |
---|---|---|
committer | Iain Merrick <husky@google.com> | 2010-08-23 11:05:40 +0100 |
commit | f486d19d62f1bc33246748b14b14a9dfa617b57f (patch) | |
tree | 195485454c93125455a30e553a73981c3816144d /JavaScriptCore/API/JSRetainPtr.h | |
parent | 6ba0b43722d16bc295606bec39f396f596e4fef1 (diff) | |
download | external_webkit-f486d19d62f1bc33246748b14b14a9dfa617b57f.zip external_webkit-f486d19d62f1bc33246748b14b14a9dfa617b57f.tar.gz external_webkit-f486d19d62f1bc33246748b14b14a9dfa617b57f.tar.bz2 |
Merge WebKit at r65615 : Initial merge by git.
Change-Id: Ifbf384f4531e3b58475a662e38195c2d9152ae79
Diffstat (limited to 'JavaScriptCore/API/JSRetainPtr.h')
-rw-r--r-- | JavaScriptCore/API/JSRetainPtr.h | 89 |
1 files changed, 62 insertions, 27 deletions
diff --git a/JavaScriptCore/API/JSRetainPtr.h b/JavaScriptCore/API/JSRetainPtr.h index 69c6de1..a884f38 100644 --- a/JavaScriptCore/API/JSRetainPtr.h +++ b/JavaScriptCore/API/JSRetainPtr.h @@ -1,5 +1,5 @@ /* - * Copyright (C) 2005, 2006, 2007 Apple Inc. All rights reserved. + * Copyright (C) 2005, 2006, 2007, 2010 Apple Inc. All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions @@ -37,23 +37,20 @@ inline void JSRelease(JSStringRef string) { JSStringRelease(string); } enum AdoptTag { Adopt }; -template <typename T> class JSRetainPtr { +template<typename T> class JSRetainPtr { public: - JSRetainPtr() : m_ptr(0) {} + JSRetainPtr() : m_ptr(0) { } JSRetainPtr(T ptr) : m_ptr(ptr) { if (ptr) JSRetain(ptr); } - JSRetainPtr(AdoptTag, T ptr) : m_ptr(ptr) { } - - JSRetainPtr(const JSRetainPtr& o) : m_ptr(o.m_ptr) { if (T ptr = m_ptr) JSRetain(ptr); } - - ~JSRetainPtr() { if (T ptr = m_ptr) JSRelease(ptr); } - - template <typename U> JSRetainPtr(const JSRetainPtr<U>& o) : m_ptr(o.get()) { if (T ptr = m_ptr) JSRetain(ptr); } + JSRetainPtr(const JSRetainPtr&); + template<typename U> JSRetainPtr(const JSRetainPtr<U>&); + ~JSRetainPtr(); T get() const { return m_ptr; } - T releaseRef() { T tmp = m_ptr; m_ptr = 0; return tmp; } - + void clear(); + T leakRef(); + T operator->() const { return m_ptr; } bool operator!() const { return !m_ptr; } @@ -63,19 +60,57 @@ public: operator UnspecifiedBoolType() const { return m_ptr ? &JSRetainPtr::m_ptr : 0; } JSRetainPtr& operator=(const JSRetainPtr&); - template <typename U> JSRetainPtr& operator=(const JSRetainPtr<U>&); + template<typename U> JSRetainPtr& operator=(const JSRetainPtr<U>&); JSRetainPtr& operator=(T); - template <typename U> JSRetainPtr& operator=(U*); + template<typename U> JSRetainPtr& operator=(U*); void adopt(T); void swap(JSRetainPtr&); + // FIXME: Remove releaseRef once we change all callers to call leakRef instead. + T releaseRef() { return leakRef(); } + private: T m_ptr; }; -template <typename T> inline JSRetainPtr<T>& JSRetainPtr<T>::operator=(const JSRetainPtr<T>& o) +template<typename T> inline JSRetainPtr<T>::JSRetainPtr(const JSRetainPtr& o) + : m_ptr(o.m_ptr) +{ + if (m_ptr) + JSRetain(m_ptr); +} + +template<typename T> template<typename U> inline JSRetainPtr<T>::JSRetainPtr(const JSRetainPtr<U>& o) + : m_ptr(o.get()) +{ + if (m_ptr) + JSRetain(m_ptr); +} + +template<typename T> inline JSRetainPtr<T>::~JSRetainPtr() +{ + if (m_ptr) + JSRelease(m_ptr); +} + +template<typename T> inline void JSRetainPtr<T>::clear() +{ + if (T ptr = m_ptr) { + m_ptr = 0; + JSRelease(ptr); + } +} + +template<typename T> inline T JSRetainPtr<T>::leakRef() +{ + T ptr = m_ptr; + m_ptr = 0; + return ptr; +} + +template<typename T> inline JSRetainPtr<T>& JSRetainPtr<T>::operator=(const JSRetainPtr<T>& o) { T optr = o.get(); if (optr) @@ -87,7 +122,7 @@ template <typename T> inline JSRetainPtr<T>& JSRetainPtr<T>::operator=(const JSR return *this; } -template <typename T> template <typename U> inline JSRetainPtr<T>& JSRetainPtr<T>::operator=(const JSRetainPtr<U>& o) +template<typename T> template<typename U> inline JSRetainPtr<T>& JSRetainPtr<T>::operator=(const JSRetainPtr<U>& o) { T optr = o.get(); if (optr) @@ -99,7 +134,7 @@ template <typename T> template <typename U> inline JSRetainPtr<T>& JSRetainPtr<T return *this; } -template <typename T> inline JSRetainPtr<T>& JSRetainPtr<T>::operator=(T optr) +template<typename T> inline JSRetainPtr<T>& JSRetainPtr<T>::operator=(T optr) { if (optr) JSRetain(optr); @@ -110,7 +145,7 @@ template <typename T> inline JSRetainPtr<T>& JSRetainPtr<T>::operator=(T optr) return *this; } -template <typename T> inline void JSRetainPtr<T>::adopt(T optr) +template<typename T> inline void JSRetainPtr<T>::adopt(T optr) { T ptr = m_ptr; m_ptr = optr; @@ -118,7 +153,7 @@ template <typename T> inline void JSRetainPtr<T>::adopt(T optr) JSRelease(ptr); } -template <typename T> template <typename U> inline JSRetainPtr<T>& JSRetainPtr<T>::operator=(U* optr) +template<typename T> template<typename U> inline JSRetainPtr<T>& JSRetainPtr<T>::operator=(U* optr) { if (optr) JSRetain(optr); @@ -129,42 +164,42 @@ template <typename T> template <typename U> inline JSRetainPtr<T>& JSRetainPtr<T return *this; } -template <class T> inline void JSRetainPtr<T>::swap(JSRetainPtr<T>& o) +template<typename T> inline void JSRetainPtr<T>::swap(JSRetainPtr<T>& o) { std::swap(m_ptr, o.m_ptr); } -template <class T> inline void swap(JSRetainPtr<T>& a, JSRetainPtr<T>& b) +template<typename T> inline void swap(JSRetainPtr<T>& a, JSRetainPtr<T>& b) { a.swap(b); } -template <typename T, typename U> inline bool operator==(const JSRetainPtr<T>& a, const JSRetainPtr<U>& b) +template<typename T, typename U> inline bool operator==(const JSRetainPtr<T>& a, const JSRetainPtr<U>& b) { return a.get() == b.get(); } -template <typename T, typename U> inline bool operator==(const JSRetainPtr<T>& a, U* b) +template<typename T, typename U> inline bool operator==(const JSRetainPtr<T>& a, U* b) { return a.get() == b; } -template <typename T, typename U> inline bool operator==(T* a, const JSRetainPtr<U>& b) +template<typename T, typename U> inline bool operator==(T* a, const JSRetainPtr<U>& b) { return a == b.get(); } -template <typename T, typename U> inline bool operator!=(const JSRetainPtr<T>& a, const JSRetainPtr<U>& b) +template<typename T, typename U> inline bool operator!=(const JSRetainPtr<T>& a, const JSRetainPtr<U>& b) { return a.get() != b.get(); } -template <typename T, typename U> inline bool operator!=(const JSRetainPtr<T>& a, U* b) +template<typename T, typename U> inline bool operator!=(const JSRetainPtr<T>& a, U* b) { return a.get() != b; } -template <typename T, typename U> inline bool operator!=(T* a, const JSRetainPtr<U>& b) +template<typename T, typename U> inline bool operator!=(T* a, const JSRetainPtr<U>& b) { return a != b.get(); } |