#include <iostream>
using namespace std;
using opType = void(*)(int&, int);
const opType ops[3] =
{
[](int& , int ){ cout << "noop" << endl; },
[](int& x, int i){ cout << x << " += " << i << endl; x += i; },
[](int& x, int i){ cout << x << " -= " << i << endl; x -= i; }
};
void doIt(int k, int &x, int i)
{
auto f = ops[int(k > 0) + (2 * int(k < 0))];
f(x, i);
}
int main()
{
int x = 0;
cout << "x = " << x << endl;
doIt(0, x, 1);
doIt(1, x, 5);
doIt(-1, x, 3);
cout << "x = " << x << endl;
return 0;
}
I2luY2x1ZGUgPGlvc3RyZWFtPgp1c2luZyBuYW1lc3BhY2Ugc3RkOwoKdXNpbmcgb3BUeXBlID0gdm9pZCgqKShpbnQmLCBpbnQpOwpjb25zdCBvcFR5cGUgb3BzWzNdID0KewoJW10oaW50JiAgLCBpbnQgICl7IGNvdXQgPDwgIm5vb3AiIDw8IGVuZGw7IH0sCiAgICBbXShpbnQmIHgsIGludCBpKXsgY291dCA8PCB4IDw8ICIgKz0gIiA8PCBpIDw8IGVuZGw7IHggKz0gaTsgfSwKCVtdKGludCYgeCwgaW50IGkpeyBjb3V0IDw8IHggPDwgIiAtPSAiIDw8IGkgPDwgZW5kbDsgeCAtPSBpOyB9Cn07Cgp2b2lkIGRvSXQoaW50IGssIGludCAmeCwgaW50IGkpCnsKCWF1dG8gZiA9IG9wc1tpbnQoayA+IDApICsgKDIgKiBpbnQoayA8IDApKV07CglmKHgsIGkpOwp9CgppbnQgbWFpbigpCnsKCWludCB4ID0gMDsKCWNvdXQgPDwgInggPSAiIDw8IHggPDwgZW5kbDsKCWRvSXQoMCwgeCwgMSk7Cglkb0l0KDEsIHgsIDUpOwoJZG9JdCgtMSwgeCwgMyk7Cgljb3V0IDw8ICJ4ID0gIiA8PCB4IDw8IGVuZGw7CglyZXR1cm4gMDsKfQ==