--- deliantra/server/include/util.h 2008/12/04 03:48:19 1.78 +++ deliantra/server/include/util.h 2008/12/19 22:47:29 1.79 @@ -107,6 +107,17 @@ template static inline T min (T a, U b, V c) { return min (a, min (b, c)); } template static inline T max (T a, U b, V c) { return max (a, max (b, c)); } +// sign returns -1 or +1 +template +static inline T sign (T v) { return v < 0 ? -1 : +1; } +// relies on 2c representation +template<> +inline sint8 sign (sint8 v) { return 1 - (sint8 (uint8 (v) >> 7) * 2); } + +// sign0 returns -1, 0 or +1 +template +static inline T sign0 (T v) { return v ? sign (v) : 0; } + // div, with correct rounding (< 0.5 downwards, >=0.5 upwards) template static inline T div (T val, T div) { return (val + div / 2) / div; } // div, round-up