int MsgRouter::deleteRoutesTo( const Receiver_p& _pReceiver ) { Receiver * pReceiver = _pReceiver.rawPtr(); int nDeleted = 0; // Delete from source routes for( auto it = m_sourceRoutes.begin() ; it != m_sourceRoutes.end() ; it++ ) { Route * p = it->second.first(); while( p ) { if( p->receiver() == pReceiver ) { Route * pNext = p->next(); delete p; // Receiver is dead, delete route. nDeleted++; p = pNext; } else p = p->next(); } } // Delete from type routes for( auto it = m_typeRoutes.begin() ; it != m_typeRoutes.end() ; it++ ) { Route * p = it->second.first(); while( p ) { if( p->receiver() == pReceiver ) { Route * pNext = p->next(); delete p; // Receiver is dead, delete route. nDeleted++; p = pNext; } else p = p->next(); } } return nDeleted; }
bool MsgRouter::endBroadcast( const Receiver_p& _pReceiver ) { Receiver * pReceiver = _pReceiver.rawPtr(); Route * p = m_broadcasts.first(); while( p ) { if( p->receiver() == pReceiver ) { delete p; return true; } p = p->next(); } return false; }