Skip to content

Commit c056946

Browse files
committed
Foundation Classes - Add resetSize method and enhance
Destroy method in NCollection_Map for better memory management
1 parent dc6f4e3 commit c056946

File tree

2 files changed

+26
-1
lines changed

2 files changed

+26
-1
lines changed

src/NCollection/NCollection_BaseMap.hxx

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -245,6 +245,8 @@ public:
245245
NCollection_ListNode ** myData1;
246246
NCollection_ListNode ** myData2;
247247

248+
void resetSize() { mySize = 0; }
249+
248250
private:
249251
// ---------- PRIVATE FIELDS ------------
250252
Standard_Integer myNbBuckets;

src/NCollection/NCollection_Map.hxx

Lines changed: 24 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -378,7 +378,7 @@ public:
378378
//! Clear data. If doReleaseMemory is false then the table of
379379
//! buckets is not released and will be reused.
380380
void Clear(const Standard_Boolean doReleaseMemory = Standard_False)
381-
{ Destroy (MapNode::delNode, doReleaseMemory); myFirst = myLast = nullptr; }
381+
{ Destroy (MapNode::delNode, doReleaseMemory); }
382382

383383
//! Clear data and reset allocator
384384
void Clear (const Handle(NCollection_BaseAllocator)& theAllocator)
@@ -388,6 +388,29 @@ public:
388388
NCollection_BaseAllocator::CommonBaseAllocator() );
389389
}
390390

391+
//! Deallocate all node elements
392+
void Destroy(NCollection_DelMapNode fDel, Standard_Boolean doReleaseMemory)
393+
{
394+
if (!IsEmpty())
395+
{
396+
MapNode* aNode = myFirst;
397+
while (aNode)
398+
{
399+
MapNode* aCurNode = aNode;
400+
aNode = aNode->NextSeq();
401+
fDel (aCurNode, myAllocator);
402+
}
403+
myFirst = myLast = nullptr;
404+
memset(myData1, 0, (NbBuckets() + 1) * sizeof(NCollection_ListNode*));
405+
resetSize();
406+
}
407+
if (doReleaseMemory)
408+
{
409+
Standard::Free(myData1);
410+
myData1 = myData2 = nullptr;
411+
}
412+
}
413+
391414
//! Destructor
392415
virtual ~NCollection_Map (void)
393416
{ Clear(true); }

0 commit comments

Comments
 (0)