From cba5506cb846ddf02739ca21eaf7a41eeb168f8a Mon Sep 17 00:00:00 2001
From: g0dil <g0dil@wiback.org>
Date: Wed, 19 Mar 2008 15:34:10 +0000
Subject: [PATCH] Utils: Fixed intrusive_refcount_t access implementation to
 conform to documentation

---
 Packets/PacketInterpreter.hh |  2 +-
 Utils/intrusive_refcount.cti | 16 ++++++++--------
 Utils/intrusive_refcount.hh  | 16 +++++++---------
 3 files changed, 16 insertions(+), 18 deletions(-)

diff --git a/Packets/PacketInterpreter.hh b/Packets/PacketInterpreter.hh
index 80bb01662..b42cb190f 100644
--- a/Packets/PacketInterpreter.hh
+++ b/Packets/PacketInterpreter.hh
@@ -211,7 +211,7 @@ namespace senf {
         void releaseImpl();
 
         friend class detail::PacketImpl;
-        friend class intrusive_refcount_t<PacketInterpreterBase>;
+        friend class intrusive_refcount_base;
         template <class PacketType> friend class PacketInterpreter;
         friend class detail::packet::test::TestDriver;
         friend class PacketParserBase;
diff --git a/Utils/intrusive_refcount.cti b/Utils/intrusive_refcount.cti
index a8ba41e16..3e729e0c8 100644
--- a/Utils/intrusive_refcount.cti
+++ b/Utils/intrusive_refcount.cti
@@ -30,28 +30,28 @@
 #define prefix_ inline
 ///////////////////////////////cti.p///////////////////////////////////////
 
-template <class Self>
-prefix_ void senf::intrusive_refcount_t<Self>::intrusive_ptr_add_ref()
+template <class S>
+prefix_ void senf::intrusive_refcount_base::intrusive_ptr_add_ref()
 {
-    static_cast<Self*>(this)->add_ref();
+    static_cast<S*>(this)->add_ref();
 }
 
-template <class Self>
-prefix_ void senf::intrusive_refcount_t<Self>::intrusive_ptr_release()
+template <class S>
+prefix_ void senf::intrusive_refcount_base::intrusive_ptr_release()
 {
-    if (static_cast<Self*>(this)->release()) delete this;
+    if (static_cast<S*>(this)->release()) delete this;
 }
 
 template <class Self>
 prefix_ void senf::intrusive_ptr_add_ref(intrusive_refcount_t<Self>* p)
 {
-    p->intrusive_ptr_add_ref();
+    p->intrusive_ptr_add_ref<Self>();
 }
 
 template <class Self>
 prefix_ void senf::intrusive_ptr_release(intrusive_refcount_t<Self>* p)
 {
-    p->intrusive_ptr_release();
+    p->intrusive_ptr_release<Self>();
 }
 
 template <class Self>
diff --git a/Utils/intrusive_refcount.hh b/Utils/intrusive_refcount.hh
index 8ce578571..7fb8f189c 100644
--- a/Utils/intrusive_refcount.hh
+++ b/Utils/intrusive_refcount.hh
@@ -61,6 +61,13 @@ namespace senf {
     private:
         refcount_t refcount_;
         
+        template <class S> void intrusive_ptr_add_ref();
+        template <class S> void intrusive_ptr_release();
+        
+        template <class S>
+        friend void senf::intrusive_ptr_add_ref(intrusive_refcount_t<S> * p);
+        template <class S>
+        friend void senf::intrusive_ptr_release(intrusive_refcount_t<S> * p);
     };
 
     /** \brief Customizable reference count mixin for intrusive_ptr
@@ -115,15 +122,6 @@ namespace senf {
     {
     protected:
         intrusive_refcount_t();
-
-    private:
-        void intrusive_ptr_add_ref();
-        void intrusive_ptr_release();
-
-        template <class S>
-        friend void senf::intrusive_ptr_add_ref(intrusive_refcount_t<S> * p);
-        template <class S>
-        friend void senf::intrusive_ptr_release(intrusive_refcount_t<S> * p);
     };
 
     /** \brief Reference count mixin for intrusive_ptr
-- 
GitLab