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 {
36
ASSERT(!m_deletionHasBegun);
40
bool hasOneRef() const
42
ASSERT(!m_deletionHasBegun);
43
return m_refCount == 1;
55
, m_deletionHasBegun(false)
64
// Returns whether the pointer should be freed or not.
67
ASSERT(!m_deletionHasBegun);
68
ASSERT(m_refCount > 0);
69
if (m_refCount == 1) {
71
m_deletionHasBegun = true;
80
// Helper for generating JIT code. Please do not use for non-JIT purposes.
87
bool deletionHasBegun() const
89
return m_deletionHasBegun;
95
friend class CrossThreadRefCounted;
99
bool m_deletionHasBegun;
104
template<class T> class RefCounted : public RefCountedBase, public Noncopyable {
109
delete static_cast<T*>(this);
118
template<class T> class RefCountedCustomAllocated : public RefCountedBase, public NoncopyableCustomAllocated {
123
delete static_cast<T*>(this);
127
~RefCountedCustomAllocated()
134
using WTF::RefCounted;
135
using WTF::RefCountedCustomAllocated;
137
#endif // RefCounted_h