1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
|
/* ISC license. */
#ifndef RRANDOM_H
#define RRANDOM_H
#include <skalibs/unirandom.h>
typedef struct rrandominfo rrandominfo, *rrandominfo_ref, **rrandominfo_ref_ref ;
struct rrandominfo
{
unirandom it ;
unsigned int ok ;
} ;
#define RRANDOMINFO_ZERO { .it = UNIRANDOM_ZERO, .ok = 3 }
typedef struct rrandom rrandom, *rrandom_ref, **rrandom_ref_ref ;
struct rrandom
{
rrandominfo tries[3] ;
unsigned int n ;
} ;
#define RRANDOM_ZERO { .tries = { RRANDOMINFO_ZERO, RRANDOMINFO_ZERO, RRANDOMINFO_ZERO }, .n = 0 }
extern int rrandom_add (rrandom *, int (*) (unirandom *)) ;
extern int rrandom_finish (rrandom *) ;
extern unsigned int rrandom_read (rrandom *, char *, unsigned int, unsigned int (*) (unirandom *, char *, unsigned int)) ;
extern unsigned int rrandom_readint (rrandom *, unsigned int, unsigned int (*) (unirandom *, char *, unsigned int)) ;
#define rrandom_readb(z, s, n) rrandom_read((z), (s), (n), &unirandom_readb)
#define rrandom_readnb(z, s, n) rrandom_read((z), (s), (n), &unirandom_readnb)
extern unsigned int rrandom_name (rrandom *, char *, unsigned int, int) ;
#endif
|