bool BaseInStream::Link(BaseOutStream *pOutStream, bool reverseLink) { if ((!pOutStream->IsCompatibleWithType(GetType())) || (!IsCompatibleWithType(pOutStream->GetType()))) { FATAL("stream type %s not compatible with stream type %s", STR(tagToString(GetType())), STR(tagToString(pOutStream->GetType()))); return false; } if (MAP_HAS1(_linkedStreams, pOutStream->GetUniqueId())) { WARN("BaseInStream::Link: This stream is already linked"); return true; } _pOutStreams = AddLinkedList(_pOutStreams, pOutStream, true); _linkedStreams[pOutStream->GetUniqueId()] = pOutStream; if (reverseLink) { if (!pOutStream->Link(this, false)) { FATAL("BaseInStream::Link: Unable to reverse link"); //TODO: here we must remove the link from _pOutStreams and _linkedStreams NYIA; } } SignalOutStreamAttached(pOutStream); return true; }
int main( void ) { LinkedList *ll; int e; aa *d; aa *f; aa *g; aa *d1; d = malloc(sizeof(aa)); f = malloc(sizeof(aa)); g = malloc(sizeof(aa)); d->a = 8; f->a = 15; g->a = 9; ll = InitLinkedList(sizeof(aa)); e = LinkedListIsEmpty(ll); printf("is empty? : %d\n",e); AddLinkedList(ll, d); printf("added\n"); e = LinkedListIsEmpty(ll); printf("is empty? : %d\n",e); d1 = GetFirstLinkedList(ll); printf("First %d\n", d1->a); d1 = GetLastLinkedList(ll); printf("Last %d\n", d1->a); printf("----------------------\n"); AddLinkedList(ll, f); e = LinkedListIsEmpty(ll); printf("is empty? : %d\n",e); d1 = GetFirstLinkedList(ll); printf("First %d\n", d1->a); d1 = GetLastLinkedList(ll); printf("Last %d\n", d1->a); printf("//////////////////////\n"); AddFirstLinkedList(ll, g); e = LinkedListIsEmpty(ll); printf("is empty? : %d\n",e); d1 = GetFirstLinkedList(ll); printf("First %d\n", d1->a); d1 = GetLastLinkedList(ll); printf("Last %d\n", d1->a); RemoveFirstLinkedList(ll); printf("----------------------\n"); printf("is empty? : %d\n",e); d1 = GetFirstLinkedList(ll); printf("First %d\n", d1->a); d1 = GetLastLinkedList(ll); printf("Last %d\n", d1->a); RemoveLastLinkedList(ll); printf("++++++++++++++++++++++\n"); d1 = GetLastLinkedList(ll); printf("Last %d\n", d1->a); return 0; }