| #define typeof(a) decltype(a) | #define typeof(a) decltype(a) | ||||
| #endif | #endif | ||||
| #if __cplusplus < 201703L | |||||
| #define abs(x) ({ \ | #define abs(x) ({ \ | ||||
| typeof(x) _x = (x); \ | typeof(x) _x = (x); \ | ||||
| (_x > 0) ? _x : -_x; \ | (_x > 0) ? _x : -_x; \ | ||||
| }) | }) | ||||
| #define round(x) \ | |||||
| ({ \ | |||||
| typeof(x) _x = (x); \ | |||||
| (_x >= 0) ? (long)(_x + 0.5) : (long)(_x - 0.5); \ | |||||
| }) | |||||
| #endif | |||||
| #define constrain(amt, low, high) ({ \ | #define constrain(amt, low, high) ({ \ | ||||
| typeof(amt) _amt = (amt); \ | typeof(amt) _amt = (amt); \ | ||||
| typeof(low) _low = (low); \ | typeof(low) _low = (low); \ | ||||
| typeof(high) _high = (high); \ | typeof(high) _high = (high); \ | ||||
| (_amt < _low) ? _low : ((_amt > _high) ? _high : _amt); \ | (_amt < _low) ? _low : ((_amt > _high) ? _high : _amt); \ | ||||
| }) | }) | ||||
| #define round(x) ({ \ | |||||
| typeof(x) _x = (x); \ | |||||
| (_x>=0) ? (long)(_x+0.5) : (long)(_x-0.5); \ | |||||
| }) | |||||
| #define radians(deg) ((deg)*DEG_TO_RAD) | #define radians(deg) ((deg)*DEG_TO_RAD) | ||||
| #define degrees(rad) ((rad)*RAD_TO_DEG) | #define degrees(rad) ((rad)*RAD_TO_DEG) | ||||
| #define sq(x) ({ \ | #define sq(x) ({ \ |