--- deliantra/server/include/util.h 2007/04/16 15:41:27 1.40 +++ deliantra/server/include/util.h 2007/04/23 18:09:57 1.43 @@ -264,18 +264,18 @@ uint32_t next (); // uniform distribution - uint32_t operator ()(uint32_t r_max) + uint32_t operator ()(uint32_t num) { - return is_constant (r_max) - ? this->next () % r_max - : get_range (r_max); + return is_constant (num) + ? (next () * (uint64_t)num) >> 32U + : get_range (num); } // return a number within (min .. max) int operator () (int r_min, int r_max) { - return is_constant (r_min) && is_constant (r_max) - ? r_min + (*this) (max (r_max - r_min + 1, 1)) + return is_constant (r_min) && is_constant (r_max) && r_min <= r_max + ? r_min + operator ()(r_max - r_min + 1) : get_range (r_min, r_max); } @@ -436,5 +436,8 @@ int similar_direction (int a, int b); +// like printf, but returns a std::string +const std::string format (const char *format, ...); + #endif