15 enum class RefCountReleaseStatus { kDroppedLastRef, kOtherRefsRemained };
23 virtual void AddRef()
const = 0;
24 virtual RefCountReleaseStatus Release()
const = 0;
25 virtual bool HasOneRef()
const = 0;
39 if (ptr_) ptr_->AddRef();
44 if (ptr_) ptr_->AddRef();
61 T* get()
const {
return ptr_; }
62 operator bool()
const {
return (ptr_ != NULL); }
64 T* operator->()
const {
return ptr_; }
65 T& operator*()
const {
return *ptr_; }
79 if (ptr_ == p)
return *
this;
82 if (ptr_) ptr_->Release();
88 return *
this = r.get();
103 bool operator==(
const agora_refptr<T>& r)
const {
return ptr_ == r.ptr_; }
106 bool operator<(
const agora_refptr<T>& r)
const {
return ptr_ < r.ptr_; }
130 template <
typename T>
131 struct hash<agora::agora_refptr<T>> {
133 return reinterpret_cast<size_t>(k.get());