void List::clear()
{
   ListElement *elem = m_head;
   if( m_deletor != 0 )
   {
      while( elem != 0 )
      {
         ListElement *toBeDeleted = elem;
         elem = elem->next();
         m_deletor( (void *) toBeDeleted->data() );
         memFree( toBeDeleted );
      }
   }
   else {
      while( elem != 0 )
      {
         ListElement *toBeDeleted = elem;
         elem = elem->next();
         memFree( toBeDeleted );
      }
   }

   m_head = m_tail = 0;
   m_size = 0;
}
ListElement *List::erase( ListElement *position )
{
   ListElement *ret = position->next();
   if( position == m_head )
   {
      // could be 0 if m_head == m_tail
      m_head = ret;
      if ( ret != 0 )
      {
         ret->prev(0);
      }
      else
         m_tail = 0;
   }
   else if ( position == m_tail )
   {
      // here, ret is 0 for sure.
      m_tail = position->prev();
      m_tail->next(0);
   }
   else {
      // normal case
      position->prev()->next( ret );
      ret->prev( position->prev() );
   }

   if( m_deletor != 0 )
      m_deletor( (void *) position->data() );

   m_size--;
   memFree( position );
   return ret;
}
Beispiel #3
0
	CPlayerContainer::~CPlayerContainer()
	{
		for (PlayerMap::iterator iter = m_players.begin(); iter != m_players.end(); ++iter)
		{
			const PlayerDetailWrapper& playerDetail = *iter;
			m_deletor(playerDetail.player);
		}
		m_players.clear();
	}
Beispiel #4
0
	bool CPlayerContainer::Delete(scgl::PlayerIDType playerID)
	{
		if (playerID == 0)
		{
			return false;
		}
		PlayerMap::index<PLAYERID>::type& playerIDMap = m_players.get<PLAYERID>();
		PlayerMap::index<PLAYERID>::type::iterator it = playerIDMap.find(playerID);
		if (it != playerIDMap.end())
		{
			const PlayerDetailWrapper& playerDetail = *it;
			m_deletor(playerDetail.player);
			playerIDMap.erase(it);
			return true;
		}
		return false;
	}
void List::popBack()
{
   if ( m_tail == 0 )
      return;

   ListElement *element = m_tail;
   m_tail = m_tail->prev();
   if( m_tail == 0 )
      m_head = 0;
   else
      m_tail->next(0);

   if( m_deletor != 0 ) {
      m_deletor( (void *) element->data() );
   }

   m_size--;
   memFree( element );
}
void List::popFront()
{
   if ( m_head == 0 )
      return;

   ListElement *element = m_head;
   m_head = m_head->next();
   if( m_head != 0 )
      m_head->prev( 0 );
   else
      m_tail = 0;

   if( m_deletor != 0 ) {
      m_deletor( (void *) element->data() );
   }

   m_size--;
   memFree( element );
}