diff options
author | bruvzg <7645683+bruvzg@users.noreply.github.com> | 2024-08-13 08:53:22 +0300 |
---|---|---|
committer | bruvzg <7645683+bruvzg@users.noreply.github.com> | 2024-08-13 08:53:45 +0300 |
commit | 273ba27c2f82a1c40db1af9f0784a843ba23cbf1 (patch) | |
tree | dab8c587761766993a4aeee59df3a7dfd71a8eea /core/templates | |
parent | a7a124a57d643103c882a781dfe1f3772363ecc7 (diff) | |
download | redot-engine-273ba27c2f82a1c40db1af9f0784a843ba23cbf1.tar.gz |
`CowData` remove hardcoded offset and unused argument from `_unref`.
Diffstat (limited to 'core/templates')
-rw-r--r-- | core/templates/cowdata.h | 25 |
1 files changed, 12 insertions, 13 deletions
diff --git a/core/templates/cowdata.h b/core/templates/cowdata.h index f22ae1f1d3..1200fc35ce 100644 --- a/core/templates/cowdata.h +++ b/core/templates/cowdata.h @@ -160,7 +160,7 @@ private: return *out; } - void _unref(void *p_data); + void _unref(); void _ref(const CowData *p_from); void _ref(const CowData &p_from); USize _copy_on_write(); @@ -242,30 +242,29 @@ public: }; template <typename T> -void CowData<T>::_unref(void *p_data) { - if (!p_data) { +void CowData<T>::_unref() { + if (!_ptr) { return; } SafeNumeric<USize> *refc = _get_refcount(); - if (refc->decrement() > 0) { return; // still in use } // clean up if constexpr (!std::is_trivially_destructible_v<T>) { - USize *count = _get_size(); - T *data = (T *)(count + 1); + USize current_size = *_get_size(); - for (USize i = 0; i < *count; ++i) { + for (USize i = 0; i < current_size; ++i) { // call destructors - data[i].~T(); + T *t = &_ptr[i]; + t->~T(); } } // free mem - Memory::free_static(((uint8_t *)p_data) - DATA_OFFSET, false); + Memory::free_static(((uint8_t *)_ptr) - DATA_OFFSET, false); } template <typename T> @@ -300,7 +299,7 @@ typename CowData<T>::USize CowData<T>::_copy_on_write() { } } - _unref(_ptr); + _unref(); _ptr = _data_ptr; rc = 1; @@ -321,7 +320,7 @@ Error CowData<T>::resize(Size p_size) { if (p_size == 0) { // wants to clean up - _unref(_ptr); + _unref(); _ptr = nullptr; return OK; } @@ -460,7 +459,7 @@ void CowData<T>::_ref(const CowData &p_from) { return; // self assign, do nothing. } - _unref(_ptr); + _unref(); _ptr = nullptr; if (!p_from._ptr) { @@ -474,7 +473,7 @@ void CowData<T>::_ref(const CowData &p_from) { template <typename T> CowData<T>::~CowData() { - _unref(_ptr); + _unref(); } #if defined(__GNUC__) && !defined(__clang__) |