counted_base.hpp

来自「Boost provides free peer-reviewed portab」· HPP 代码 · 共 85 行

HPP
85
字号
//////////////////////////////////////////////////////////////////////////////// (c) Copyright Andreas Huber Doenni 2002-2005, Eric Niebler 2006// Distributed under the Boost Software License, Version 1.0. (See accompany-// ing file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)//////////////////////////////////////////////////////////////////////////////#ifndef BOOST_XPRESSIVE_DETAIL_UTILITY_COUNTED_BASE_HPP_EAN_04_16_2006#define BOOST_XPRESSIVE_DETAIL_UTILITY_COUNTED_BASE_HPP_EAN_04_16_2006#include <boost/assert.hpp>#include <boost/checked_delete.hpp>#include <boost/detail/atomic_count.hpp>namespace boost { namespace xpressive { namespace detail{    template<typename Derived>    struct counted_base_access;    //////////////////////////////////////////////////////////////////////////////    // counted_base    template<typename Derived>    struct counted_base    {        long use_count() const        {            return this->count_;        }    protected:        counted_base()          : count_(0)        {        }        counted_base(counted_base<Derived> const &)          : count_(0)        {        }        counted_base &operator =(counted_base<Derived> const &)        {            return *this;        }    private:        friend struct counted_base_access<Derived>;        mutable boost::detail::atomic_count count_;    };    //////////////////////////////////////////////////////////////////////////////    // counted_base_access    template<typename Derived>    struct counted_base_access    {        static void add_ref(counted_base<Derived> const *that)        {            ++that->count_;        }        static void release(counted_base<Derived> const *that)        {            BOOST_ASSERT(0 < that->count_);            if(0 == --that->count_)            {                boost::checked_delete(static_cast<Derived const *>(that));            }        }    };    template<typename Derived>    inline void intrusive_ptr_add_ref(counted_base<Derived> const *that)    {        counted_base_access<Derived>::add_ref(that);    }    template<typename Derived>    inline void intrusive_ptr_release(counted_base<Derived> const *that)    {        counted_base_access<Derived>::release(that);    }}}} // namespace boost::xpressive::detail#endif

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?