summaryrefslogtreecommitdiff
path: root/src/include/skalibs/rrandom.h
blob: 0678523123b871a1e8cf3248cf72d0b8b5fbe839 (plain)
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