Added boost header
This commit is contained in:
92
test/external/boost/statechart/detail/counted_base.hpp
vendored
Normal file
92
test/external/boost/statechart/detail/counted_base.hpp
vendored
Normal file
@@ -0,0 +1,92 @@
|
||||
#ifndef BOOST_STATECHART_DETAIL_COUNTED_BASE_HPP_INCLUDED
|
||||
#define BOOST_STATECHART_DETAIL_COUNTED_BASE_HPP_INCLUDED
|
||||
//////////////////////////////////////////////////////////////////////////////
|
||||
// Copyright 2002-2006 Andreas Huber Doenni
|
||||
// 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)
|
||||
//////////////////////////////////////////////////////////////////////////////
|
||||
|
||||
|
||||
|
||||
#include <boost/detail/atomic_count.hpp>
|
||||
#include <boost/config.hpp> // BOOST_NO_ARGUMENT_DEPENDENT_LOOKUP
|
||||
|
||||
|
||||
|
||||
namespace boost
|
||||
{
|
||||
namespace statechart
|
||||
{
|
||||
namespace detail
|
||||
{
|
||||
|
||||
|
||||
|
||||
template< bool NeedsLocking >
|
||||
struct count_base
|
||||
{
|
||||
count_base() : count_( 0 ) {}
|
||||
mutable boost::detail::atomic_count count_;
|
||||
};
|
||||
|
||||
template<>
|
||||
struct count_base< false >
|
||||
{
|
||||
count_base() : count_( 0 ) {}
|
||||
mutable long count_;
|
||||
};
|
||||
|
||||
//////////////////////////////////////////////////////////////////////////////
|
||||
template< bool NeedsLocking = true >
|
||||
class counted_base : private count_base< NeedsLocking >
|
||||
{
|
||||
typedef count_base< NeedsLocking > base_type;
|
||||
public:
|
||||
//////////////////////////////////////////////////////////////////////////
|
||||
bool ref_counted() const
|
||||
{
|
||||
return base_type::count_ != 0;
|
||||
}
|
||||
|
||||
long ref_count() const
|
||||
{
|
||||
return base_type::count_;
|
||||
}
|
||||
|
||||
protected:
|
||||
//////////////////////////////////////////////////////////////////////////
|
||||
counted_base() {}
|
||||
~counted_base() {}
|
||||
|
||||
// do nothing copy implementation is intentional (the number of
|
||||
// referencing pointers of the source and the destination is not changed
|
||||
// through the copy operation)
|
||||
counted_base( const counted_base & ) : base_type() {}
|
||||
counted_base & operator=( const counted_base & ) { return *this; }
|
||||
|
||||
public:
|
||||
//////////////////////////////////////////////////////////////////////////
|
||||
// The following declarations should be private.
|
||||
// They are only public because many compilers lack template friends.
|
||||
//////////////////////////////////////////////////////////////////////////
|
||||
void add_ref() const
|
||||
{
|
||||
++base_type::count_;
|
||||
}
|
||||
|
||||
bool release() const
|
||||
{
|
||||
BOOST_ASSERT( base_type::count_ > 0 );
|
||||
return --base_type::count_ == 0;
|
||||
}
|
||||
};
|
||||
|
||||
|
||||
|
||||
} // namespace detail
|
||||
} // namespace statechart
|
||||
} // namespace boost
|
||||
|
||||
|
||||
|
||||
#endif
|
||||
Reference in New Issue
Block a user