… | |
… | |
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 | #if __cplusplus |
|
|
379 | template<typename T> |
|
|
380 | static inline T ecb_div_rd (T val, T div) |
|
|
381 | { |
|
|
382 | return val < 0 ? - ((-val + div - 1) / div) : (val ) / div; |
|
|
383 | } |
|
|
384 | template<typename T> |
|
|
385 | static inline T ecb_div_ru (T val, T div) |
|
|
386 | { |
|
|
387 | return val < 0 ? - ((-val ) / div) : (val + div - 1) / div; |
|
|
388 | } |
|
|
389 | #else |
378 | #define ecb_div_rd(val,div) ((val) < 0 ? - ((-(val) + (div) - 1) / (div)) : ((val) ) / (div)) |
390 | #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)) |
391 | #define ecb_div_ru(val,div) ((val) < 0 ? - ((-(val) ) / (div)) : ((val) + (div) - 1) / (div)) |
|
|
392 | #endif |
380 | |
393 | |
381 | #if ecb_cplusplus_does_not_suck |
394 | #if ecb_cplusplus_does_not_suck |
382 | /* does not work for local types (http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2008/n2657.htm) */ |
395 | /* does not work for local types (http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2008/n2657.htm) */ |
383 | template<typename T, int N> |
396 | template<typename T, int N> |
384 | static inline int ecb_array_length (const T (&arr)[N]) |
397 | static inline int ecb_array_length (const T (&arr)[N]) |