]>
git.saurik.com Git - apple/javascriptcore.git/blob - wtf/RefCounted.h
ac8e167bf7488b808e6a06b0de6337ad4d9dd37e
   2  * Copyright (C) 2006, 2007, 2008 Apple Inc. All rights reserved. 
   4  * This library is free software; you can redistribute it and/or 
   5  * modify it under the terms of the GNU Library General Public 
   6  * License as published by the Free Software Foundation; either 
   7  * version 2 of the License, or (at your option) any later version. 
   9  * This library is distributed in the hope that it will be useful, 
  10  * but WITHOUT ANY WARRANTY; without even the implied warranty of 
  11  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU 
  12  * Library General Public License for more details. 
  14  * You should have received a copy of the GNU Library General Public License 
  15  * along with this library; see the file COPYING.LIB.  If not, write to 
  16  * the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, 
  17  * Boston, MA 02110-1301, USA. 
  24 #include <wtf/Assertions.h> 
  25 #include <wtf/Noncopyable.h> 
  29 // This base class holds the non-template methods and attributes. 
  30 // The RefCounted class inherits from it reducing the template bloat 
  31 // generated by the compiler (technique called template hoisting). 
  32 class RefCountedBase 
: Noncopyable 
{ 
  36         ASSERT(!m_deletionHasBegun
); 
  40     bool hasOneRef() const 
  42         ASSERT(!m_deletionHasBegun
); 
  43         return m_refCount 
== 1; 
  52     RefCountedBase(int initialRefCount
) 
  53         : m_refCount(initialRefCount
) 
  55         , m_deletionHasBegun(false) 
  62     // Returns whether the pointer should be freed or not. 
  65         ASSERT(!m_deletionHasBegun
); 
  66         ASSERT(m_refCount 
> 0); 
  67         if (m_refCount 
== 1) { 
  69             m_deletionHasBegun 
= true; 
  81     bool m_deletionHasBegun
; 
  86 template<class T
> class RefCounted 
: public RefCountedBase 
{ 
  88     RefCounted(int initialRefCount 
= 1) 
  89         : RefCountedBase(initialRefCount
) 
  96             delete static_cast<T
*>(this); 
 105 using WTF::RefCounted
; 
 107 #endif // RefCounted_h