IntrusiveRefCntPtr: in RefCountedBase and RefCountedBaseVPTR, make

ref_cnt mutable and Retain/Release const to enable reference counted
pointers to const objects

llvm-svn: 128804
This commit is contained in:
Peter Collingbourne 2011-04-04 00:57:03 +00:00
parent f739e21880
commit 44b69879c2

@ -42,15 +42,15 @@ namespace llvm {
//===----------------------------------------------------------------------===//
template <class Derived>
class RefCountedBase {
unsigned ref_cnt;
mutable unsigned ref_cnt;
public:
RefCountedBase() : ref_cnt(0) {}
void Retain() { ++ref_cnt; }
void Release() {
void Retain() const { ++ref_cnt; }
void Release() const {
assert (ref_cnt > 0 && "Reference count is already zero.");
if (--ref_cnt == 0) delete static_cast<Derived*>(this);
if (--ref_cnt == 0) delete static_cast<const Derived*>(this);
}
};
@ -63,14 +63,14 @@ namespace llvm {
/// attempting to do this will produce a compile error.
//===----------------------------------------------------------------------===//
class RefCountedBaseVPTR {
unsigned ref_cnt;
mutable unsigned ref_cnt;
protected:
RefCountedBaseVPTR() : ref_cnt(0) {}
virtual ~RefCountedBaseVPTR() {}
void Retain() { ++ref_cnt; }
void Release() {
void Retain() const { ++ref_cnt; }
void Release() const {
assert (ref_cnt > 0 && "Reference count is already zero.");
if (--ref_cnt == 0) delete this;
}