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