--- deliantra/server/include/util.h 2010/04/28 19:49:50 1.101 +++ deliantra/server/include/util.h 2010/04/29 21:21:34 1.104 @@ -104,7 +104,11 @@ 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); } +inline sint8 sign (sint8 v) { return 1 - (sint8 (uint8 (v) >> 7) * 2); } +template<> +inline sint16 sign (sint16 v) { return 1 - (sint16 (uint16 (v) >> 15) * 2); } +template<> +inline sint32 sign (sint32 v) { return 1 - (sint32 (uint32 (v) >> 31) * 2); } // sign0 returns -1, 0 or +1 template @@ -484,7 +488,7 @@ // return a number within the closed interval [min .. max] int operator () (int r_min, int r_max) { - return is_constant (r_min) && is_constant (r_max) && r_min <= r_max + return is_constant (r_min <= r_max) && r_min <= r_max ? r_min + operator ()(r_max - r_min + 1) : get_range (r_min, r_max); } @@ -574,6 +578,7 @@ typedef refptr arch_ptr; typedef refptr client_ptr; typedef refptr player_ptr; +typedef refptr region_ptr; #define STRHSH_NULL 2166136261