From: Pyry Haulos Date: Tue, 29 Mar 2016 00:32:34 +0000 (-0700) Subject: Add clear() to de::AppendList X-Git-Tag: upstream/0.1.0~671^2~97^2 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=9292b9be7eae958f897643a39c8249de59c480bb;p=platform%2Fupstream%2FVK-GL-CTS.git Add clear() to de::AppendList Change-Id: I0a139a7256837f9a85d9cb7353451f13a9022e67 --- diff --git a/framework/delibs/decpp/deAppendList.hpp b/framework/delibs/decpp/deAppendList.hpp index 4c37767..6ad3bb4 100644 --- a/framework/delibs/decpp/deAppendList.hpp +++ b/framework/delibs/decpp/deAppendList.hpp @@ -59,6 +59,8 @@ public: size_t size (void) const { return m_numElements; } + void clear (void); + private: AppendList (const AppendList&); AppendList& operator= (const AppendList&); @@ -132,6 +134,11 @@ public: return m_curBlock->elements[m_slotNdx]; } + CompatibleType* operator-> (void) const + { + return &m_curBlock->elements[m_slotNdx]; + } + operator Iterator (void) const { return Iterator(m_curBlock, m_blockSize, m_slotNdx); @@ -180,6 +187,36 @@ AppendList::~AppendList (void) delete delBlock; } + + DE_ASSERT(elementNdx == m_numElements); +} + +template +void AppendList::clear (void) +{ + // \todo [2016-03-28 pyry] Make thread-safe, if possible + + size_t elementNdx = 0; + Block* curBlock = m_first; + + while (curBlock) + { + Block* const delBlock = curBlock; + + curBlock = delBlock->next; + + // Call destructor for allocated elements + for (; elementNdx < min(m_numElements, delBlock->blockNdx*m_blockSize); ++elementNdx) + delBlock->elements[elementNdx%m_blockSize].~ElementType(); + + if (delBlock != m_first) + delete delBlock; + } + + DE_ASSERT(elementNdx == m_numElements); + + m_numElements = 0; + m_last = m_first; } template