From be30ee953344a1567eb0a7163d36f1871b1c7ec3 Mon Sep 17 00:00:00 2001 From: "Eunki, Hong" Date: Tue, 21 Dec 2021 21:02:42 +0900 Subject: [PATCH] [Tizen] Dali::Vector release memory later during Copy Change-Id: I16bcdca4737a9f754b22089873f4c42545ceae40 Signed-off-by: Eunki, Hong --- dali/public-api/common/dali-vector.cpp | 17 ++++++++++------- 1 file changed, 10 insertions(+), 7 deletions(-) diff --git a/dali/public-api/common/dali-vector.cpp b/dali/public-api/common/dali-vector.cpp index 80b03a4..3ab1396 100644 --- a/dali/public-api/common/dali-vector.cpp +++ b/dali/public-api/common/dali-vector.cpp @@ -112,16 +112,19 @@ void VectorBase::Reserve(SizeType capacity, SizeType elementSize) void VectorBase::Copy(const VectorBase& vector, SizeType elementSize) { - // release old data - Release(); // reserve space based on source capacity - const SizeType capacity = vector.Capacity(); - Reserve(capacity, elementSize); - // copy over whole data + const SizeType capacity = vector.Capacity(); const SizeType wholeAllocation = sizeof(SizeType) * 2u + capacity * elementSize; - SizeType* srcData = reinterpret_cast(vector.mData); - SizeType* dstData = reinterpret_cast(mData); + void* wholeData = reinterpret_cast(new uint8_t[wholeAllocation]); + DALI_ASSERT_ALWAYS(wholeData && "VectorBase::Copy - Memory allocation failed"); + + // copy over whole data + SizeType* srcData = reinterpret_cast(vector.mData); + SizeType* dstData = reinterpret_cast(wholeData) + 2u; memcpy(dstData - 2u, srcData - 2u, wholeAllocation); + + // release old buffer and set new data as mData + Replace(reinterpret_cast(dstData)); } void VectorBase::Swap(VectorBase& vector) -- 2.7.4