Use traits for IntrusiveRefCntPtr to determine how to increment/decrement a reference...
authorTed Kremenek <kremenek@apple.com>
Tue, 31 Jan 2012 00:57:04 +0000 (00:57 +0000)
committerTed Kremenek <kremenek@apple.com>
Tue, 31 Jan 2012 00:57:04 +0000 (00:57 +0000)
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@149308 91177308-0d34-0410-b5e6-96231b3b80d8

include/llvm/ADT/IntrusiveRefCntPtr.h

index 1d7e463aa1f0f7ef74dff7d73b56e8be7803040a..b5b7a5106de77539f3e117f412d3608f64ffbb68 100644 (file)
@@ -83,6 +83,12 @@ namespace llvm {
     friend class IntrusiveRefCntPtr;
   };
 
+  
+  template <typename T> struct IntrusiveRefCntPtrInfo {
+    static void retain(T *obj) { obj->Retain(); }
+    static void release(T *obj) { obj->Release(); }
+  };
+  
 //===----------------------------------------------------------------------===//
 /// IntrusiveRefCntPtr - A template class that implements a "smart pointer"
 ///  that assumes the wrapped object has a reference count associated
@@ -168,8 +174,8 @@ namespace llvm {
     }
 
   private:
-    void retain() { if (Obj) Obj->Retain(); }
-    void release() { if (Obj) Obj->Release(); }
+    void retain() { if (Obj) IntrusiveRefCntPtrInfo<T>::retain(Obj); }
+    void release() { if (Obj) IntrusiveRefCntPtrInfo<T>::release(Obj); }
 
     void replace(T* S) {
       this_type(S).swap(*this);