} //#define ST2 m_precompiled[ptr-2].value() //#define OP(OP, ADJ, EXPR) \ // case OP: \ // if (ADJ == 2) {\ // if (m_precompiled[ptr-3].cmd() == PUSH_CONST && m_precompiled[ptr-2].cmd() == PUSH_CONST && m_precompiled[ptr-1].cmd() == PUSH_CONST) \ // { ptr--; m_precompiled[ptr-2] = rpn_inst(EXPR); n -= 3; ptr++; std::copy(m_precompiled.begin()+(ptr+1), m_precompiled.end(), m_precompiled.begin()+(ptr-2)); ptr-=2;} \ // else { ptr++; } \ // } else if (ADJ == 1) {\ // if (m_precompiled[ptr-2].cmd() == PUSH_CONST && m_precompiled[ptr-1].cmd() == PUSH_CONST) \ // { m_precompiled[ptr-2] = rpn_inst(EXPR); n -= 2; std::copy(m_precompiled.begin()+(ptr+1), m_precompiled.end(), m_precompiled.begin()+(ptr-1)); ptr--;} \ // else { ptr++; } \ // } else if (ADJ == 0) {\ // if (m_precompiled[ptr-1].cmd() == PUSH_CONST) \ // { ptr++; m_precompiled[ptr-2] = rpn_inst(EXPR); n -= 1; ptr--; std::copy(m_precompiled.begin()+(ptr+1), m_precompiled.end(), m_precompiled.begin()+(ptr)); } \ // else { ptr++; } \ // } else ptr++; \ // break; void compress_OP(ref unsigned ptr, ref size_t n, int ADJ, NT EXPR) { if (ADJ == 2) { if (m_precompiled[ptr - 3].cmd() == rpn_cmd.PUSH_CONST && m_precompiled[ptr - 2].cmd() == rpn_cmd.PUSH_CONST && m_precompiled[ptr - 1].cmd() == rpn_cmd.PUSH_CONST) { ptr--; m_precompiled[ptr - 2] = new rpn_inst(EXPR); n -= 3; ptr++; m_precompiled.CopyTo((int)ptr + 1, m_precompiled, (int)ptr - 2, ((int)ptr + 1) - m_precompiled.Count); ptr -= 2; } else { ptr++; } } else if (ADJ == 1) { if (m_precompiled[ptr - 2].cmd() == rpn_cmd.PUSH_CONST && m_precompiled[ptr - 1].cmd() == rpn_cmd.PUSH_CONST) { m_precompiled[ptr - 2] = new rpn_inst(EXPR); n -= 2; m_precompiled.CopyTo((int)ptr + 1, m_precompiled, (int)ptr - 1, ((int)ptr + 1) - m_precompiled.Count); ptr--; } else { ptr++; } } else if (ADJ == 0) { if (m_precompiled[ptr - 1].cmd() == rpn_cmd.PUSH_CONST) { ptr++; m_precompiled[ptr - 2] = new rpn_inst(EXPR); n -= 1; ptr--; m_precompiled.CopyTo((int)ptr + 1, m_precompiled, (int)ptr, ((int)ptr + 1) - m_precompiled.Count);//std::copy(m_precompiled.begin() + (ptr + 1), m_precompiled.end(), m_precompiled.begin() + (ptr)); } else { ptr++; } } else { ptr++; } }