@@ -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