UInt32 CNode::GetChildCount( ) const { UInt32 i=0; CNode* child = GetChild(); while( child ) { i++; child = child->GetSibling(); } return i; }
Bool CNode::RecursiveUnInit() { CNode* child = GetChild(); while( child ) { child->RecursiveUnInit(); child = child->GetSibling(); } SetParent( NULL ); return TRUE; }
Bool CNode::RecursiveUpdate( ) { if( Update( ) ) { CNode* child = GetChild(); while( child ) { child->RecursiveUpdate( ); child = child->GetSibling(); } PrepareForNextUpdate(); return TRUE; } return FALSE; }
Void CNode::RemoveAllChilds() { if( m_Child ) { CNode* node = m_Child; CNode* tmp = NULL; while( node ) { tmp = node; node = node->GetSibling(); tmp->SetParent( NULL ); } DebugAssert( m_Child == NULL ); } }
Void CNode::RemoveChild( CNode& childToRemove ) { CNode* child = m_Child; CNode* previous = NULL; while( child ) { if( child == &childToRemove ) { // Si le noeud à supprimer n'est pas en premiere position if( previous ) { //une reference vers les sibling DOIT être maintenue de manière à ce qu'ils ne soient pas automatiquement détruit // quand le premier sibling est détruit CRef<CNode> tmpSibling = childToRemove.m_Sibling; childToRemove.m_Sibling = NULL; previous->m_Sibling = NULL; // Supprime le sibling previous->m_Sibling = tmpSibling; // Attache le nouveau sibling } // Si le noeud à supprimer est en premiere position else { //une reference vers les sibling DOIT être maintenue de manière à ce qu'ils ne soient pas automatiquement détruit // quand le premier sibling est détruit CRef<CNode> tmpSibling = childToRemove.m_Sibling; childToRemove.m_Sibling = NULL; m_Child = NULL; // Supprime le sibling m_Child = tmpSibling; // Attache le nouveau sibling } return; } else { previous = child; child = child->GetSibling(); } } }