void enet_slirp_queue_poll(void) { SDL_LockMutex(slirp_mutex); if (QueuePeek(slirpq)>0) { struct queuepacket *qp; qp=QueueDelete(slirpq); Log_Printf(LOG_WARN, "[SLIRP] Getting packet from queue"); enet_receive(qp->data,qp->len); free(qp); } SDL_UnlockMutex(slirp_mutex); }
int BFS(Graph *graph, BFSVertex *start, List *hops) { Queue queue; AdjList *adjlist = NULL; AdjList *adjlist_Clear = NULL; BFSVertex *vertex_Clear = NULL; BFSVertex *vertex_Adj = NULL; ListElmt *element = NULL; ListElmt *member = NULL; for (element = ListHead(&GraphAdjLists(graph)); element != NULL; element = ListNext(element)) { vertex_Clear = ((AdjList*)ListData(element))->vertex; if (graph->match(vertex_Clear, start)) { vertex_Clear->color = gray; vertex_Clear->nHops = 0; } else { vertex_Clear->color = white; vertex_Clear->nHops = -1; } } QueueInit(&queue, NULL); if (GraphAdjList(graph, start, &adjlist_Clear) != 0) { QueueDestroy(&queue); return -1; } if (QueueEnqueue(&queue, adjlist_Clear) != 0) { QueueDestroy(&queue); return -1; } while (QueueSize(&queue) > 0) { adjlist = QueuePeek(&queue); for (member = ListHead(&adjlist->Adjacent); member != NULL; member = ListNext(member)) { vertex_Adj = ListData(member); if (GraphAdjList(graph, vertex_Adj, &adjlist_Clear)) { QueueDestroy(&queue); return -1; } vertex_Clear = adjlist_Clear->vertex; if (vertex_Clear->color == white) { vertex_Clear->color = gray; vertex_Clear->nHops = ((BFSVertex*)adjlist->vertex)->nHops + 1; if (QueueEnqueue(&queue, adjlist_Clear) != 0) { QueueDestroy(&queue); return -1; } } } if (QueueDequeue(&queue, (void**)&adjlist) == 0) { ((BFSVertex*)adjlist->vertex)->color = black; } else { QueueDestroy(&queue); return -1; } } QueueDestroy(&queue); ListInit(hops, NULL); for (element = ListHead(&GraphAdjLists(graph)); element != NULL; element = ListNext(element)) { vertex_Clear = ((AdjList*)ListData(element))->vertex; if (vertex_Clear->nHops != -1) { if (ListInsert_Next(hops, ListTail(hops), vertex_Clear) != 0) { ListDestory(hops); return -1; } } } return 0; }
void main(void) { while(1) { char chc; printf("(1)Linked List, (2)Queue: "); scanf("%c", &chc); if(chc == '1') { LinkedListHeader list; LinkedListContruct(&list); bool quit = false; char keuze; while(1) { fflush(stdin); printf("1 = count, 2 = add front, 3 = add rear, 4 = find index, 5 = print all, 6 = quit: , 7 = Deep Copy"); scanf("%c", &keuze); switch(keuze) { case '1': printf("%d", LinkedListCount(&list)); break; case '2': { LinkedListNode *eerst = (LinkedListNode*)malloc(sizeof(LinkedListNode)); printf("Waarde die je wilt invoegen: "); scanf("%d", &eerst->data); LinkedListAddFront(&list, eerst); } break; case '3': { LinkedListNode *laatst = (LinkedListNode*)malloc(sizeof(LinkedListNode)); printf("Waarde die je wilt invoegen: "); scanf("%d", &laatst->data); LinkedListAddRear(&list, laatst); } break; case '4': { int index = 0; printf("index: "); scanf("%d", &index); LinkedListNode *node = LinkedListItem(&list, index); if(node != NULL) printf("Index %d heeft als waarde %d", index, node->data); } break; case '5': { int cnt = 1; while(1) { LinkedListNode *node = LinkedListItem(&list, cnt); if(node != NULL) { printf("Op index %d is het getal %d\n", cnt, node->data); cnt++; } else break; } } break; case '6': quit = true; break; case '7': { LinkedListHeader copiedHeader = {0}; LinkedListContruct(&copiedHeader); LinkedListDeepCopy(&list, &copiedHeader); //Gekopieerd. _getch() wordt aangeroepen om te kijken of het ook werkt _getch(); } break; default: break; } printf("\n"); if(quit) { LinkedListDestruct(&list); break; } } } if(chc == '2') { QueueHeader header = {0}; QueueInit(&header); bool quit = false; char keuze; while(1) { fflush(stdin); printf("1=enqueue, 2=dequeue, 3=peek, 4=isempty, 5=count,6=quit: "); scanf("%c", &keuze); switch(keuze) { case '1': { QueueNode *node = (QueueNode*)malloc(sizeof(QueueNode)); int num = 0; printf("Getal om te queuen: "); scanf("%d", &num); node->number = num; QueueEnqueue(&header, node); } break; case '2': { QueueNode node = QueueDequeue(&header); if(!node.isEmpty) printf("Het volgende deel van de queue is %d" , node.number); else printf("De queue is leeg!"); } break; case '3': { QueueNode node = QueuePeek(&header); if(!node.isEmpty) printf("Na het spieken blijkt dat het volgend nummer %d is" , node.number); else printf("de queue is leeg!"); } break; case '4': if(QueueIsEmpty(&header)) printf("ja"); else printf("nee"); break; case '5': { int num = 0; if(QueueCount(&header, &num)) printf("Er staan %d nummers in de rij", num); else printf("Er staan geen nummers meer in de rij"); } break; case '6': quit = true; break; default: break; } printf("\n"); if(quit) { QueueDestruct(&header); break; } } } } }