bool BaseInStream::UnLink(BaseOutStream *pOutStream, bool reverseUnLink) { if (!MAP_HAS1(_linkedStreams, pOutStream->GetUniqueId())) { //WARN("BaseInStream::UnLink: This stream is not linked"); return true; } _pStreamsManager->SignalUnLinkingStreams(this, pOutStream); _linkedStreams.erase(pOutStream->GetUniqueId()); LinkedListNode<BaseOutStream *> *pIterator = _pOutStreams; LinkedListNode<BaseOutStream *> *pCurrent = NULL; while (pIterator != NULL) { pCurrent = pIterator; pIterator = pIterator->pPrev; if (pCurrent->info->GetUniqueId() == pOutStream->GetUniqueId()) { _pOutStreams = LastLinkedList<BaseOutStream *>(RemoveLinkedList<BaseOutStream *>(pCurrent)); break; } } if (reverseUnLink) { if (!pOutStream->UnLink(false)) { FATAL("BaseInStream::UnLink: Unable to reverse unLink"); //TODO: what are we going to do here??? NYIA; } } if (_canCallOutStreamDetached) { SignalOutStreamDetached(pOutStream); } return true; }
bool BaseInStream::UnLink(BaseOutStream *pOutStream, bool reverseUnLink) { if (!MAP_HAS1(_linkedStreams, pOutStream->GetUniqueId())) { WARN("BaseInStream::UnLink: This stream is not linked"); return true; } _linkedStreams.erase(pOutStream->GetUniqueId()); LinkedListNode<BaseOutStream *> *pTemp = _pOutStreams; while (pTemp != NULL) { if (pTemp->info->GetUniqueId() == pOutStream->GetUniqueId()) { _pOutStreams = RemoveLinkedList<BaseOutStream *>(pTemp); break; } pTemp = pTemp->pPrev; } if (reverseUnLink) { if (!pOutStream->UnLink(false)) { FATAL("BaseInStream::UnLink: Unable to reverse unLink"); //TODO: what are we going to do here??? NYIA; } } if (_canCallOutStreamDetached) { SignalOutStreamDetached(pOutStream); } return true; }