5 #ifndef CVMFS_UTIL_SHARED_PTR_H_
6 #define CVMFS_UTIL_SHARED_PTR_H_
12 #ifdef CVMFS_NAMESPACE_GUARD
13 namespace CVMFS_NAMESPACE_GUARD {
14 #endif // CVMFS_NAMESPACE_GUARD
28 value_ =
static_cast<element_type*
>(p);
30 atomic_write64(count_, 1);
36 if (atomic_read64(count_) == 0) {
44 : value_(r.value_), count_(r.count_) {
52 : value_(r.value_), count_(r.count_) {
85 if (atomic_read64(count_) == 0) {
97 value_ =
static_cast<element_type*
>(p);
99 atomic_write64(count_, 1);
110 element_type*
Get()
const {
115 return count_ && (atomic_read64(count_) == 1);
119 return count_ ? atomic_read64(count_) : -1;
127 template <
class T,
class U>
133 template <
class T,
class U>
139 template <
class T,
class U>
141 return a.
value_ < b.value_;
150 template <
class T,
class U>
155 template <
class T,
class U>
160 template <
class T,
class U>
165 template <
class T,
class U>
170 #ifdef CVMFS_NAMESPACE_GUARD
174 #endif // CVMFS_UTIL_SHARED_PTR_H_
SharedPtr< T > ConstPointerCast(SharedPtr< U > const &r)
SharedPtr< T > DynamicPointerCast(SharedPtr< U > const &r)
SharedPtr(SharedPtr< Y > const &r)
SharedPtr< T >::element_type * GetPointer(SharedPtr< T > const &p)
SharedPtr< T > ReinterpretPointerCast(SharedPtr< U > const &r)
SharedPtr< T > StaticPointerCast(SharedPtr< U > const &r)
SharedPtr & operator=(SharedPtr const &r)
bool operator!=(const cvmcache_hash &a, const cvmcache_hash &b)
bool operator==(const cvmcache_hash &a, const cvmcache_hash &b)
element_type * Get() const
SharedPtr(SharedPtr const &r)
SharedPtr & operator=(SharedPtr< Y > const &r)