Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <string>
- #include <vector>
- namespace numbers {
- complex eval(const std::vector<std::string> &args, const complex &z) {
- auto it = args.begin(), end = args.end();
- complex_stack stack;
- for (; it != end; ++it) {
- if ((*it)[0] >= 'a' && (*it)[0] <= 'z') {
- stack = stack << z;
- continue;
- }
- complex c1, c2;
- switch ((*it)[0]) {
- case '+':
- c1 = +stack;
- stack = ~stack;
- c2 = +stack;
- stack = ~stack;
- stack = stack << (c1 + c2);
- break;
- case '-':
- c1 = +stack;
- stack = ~stack;
- c2 = +stack;
- stack = ~stack;
- stack = stack << (c1 - c2);
- break;
- case '/':
- c1 = +stack;
- stack = ~stack;
- c2 = +stack;
- stack = ~stack;
- stack = stack << (c1 / c2);
- break;
- case '*':
- c1 = +stack;
- stack = ~stack;
- c2 = +stack;
- stack = ~stack;
- stack = stack << (c1 * c2);
- break;
- case '!':
- c1 = +stack;
- stack = stack << c1;
- break;
- case ';':
- stack = ~stack;
- break;
- case '~':
- c1 = +stack;
- stack = ~stack;
- stack = stack << (~c1);
- break;
- case '#':
- c1 = +stack;
- stack = ~stack;
- stack = stack << (-c1);
- break;
- default:
- stack = stack << complex(*it);
- }
- }
- return +stack;
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement