Advertisement
Guest User

Untitled

a guest
Jun 25th, 2017
60
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.99 KB | None | 0 0
  1. bool NPVN::EvaluateComparison(char* comp)
  2. {
  3. char* c = variables->VariableExpand(comp);
  4. bool end = false;
  5. bool unary = true;
  6. for(int i = 0; i < strlen(c)-1; i++) {
  7. if (!strncmp(c+i, "==", 2) || !strncmp(c+i, "<=", 2) ||
  8. !strncmp(c+i, ">=", 2) || !strncmp(c+i, "!=", 2) ||
  9. !strncmp(c+i, "&&", 2) || !strncmp(c+i, "||", 2)) {
  10. unary = false;
  11. break;
  12. }
  13. }
  14. if (unary) {
  15. bool lnot = false;
  16. int i = 0;
  17. if (c[0] == '!') {
  18. lnot = true;
  19. i++;
  20. }
  21.  
  22. if (c[i] == '0' || c[i] == '\0')
  23. end = false;
  24. else
  25. end = true;
  26.  
  27. if (lnot)
  28. end = !end;
  29. }
  30. else {
  31. char left[strlen(c)+1];
  32. char op[4];
  33. char right[strlen(c)+1];
  34. memset(left, 0, strlen(c)+1);
  35. memset(op, 0, 4);
  36. memset(right, 0, strlen(c)+1);
  37. int i;
  38. for(i = 0; i < strlen(c)-1; i++) {
  39. if (c[i] == '(') {
  40. i++;
  41. int l;
  42. for(l = 0; c[i] != ')'; l++, i++) {
  43. left[l] = c[i];
  44. }
  45. i++;
  46. break;
  47. }
  48. if (!strncmp(c+i, "==", 2) || !strncmp(c+i, "<=", 2) ||
  49. !strncmp(c+i, ">=", 2) || !strncmp(c+i, "!=", 2) ||
  50. !strncmp(c+i, "&&", 2) || !strncmp(c+i, "||", 2)) {
  51. strncpy(left, c, i);
  52. for(int n = strlen(left)-1; n > 0; n--) {
  53. if (left[n] == ' ')
  54. left[n] = '\0';
  55. else
  56. break;
  57. }
  58. break;
  59. }
  60. }
  61. for(; c[i] == ' '; i++);
  62. strncpy(op, c+i, 2);
  63. i+=2;
  64. for(; c[i] == ' '; i++);
  65. int bi = i;
  66. for(; i < strlen(c)-1; i++) {
  67. if (c[i] == '(') {
  68. i++;
  69. int r;
  70. for(r = 0; c[i] != ')'; r++, i++) {
  71. right[r] = c[i];
  72. }
  73. i++;
  74. break;
  75. }
  76. }
  77. if (right[0] == '\0')
  78. strcpy(right, c+bi);
  79.  
  80. if (!strncmp(op, "==", 2)) {
  81. end = !strcmp(left, right);
  82. }
  83. else if (!strncmp(op, "!=", 2)) {
  84.  
  85. }
  86. else if (!strncmp(op, "<=", 2)) {
  87.  
  88. }
  89. else if (!strncmp(op, ">=", 2)) {
  90.  
  91. }
  92. else if (!strncmp(op, "&&", 2)) {
  93. bool l = EvaluateComparison(left);
  94. bool r = EvaluateComparison(right);
  95.  
  96. end = l && r;
  97. }
  98. else if (!strncmp(op, "||", 2)) {
  99. bool l = EvaluateComparison(left);
  100. bool r = EvaluateComparison(right);
  101.  
  102. end = l || r;
  103. }
  104. }
  105.  
  106. delete[] c;
  107. return end;
  108. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement