void CGameObject::_DestroySubtree(CGameObject *NextObject) { if (NextObject == NULL) return; for (vector<CGameObject *>::iterator i = NextObject->Children.begin(); i != NextObject->Children.end(); ++i) _DestroySubtree(*i); NextObject->SetDestroyed(); }
void CL_HeapBTreeNodeSpace::_DestroySubtree (CL_BTreeNodeHandle h) { // Do a post-order walk, destroying nodes as we go along if (!h) return; CL_GenericBTreeNode* node = (CL_GenericBTreeNode*) h; register short n = node->Size(); for (register short i = 0; i <= n; i++) _DestroySubtree (node->Subtree(i)); _Destroy (node); }
CL_TemplateNodeSpace<ItemType>::~CL_TemplateNodeSpace () { _DestroySubtree (_root); _root = NULL; // This gets rid of the items also, because this class' // version of the virtual DestroyItem is called. }
CL_HeapBTreeNodeSpace::~CL_HeapBTreeNodeSpace () { // Traverse the tree and get rid of all the nodes _DestroySubtree (_root); _root = NULL; }