diff --git a/api/Common.h b/api/Common.h index 6e12a74c..bacae0b0 100644 --- a/api/Common.h +++ b/api/Common.h @@ -37,20 +37,63 @@ typedef enum { #define SERIAL 0x0 #define DISPLAY 0x1 -#ifndef constrain -#define constrain(amt,low,high) ((amt)<(low)?(low):((amt)>(high)?(high):(amt))) -#endif -#ifndef radians -#define radians(deg) ((deg)*DEG_TO_RAD) -#endif +#ifdef __cplusplus +} // extern "C" -#ifndef degrees -#define degrees(rad) ((rad)*RAD_TO_DEG) + template + auto constrain(const T& amt, const U& low, const V& high) -> decltype(amt < low ? low : (amt > high ? high : amt)) + { + return amt < low ? low : (amt > high ? high : amt); + } + + template + auto radians(const T& deg) -> decltype(deg * DEG_TO_RAD) + { + return deg * DEG_TO_RAD; + } + + template + auto degrees(const T& rad) -> decltype(rad * RAD_TO_DEG) + { + return rad * RAD_TO_DEG; + } + + template + auto sq(const T& x) -> decltype(x*x) + { + return x*x; + } +#else + #ifndef constrain + #define constrain(amt,low,high) \ + ({ __typeof__ (amt) _amt = (amt); \ + __typeof__ (low) _low = (low); \ + __typeof__ (high) _high = (high); \ + _amt < _low ? _low : (_amt > _high ? _high :_amt); }) + #endif + + #ifndef radians + #define radians(deg) \ + ({ __typeof__ (deg) _deg = deg; \ + _deg * DEG_TO_RAD; }) + #endif + + #ifndef degrees + #define degrees(rad) \ + ({ __typeof__ (rad) _rad = rad; \ + _rad * RAD_TO_DEG; }) + #endif + + #ifndef sq + #define sq(x) \ + ({ __typeof__ (x) _x = x; \ + _x * _x; }) + #endif #endif -#ifndef sq -#define sq(x) ((x)*(x)) +#ifdef __cplusplus +extern "C" { #endif typedef void (*voidFuncPtr)(void); @@ -117,33 +160,31 @@ void loop(void); #ifdef __cplusplus } // extern "C" -#endif -#ifdef __cplusplus - template + template auto min(const T& a, const L& b) -> decltype((b < a) ? b : a) { return (b < a) ? b : a; } - template + template auto max(const T& a, const L& b) -> decltype((b < a) ? b : a) { return (a < b) ? b : a; } #else -#ifndef min -#define min(a,b) \ - ({ __typeof__ (a) _a = (a); \ - __typeof__ (b) _b = (b); \ - _a < _b ? _a : _b; }) -#endif -#ifndef max -#define max(a,b) \ - ({ __typeof__ (a) _a = (a); \ - __typeof__ (b) _b = (b); \ - _a > _b ? _a : _b; }) -#endif + #ifndef min + #define min(a,b) \ + ({ __typeof__ (a) _a = (a); \ + __typeof__ (b) _b = (b); \ + _a < _b ? _a : _b; }) + #endif + #ifndef max + #define max(a,b) \ + ({ __typeof__ (a) _a = (a); \ + __typeof__ (b) _b = (b); \ + _a > _b ? _a : _b; }) + #endif #endif #ifdef __cplusplus pFad - Phonifier reborn

Pfad - The Proxy pFad of © 2024 Garber Painting. All rights reserved.

Note: This service is not intended for secure transactions such as banking, social media, email, or purchasing. Use at your own risk. We assume no liability whatsoever for broken pages.


Alternative Proxies:

Alternative Proxy

pFad Proxy

pFad v3 Proxy

pFad v4 Proxy