コード例 #1
0
ファイル: avl.hpp プロジェクト: CS-svnmirror/evil-programmers
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;
}
コード例 #2
0
ファイル: socketmonitor.cpp プロジェクト: janvidar/samurai
void Samurai::IO::Net::SocketMonitor::remove(Samurai::IO::Net::SocketBase* socket)
{
	if (!socket || (int) socket->sd == (int) INVALID_SOCKET)
	{
		return;
	}
	internal_remove(socket);
}
コード例 #3
0
ファイル: entity.cpp プロジェクト: TimothyAspeslagh/yearning
void World::flush()
{
	for (s32 i = 0; i < remove_buffer.length; i++)
		internal_remove(&Entity::list[remove_buffer[i]]);
	remove_buffer.length = 0;
}
コード例 #4
0
ファイル: entity.cpp プロジェクト: TimothyAspeslagh/yearning
void World::remove(Entity* e)
{
	b8 actually_removed = internal_remove(e);
	vi_assert(actually_removed);
}
コード例 #5
0
ファイル: avl.hpp プロジェクト: CS-svnmirror/evil-programmers
template <class D> void avl_tree<D>::remove(D *data)
{
  internal_remove(&root,data);
}
コード例 #6
0
ファイル: entity.cpp プロジェクト: etodd/yearning
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);
}