Exemple #1
0
static char* gdi_convert_postfix_to_infix(const char* postfix)
{
	int i;
	int length;
	BOOL unary;
	wStack* stack;
	int al, bl, cl, dl;
	char* a, *b, *c, *d;
	bl = cl = dl = 0;
	stack = Stack_New(FALSE);
	length = strlen(postfix);

	for (i = 0; i < length; i++)
	{
		if ((postfix[i] == 'P') || (postfix[i] == 'D') || (postfix[i] == 'S'))
		{
			/* token is an operand, push on the stack */
			a = malloc(2);
			a[0] = postfix[i];
			a[1] = '\0';
			//printf("Operand: %s\n", a);
			Stack_Push(stack, a);
		}
		else
		{
			/* token is an operator */
			unary = FALSE;
			c = malloc(2);
			c[0] = postfix[i];
			c[1] = '\0';

			if (c[0] == 'a')
			{
				c[0] = '&';
			}
			else if (c[0] == 'o')
			{
				c[0] = '|';
			}
			else if (c[0] == 'n')
			{
				c[0] = '~';
				unary = TRUE;
			}
			else if (c[0] == 'x')
			{
				c[0] = '^';
			}
			else
			{
				printf("invalid operator: %c\n", c[0]);
			}

			//printf("Operator: %s\n", c);
			a = (char*) Stack_Pop(stack);

			if (unary)
				b = NULL;
			else
				b = (char*) Stack_Pop(stack);

			al = strlen(a);

			if (b)
				bl = strlen(b);

			cl = 1;
			dl = al + bl + cl + 3;
			d = malloc(dl + 1);
			sprintf_s(d, dl, "(%s%s%s)", b ? b : "", c, a);
			Stack_Push(stack, d);
			free(a);
			free(b);
			free(c);
		}
	}

	d = (char*) Stack_Pop(stack);
	Stack_Free(stack);
	return d;
}
Exemple #2
0
void AsyncStack_Uninitialize(AsyncStack* self) {
	assert(self != NULL);
	Stack_Free(self->BaseStack);
	SAL_Mutex_Free(&self->Lock);
}