You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
kamailio/rand/fastrand.c

57 lines
1.4 KiB

/*
* fast pseudo random generation
*
* 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);
}