Ejemplo n.º 1
0
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);
}
Ejemplo n.º 2
0
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;
}
Ejemplo n.º 3
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;
				}
			}
		}
	}
}