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; }
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(); }
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 ); }