コード例 #1
0
ファイル: TestLinkedList.c プロジェクト: AMV007/FreeRDP
int TestLinkedList(int argc, char* argv[])
{
	int count;
	int number;
	wLinkedList* list;

	list = LinkedList_New();

	LinkedList_AddFirst(list, (void*) (size_t) 1);
	LinkedList_AddLast(list, (void*) (size_t) 2);
	LinkedList_AddLast(list, (void*) (size_t) 3);

	count = LinkedList_Count(list);

	if (count != 3)
	{
		printf("LinkedList_Count: expected %d, actual: %d\n", 3, count);
		return -1;
	}

	LinkedList_Enumerator_Reset(list);

	while (LinkedList_Enumerator_MoveNext(list))
	{
		number = (int) (size_t) LinkedList_Enumerator_Current(list);
		printf("\t%d\n", number);
	}
	printf("\n");

	printf("LinkedList First: %d Last: %d\n",
			(int) (size_t) LinkedList_First(list), (int) (size_t) LinkedList_Last(list));

	LinkedList_RemoveFirst(list);
	LinkedList_RemoveLast(list);

	count = LinkedList_Count(list);

	if (count != 1)
	{
		printf("LinkedList_Count: expected %d, actual: %d\n", 1, count);
		return -1;
	}

	LinkedList_Enumerator_Reset(list);

	while (LinkedList_Enumerator_MoveNext(list))
	{
		number = (int) (size_t) LinkedList_Enumerator_Current(list);
		printf("\t%d\n", number);
	}
	printf("\n");

	printf("LinkedList First: %d Last: %d\n",
			(int) (size_t) LinkedList_First(list), (int) (size_t) LinkedList_Last(list));

	LinkedList_RemoveFirst(list);
	LinkedList_RemoveLast(list);

	count = LinkedList_Count(list);

	if (count != 0)
	{
		printf("LinkedList_Count: expected %d, actual: %d\n", 0, count);
		return -1;
	}

	LinkedList_AddFirst(list, (void*) (size_t) 4);
	LinkedList_AddLast(list, (void*) (size_t) 5);
	LinkedList_AddLast(list, (void*) (size_t) 6);

	count = LinkedList_Count(list);

	if (count != 3)
	{
		printf("LinkedList_Count: expected %d, actual: %d\n", 3, count);
		return -1;
	}

	LinkedList_Enumerator_Reset(list);

	while (LinkedList_Enumerator_MoveNext(list))
	{
		number = (int) (size_t) LinkedList_Enumerator_Current(list);
		printf("\t%d\n", number);
	}
	printf("\n");

	printf("LinkedList First: %d Last: %d\n",
			(int) (size_t) LinkedList_First(list), (int) (size_t) LinkedList_Last(list));

	LinkedList_Remove(list, (void*) (size_t) 5);

	LinkedList_Enumerator_Reset(list);

	while (LinkedList_Enumerator_MoveNext(list))
	{
		number = (int) (size_t) LinkedList_Enumerator_Current(list);
		printf("\t%d\n", number);
	}
	printf("\n");

	printf("LinkedList First: %d Last: %d\n",
			(int) (size_t) LinkedList_First(list), (int) (size_t) LinkedList_Last(list));

	LinkedList_Free(list);

	/* Test enumerator robustness */

	/* enumerator on an empty list */
	list = LinkedList_New();
	LinkedList_Enumerator_Reset(list);
	while (LinkedList_Enumerator_MoveNext(list))
	{
		number = (int) (size_t) LinkedList_Enumerator_Current(list);
		printf("\t%d\n", number);
	}
	printf("\n");
	LinkedList_Free(list);

	/* Use an enumerator without reset */
	list = LinkedList_New();
	LinkedList_AddFirst(list, (void*) (size_t) 4);
	LinkedList_AddLast(list, (void*) (size_t) 5);
	LinkedList_AddLast(list, (void*) (size_t) 6);
	while (LinkedList_Enumerator_MoveNext(list))
	{
		number = (int) (size_t) LinkedList_Enumerator_Current(list);
		printf("\t%d\n", number);
	}
	printf("\n");
	LinkedList_Free(list);


	return 0;
}
コード例 #2
0
ファイル: pipeline.c プロジェクト: sylvain121/FreeRDS
int freerds_message_server_queue_pack(rdsBackendConnector* connector)
{
	RDS_RECT rect;
	int ChainedMode;
	REGION16 region;
	wLinkedList* list;
	RECTANGLE_16 rect16;
	RDS_MSG_COMMON* node;
	rdsConnection* connection;
	const RECTANGLE_16* extents;

	ChainedMode = 0;
	connection = connector->connection;

	list = connector->ServerList;

	region16_init(&region);

	LinkedList_Enumerator_Reset(list);

	while (LinkedList_Enumerator_MoveNext(list))
	{
		node = (RDS_MSG_COMMON*) LinkedList_Enumerator_Current(list);

		if ((!ChainedMode) && (node->msgFlags & RDS_MSG_FLAG_RECT))
		{
			rect16.left = node->rect.x;
			rect16.top = node->rect.y;
			rect16.right = node->rect.x + node->rect.width;
			rect16.bottom = node->rect.y + node->rect.height;

			region16_union_rect(&region, &region, &rect16);
		}
		else
		{
			MessageQueue_Post(connector->ServerQueue, (void*) connector, node->type, (void*) node, NULL);
		}
	}

	LinkedList_Clear(list);

	if (!ChainedMode)
	{
		extents = region16_extents(&region);

		rect.x = extents->left;
		rect.y = extents->top;
		rect.width = extents->right - extents->left;
		rect.height = extents->bottom - extents->top;

		freerds_message_server_align_rect(connector, &rect);

		if (connector->framebuffer.fbAttached && (rect.width * rect.height))
		{
			RDS_MSG_COMMON* msg;
			RDS_MSG_PAINT_RECT paintRect;

			paintRect.type = RDS_SERVER_PAINT_RECT;

			paintRect.nXSrc = 0;
			paintRect.nYSrc = 0;
			paintRect.bitmapData = NULL;
			paintRect.bitmapDataLength = 0;
			paintRect.framebuffer = &(connector->framebuffer);
			paintRect.fbSegmentId = connector->framebuffer.fbSegmentId;

			paintRect.nLeftRect = rect.x;
			paintRect.nTopRect = rect.y;
			paintRect.nWidth = rect.width;
			paintRect.nHeight = rect.height;

			msg = freerds_server_message_copy((RDS_MSG_COMMON*) &paintRect);

			MessageQueue_Post(connector->ServerQueue, (void*) connector, msg->type, (void*) msg, NULL);
		}
	}

	region16_uninit(&region);

	return 0;
}