ViewVC Help
View File | Revision Log | Show Annotations | Download File
/cvs/deliantra/server/include/util.h
(Generate patch)

Comparing deliantra/server/include/util.h (file contents):
Revision 1.39 by pippijn, Thu Mar 1 12:28:16 2007 UTC vs.
Revision 1.41 by root, Sat Apr 21 22:57:16 2007 UTC

18 18
19#include <shstr.h> 19#include <shstr.h>
20#include <traits.h> 20#include <traits.h>
21 21
22// use a gcc extension for auto declarations until ISO C++ sanctifies them 22// use a gcc extension for auto declarations until ISO C++ sanctifies them
23#define AUTODECL(var,expr) typeof(expr) var = (expr) 23#define auto(var,expr) typeof(expr) var = (expr)
24 24
25// very ugly macro that basicaly declares and initialises a variable 25// very ugly macro that basicaly declares and initialises a variable
26// that is in scope for the next statement only 26// that is in scope for the next statement only
27// works only for stuff that can be assigned 0 and converts to false 27// works only for stuff that can be assigned 0 and converts to false
28// (note: works great for pointers) 28// (note: works great for pointers)
265 265
266 // uniform distribution 266 // uniform distribution
267 uint32_t operator ()(uint32_t r_max) 267 uint32_t operator ()(uint32_t r_max)
268 { 268 {
269 return is_constant (r_max) 269 return is_constant (r_max)
270 ? this->next () % r_max 270 ? (next () * (uint64_t)r_max) >> 32U
271 : get_range (r_max); 271 : get_range (r_max);
272 } 272 }
273 273
274 // return a number within (min .. max) 274 // return a number within (min .. max)
275 int operator () (int r_min, int r_max) 275 int operator () (int r_min, int r_max)
276 { 276 {
277 return is_constant (r_min) && is_constant (r_max) 277 return is_constant (r_min) && is_constant (r_max)
278 ? r_min + (*this) (max (r_max - r_min + 1, 1)) 278 ? r_min + operator ()(max (r_max - r_min + 1, 1))
279 : get_range (r_min, r_max); 279 : get_range (r_min, r_max);
280 } 280 }
281 281
282 double operator ()() 282 double operator ()()
283 { 283 {

Diff Legend

Removed lines
+ Added lines
< Changed lines
> Changed lines