Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- bool NPVN::EvaluateComparison(char* comp)
- {
- char* c = variables->VariableExpand(comp);
- bool end = false;
- bool unary = true;
- for(int i = 0; i < strlen(c)-1; i++) {
- if (!strncmp(c+i, "==", 2) || !strncmp(c+i, "<=", 2) ||
- !strncmp(c+i, ">=", 2) || !strncmp(c+i, "!=", 2) ||
- !strncmp(c+i, "&&", 2) || !strncmp(c+i, "||", 2)) {
- unary = false;
- break;
- }
- }
- if (unary) {
- bool lnot = false;
- int i = 0;
- if (c[0] == '!') {
- lnot = true;
- i++;
- }
- if (c[i] == '0' || c[i] == '\0')
- end = false;
- else
- end = true;
- if (lnot)
- end = !end;
- }
- else {
- char left[strlen(c)+1];
- char op[4];
- char right[strlen(c)+1];
- memset(left, 0, strlen(c)+1);
- memset(op, 0, 4);
- memset(right, 0, strlen(c)+1);
- int i;
- for(i = 0; i < strlen(c)-1; i++) {
- if (c[i] == '(') {
- i++;
- int l;
- for(l = 0; c[i] != ')'; l++, i++) {
- left[l] = c[i];
- }
- i++;
- break;
- }
- if (!strncmp(c+i, "==", 2) || !strncmp(c+i, "<=", 2) ||
- !strncmp(c+i, ">=", 2) || !strncmp(c+i, "!=", 2) ||
- !strncmp(c+i, "&&", 2) || !strncmp(c+i, "||", 2)) {
- strncpy(left, c, i);
- for(int n = strlen(left)-1; n > 0; n--) {
- if (left[n] == ' ')
- left[n] = '\0';
- else
- break;
- }
- break;
- }
- }
- for(; c[i] == ' '; i++);
- strncpy(op, c+i, 2);
- i+=2;
- for(; c[i] == ' '; i++);
- int bi = i;
- for(; i < strlen(c)-1; i++) {
- if (c[i] == '(') {
- i++;
- int r;
- for(r = 0; c[i] != ')'; r++, i++) {
- right[r] = c[i];
- }
- i++;
- break;
- }
- }
- if (right[0] == '\0')
- strcpy(right, c+bi);
- if (!strncmp(op, "==", 2)) {
- end = !strcmp(left, right);
- }
- else if (!strncmp(op, "!=", 2)) {
- }
- else if (!strncmp(op, "<=", 2)) {
- }
- else if (!strncmp(op, ">=", 2)) {
- }
- else if (!strncmp(op, "&&", 2)) {
- bool l = EvaluateComparison(left);
- bool r = EvaluateComparison(right);
- end = l && r;
- }
- else if (!strncmp(op, "||", 2)) {
- bool l = EvaluateComparison(left);
- bool r = EvaluateComparison(right);
- end = l || r;
- }
- }
- delete[] c;
- return end;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement