Exemple #1
0
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;
}