3 #include <core/Assertions.h>
16 unsigned int refCount = 1;
25 SharedPointerMetadata(
const SharedPointerMetadata& other) =
delete;
26 SharedPointerMetadata& operator=(
const SharedPointerMetadata& other) =
delete;
27 SharedPointerMetadata(SharedPointerMetadata&& other) =
delete;
28 SharedPointerMetadata& operator=(SharedPointerMetadata&& other) =
delete;
37 this->data->refCount++;
44 if ((this->data) && (this->data->refCount <= this->data->holderAmountForDelete)) {
48 this->ptr = other.ptr;
49 this->data = other.data;
51 this->data->refCount++;
59 if ((this->data) && (this->data->refCount <= this->data->holderAmountForDelete)) {
63 this->ptr = other.ptr;
64 this->data = other.data;
66 this->data->refCount++;
70 if ((this->data) && (this->data->refCount <= this->data->holderAmountForDelete)) {
74 this->ptr = other.ptr;
75 this->data = other.data;
81 *
this = std::move(other);
88 this->data->refCount--;
89 if (this->data->refCount == this->data->holderAmountForDelete) {
92 if (this->data->refCount == 0) {
96 T* get()
const noexcept {
99 T& operator*()
const {
102 T* operator->()
const noexcept {
105 explicit operator bool()
const {
106 return bool(this->ptr);
108 bool operator!()
const {
109 return !(bool(this->ptr));
111 [[nodiscard]]
unsigned int useCount()
const {
113 return this->data->refCount;
117 [[nodiscard]]
unsigned int getHolderAmountForDelete()
const {
124 void setHolderAmountForDelete(
unsigned int newHolderAmountForDelete)
const {
150 return this->castStatic<U>();
152 return this->castDynamic<U>();
153 case REINTERPRET_CAST:
154 return this->castReinterpret<U>();
156 return this->castAssert<U>();