… | |
… | |
373 | #define ecb_mod(m,n) ((m) % (n) + ((m) % (n) < 0 ? (n) : 0)) |
373 | #define ecb_mod(m,n) ((m) % (n) + ((m) % (n) < 0 ? (n) : 0)) |
374 | #else |
374 | #else |
375 | #define ecb_mod(m,n) ((m) < 0 ? ((n) - 1 - ((-1 - (m)) % (n))) : ((m) % (n))) |
375 | #define ecb_mod(m,n) ((m) < 0 ? ((n) - 1 - ((-1 - (m)) % (n))) : ((m) % (n))) |
376 | #endif |
376 | #endif |
377 | |
377 | |
|
|
378 | #define ecb_div_rd(val,div) ((val) < 0 ? - ((-(val) + (div) - 1) / (div)) : ((val) ) / (div)) |
|
|
379 | #define ecb_div_ru(val,div) ((val) < 0 ? - ((-(val) ) / (div)) : ((val) + (div) - 1) / (div)) |
|
|
380 | |
378 | #if ecb_cplusplus_does_not_suck |
381 | #if ecb_cplusplus_does_not_suck |
379 | /* does not work for local types (http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2008/n2657.htm) */ |
382 | /* does not work for local types (http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2008/n2657.htm) */ |
380 | template<typename T, int N> |
383 | template<typename T, int N> |
381 | static inline int ecb_array_length (const T (&arr)[N]) |
384 | static inline int ecb_array_length (const T (&arr)[N]) |
382 | { |
385 | { |