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)