11 #ifndef BOOST_LOCKFREE_TAGGED_PTR_DCAS_HPP_INCLUDED 12 #define BOOST_LOCKFREE_TAGGED_PTR_DCAS_HPP_INCLUDED 14 #include <boost/lockfree/detail/cas.hpp> 15 #include <boost/lockfree/detail/branch_hints.hpp> 28 typedef std::size_t tag_t;
30 static const bool is_lockfree = boost::lockfree::atomic_cas<tagged_ptr>::is_lockfree;
59 if(likely(cas(old, p.ptr, p.tag)))
64 void atomic_set(T * p, tag_t t)
71 if(likely(cas(old, p, t)))
85 void set(T * p, tag_t t)
96 return (ptr == p.ptr) && (tag == p.tag);
101 return !operator==(p);
125 void set_tag(tag_t t)
135 return cas(oldval, newptr, oldval.tag + 1);
138 bool cas(
tagged_ptr const & oldval, T * newptr, tag_t t)
141 return boost::lockfree::atomic_cas<tagged_ptr>::cas(
this, oldval, newval);
152 T * operator->()
const 157 operator bool(
void)
const bool cas(tagged_ptr const &oldval, T *newptr)
tagged_ptr(tagged_ptr const &p)
void set(tagged_ptr const &p)