Example #1
0
int main (int argc, char *argv[])
{
	ASSERT (31 == ((1 << TreeHeight) - 1));
	ASSERT (4096 == strlen (FarewellAddress));

        XDR xdrIn, xdrOut;
        char buf[BufSize];

	CertificateHeader header;
        IdentityCertificate inCert, outCert;
	inCert.header = header;
	inCert.subject = strdup (HelloWorld);
	outCert.subject = NULL;

        Torture inTorture, outTorture;
	inTorture.p = malloc (sizeof (uint32_t));
	inTorture.t = strdup (HelloWorld);
	outTorture.p = NULL;
	outTorture.t = NULL;

	TreeNode *inTreeNode = treeBuild (TreeHeight), outTreeNode;

        xdrmem_create (&xdrIn, buf, BufSize, XDR_ENCODE);
        xdrmem_create (&xdrOut, buf, BufSize, XDR_DECODE);

	printf ("\n");
	printf ("Encode benchmarks:\n");

	BME ("32-bit Integer", xdrIn, Uint32, 0);
	BME ("64-bit Integer", xdrIn, Uint64, 0);
	BME ("32-bit Float", xdrIn, Float32, 0);
	BME ("64-bit Float", xdrIn, Float64, 0);
	BME ("Pointer", xdrIn, UintPtr, malloc (1));
	BME ("4096-byte String", xdrIn, String, strdup(FarewellAddress));
	benchmarkEncodeUint32Array (xdrIn);
	BME ("Certificate", xdrIn, IdentityCertificate, inCert);
	BME ("Torture", xdrIn, Torture, inTorture);
	BME ("32-node Tree", xdrIn, TreeNode, *inTreeNode);

	printf ("\n");
	printf ("Decode benchmarks:\n");

	BMD ("32-bit Integer", xdrIn, xdrOut, Uint32, 0, 0);
	BMD ("64-bit Integer", xdrIn, xdrOut, Uint64, 0, 0);
	BMD ("32-bit Float", xdrIn, xdrOut, Float32, 0, 0);
	BMD ("64-bit Float", xdrIn, xdrOut, Float64, 0, 0);
	BMD ("Pointer", xdrIn, xdrOut, UintPtr, malloc (1), NULL);
	BMD ("4096-byte String", xdrIn, xdrOut, String, strdup(FarewellAddress), NULL);
	benchmarkDecodeUint32Array (xdrIn, xdrOut);
	BMD ("Certificate", xdrIn, xdrOut, IdentityCertificate, inCert, outCert);
	BMD ("Torture", xdrIn, xdrOut, Torture, inTorture, outTorture);
	BMD ("32-node Tree", xdrIn, xdrOut, TreeNode, *inTreeNode, outTreeNode);

        xdr_destroy (&xdrIn);
        xdr_destroy (&xdrOut);

	exit (EXIT_SUCCESS);
}
Example #2
0
void treeBuild(Node **node, Stack *st)
{
	Token token;

	if (stackEmpty(st))
		return;

	token = stackTop(st);

	stackPop(st);

	(*node) = treeNodeCreate();
	(*node)->_varOp = token._varOp;
	(*node)->_num = token._num;

	if (isOp((*node)->_varOp))
	{
		treeBuild(&(*node)->_right, st);
		treeBuild(&(*node)->_left, st);
	}
}
Example #3
0
TreeNode *
treeBuild (uint32_t height)
{
	ASSERT(height > 0);

	static uint32_t nodeId = 0;
	TreeNode *node = malloc (sizeof (TreeNode));

	height--;

	node->id = nodeId++;

	if (height > 0) {
		node->left  = treeBuild (height);
		node->right = treeBuild (height);
	} else {
		node->left  = NULL;
		node->right = NULL;
	}

	return node;
}
Example #4
0
int main(void)
{
	int action;
	char expr[255];
	Node *root = NULL, *root2 = NULL;
	Stack stPost;

	while (1)
	{
		printf("Меню:\n");
		printf("1) Ввести выражение\n");
		printf("2) Печать исходного выражения\n");
		printf("3) Печать преобразованного выражения\n");
		printf("4) Печать исходного дерева\n");
		printf("5) Печать преобразованного дерева\n");
		printf("6) Выход\n");
		printf("Выберите действие: ");
		scanf("%d", &action);

		switch (action)
		{
			case 1:
			{
				printf("Введите выражение: ");
				scanf("%s", expr);

				treeDestroy(&root);
				treeDestroy(&root2);
				stackCreate(&stPost);
				postOrder(expr, &stPost);
				treeBuild(&root, &stPost);
				stackDestroy(&stPost);
				
				root2 = treeCopy(&root);
				
				treeMoveMinus(&root2);

				break;
			}

			case 2:
			{
				printf("Исходное выражение: %s\n", expr);

				break;
			}

			case 3:
			{
				LKP(&root2);
				printf("\n");

				break;
			}

			case 4:
			{
				if (root != NULL)
				{
					printf("Дерево исходного выражения\n");
					PKL(&root, 0);
				}
				else
					printf("Дерево исходного выражения пусто\n");

				break;
			}

			case 5:
			{
				if (root2 != NULL)
				{
					printf("Дерево преобразованного выражения\n");
					PKL(&root2, 0);
				}
				else
					printf("Дерево преобразованного выражения пусто\n");

				break;
			}

			case 6: break;

			default:
			{
				printf("Ошибка. Такого пункта меню не существует\n");

				break;
			}
		}

		if (action == 6)
			break;
	}

	treeDestroy(&root);
	treeDestroy(&root2);

	return 0;	
}