diff options
author | The Android Open Source Project <initial-contribution@android.com> | 2008-12-17 18:05:15 -0800 |
---|---|---|
committer | The Android Open Source Project <initial-contribution@android.com> | 2008-12-17 18:05:15 -0800 |
commit | 1cbdecfa9fc428ac2d8aca0fa91c9580b3d57353 (patch) | |
tree | 4457a7306ea5acb43fe05bfe0973b1f7faf97ba2 /JavaScriptCore/wtf/RefPtr.h | |
parent | 9364f22aed35e1a1e9d07c121510f80be3ab0502 (diff) | |
download | external_webkit-1cbdecfa9fc428ac2d8aca0fa91c9580b3d57353.zip external_webkit-1cbdecfa9fc428ac2d8aca0fa91c9580b3d57353.tar.gz external_webkit-1cbdecfa9fc428ac2d8aca0fa91c9580b3d57353.tar.bz2 |
Code drop from //branches/cupcake/...@124589
Diffstat (limited to 'JavaScriptCore/wtf/RefPtr.h')
-rw-r--r-- | JavaScriptCore/wtf/RefPtr.h | 15 |
1 files changed, 11 insertions, 4 deletions
diff --git a/JavaScriptCore/wtf/RefPtr.h b/JavaScriptCore/wtf/RefPtr.h index d43a071..78bd257 100644 --- a/JavaScriptCore/wtf/RefPtr.h +++ b/JavaScriptCore/wtf/RefPtr.h @@ -1,6 +1,5 @@ -// -*- mode: c++; c-basic-offset: 4 -*- /* - * Copyright (C) 2005, 2006, 2007 Apple Inc. All rights reserved. + * Copyright (C) 2005, 2006, 2007, 2008 Apple Inc. All rights reserved. * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Library General Public @@ -31,9 +30,11 @@ namespace WTF { template <typename T> class PassRefPtr; + enum HashTableDeletedValueType { HashTableDeletedValue }; + template <typename T> class RefPtr { public: - RefPtr() : m_ptr(0) {} + RefPtr() : m_ptr(0) { } RefPtr(T* ptr) : m_ptr(ptr) { if (ptr) ptr->ref(); } RefPtr(const RefPtr& o) : m_ptr(o.m_ptr) { if (T* ptr = m_ptr) ptr->ref(); } // see comment in PassRefPtr.h for why this takes const reference @@ -42,6 +43,10 @@ namespace WTF { // Special constructor for cases where we overwrite an object in place. RefPtr(PlacementNewAdoptType) { } + // Hash table deleted values, which are only constructed and never copied or destroyed. + RefPtr(HashTableDeletedValueType) : m_ptr(hashTableDeletedValue()) { } + bool isHashTableDeletedValue() const { return m_ptr == hashTableDeletedValue(); } + ~RefPtr() { if (T* ptr = m_ptr) ptr->deref(); } template <typename U> RefPtr(const RefPtr<U>& o) : m_ptr(o.get()) { if (T* ptr = m_ptr) ptr->ref(); } @@ -52,7 +57,7 @@ namespace WTF { PassRefPtr<T> release() { PassRefPtr<T> tmp = adoptRef(m_ptr); m_ptr = 0; return tmp; } T& operator*() const { return *m_ptr; } - ALWAYS_INLINE T *operator->() const { return m_ptr; } + ALWAYS_INLINE T* operator->() const { return m_ptr; } bool operator!() const { return !m_ptr; } @@ -69,6 +74,8 @@ namespace WTF { void swap(RefPtr&); private: + static T* hashTableDeletedValue() { return reinterpret_cast<T*>(-1); } + T* m_ptr; }; |