12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758 |
- /*
- * fast pseudo random generation
- *
- * $Id$
- *
- * Copyright (C) 2007 iptelorg GmbH
- *
- * Permission to use, copy, modify, and distribute this software for any
- * purpose with or without fee is hereby granted, provided that the above
- * copyright notice and this permission notice appear in all copies.
- *
- * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
- * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
- * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
- * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
- * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
- * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
- * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
- */
- /*
- *History:
- *--------
- * 2007-06-15 wrapper around isaac (see
- * http://www.burtleburtle.net/bob/rand/isaacafa.html) (andrei)
- */
- #include "fastrand.h"
- #include <stdlib.h>
- #include "isaac/rand.h"
- #define FASTRAND_MAX ((unsigned int)(-1))
- static randctx is_ctx;
- /* side effect: seeds also random w/ seed */
- void fastrand_seed(unsigned int seed)
- {
- int i;
-
- srandom(seed);
- for (i=0; i<RANDSIZ; i++)
- is_ctx.randrsl[i]=random();
- randinit(&is_ctx, 1);
- }
- unsigned int fastrand()
- {
- return rand(&is_ctx);
- }
- /* generate a random number between 0 and max ( 0 <=r<=max) */
- unsigned int fastrand_max(unsigned int max)
- {
- return fastrand()%(max+1);
- }
|