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; }
void AsyncStack_Uninitialize(AsyncStack* self) { assert(self != NULL); Stack_Free(self->BaseStack); SAL_Mutex_Free(&self->Lock); }