template <class D> AVL_RES avl_tree<D>::internal_remove(avl_node<D> **node,D *data) { AVL_RES result=AVL_BALANCE; if(!(*node)) return AVL_ERROR; long diff=compare(*node,data); if(diff<0) { if((result=internal_remove(&(*node)->left,data))==AVL_BALANCE) { return leftshrunk(node); } return result; } if(diff>0) { if((result=internal_remove(&(*node)->right,data))==AVL_BALANCE) { return rightshrunk(node); } return result; } node_count--; if((*node)->left) { if(findhighest(*node,&((*node)->left),&result)) { if(result==AVL_BALANCE) { result=leftshrunk(node); } return result; } } if((*node)->right) { if(findlowest(*node,&((*node)->right),&result)) { if(result==AVL_BALANCE) { result=rightshrunk(node); } return result; } } delete *node; *node=NULL; return AVL_BALANCE; }
void Samurai::IO::Net::SocketMonitor::remove(Samurai::IO::Net::SocketBase* socket) { if (!socket || (int) socket->sd == (int) INVALID_SOCKET) { return; } internal_remove(socket); }
void World::flush() { for (s32 i = 0; i < remove_buffer.length; i++) internal_remove(&Entity::list[remove_buffer[i]]); remove_buffer.length = 0; }
void World::remove(Entity* e) { b8 actually_removed = internal_remove(e); vi_assert(actually_removed); }
template <class D> void avl_tree<D>::remove(D *data) { internal_remove(&root,data); }
void World::remove(Entity* e) { vi_assert(Game::level.local); // if we're a client, all entity removals are handled by the server b8 actually_removed = internal_remove(e); vi_assert(actually_removed); }