Added boost header
This commit is contained in:
84
test/external/boost/xpressive/detail/utility/counted_base.hpp
vendored
Normal file
84
test/external/boost/xpressive/detail/utility/counted_base.hpp
vendored
Normal file
@@ -0,0 +1,84 @@
|
||||
//////////////////////////////////////////////////////////////////////////////
|
||||
// (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
|
||||
Reference in New Issue
Block a user