forked from filebench/filebench
-
Notifications
You must be signed in to change notification settings - Fork 0
/
fb_random.h
104 lines (92 loc) · 2.84 KB
/
fb_random.h
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
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
/*
* CDDL HEADER START
*
* The contents of this file are subject to the terms of the
* Common Development and Distribution License (the "License").
* You may not use this file except in compliance with the License.
*
* You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
* or http://www.opensolaris.org/os/licensing.
* See the License for the specific language governing permissions
* and limitations under the License.
*
* When distributing Covered Code, include this CDDL HEADER in each
* file and include the License file at usr/src/OPENSOLARIS.LICENSE.
* If applicable, add the following below this CDDL HEADER, with the
* fields enclosed by brackets "[]" replaced with your own identifying
* information: Portions Copyright [yyyy] [name of copyright owner]
*
* CDDL HEADER END
*/
/*
* Copyright 2008 Sun Microsystems, Inc. All rights reserved.
* Use is subject to license terms.
*/
#ifndef _FB_RANDOM_H
#define _FB_RANDOM_H
#pragma ident "%Z%%M% %I% %E% SMI"
#include "filebench.h"
/*
* probability table entry, used while parsing the supplied
* probability table
*/
typedef struct probtabent {
struct probtabent *pte_next;
avd_t pte_percent;
avd_t pte_segmin;
avd_t pte_segmax;
} probtabent_t;
/*
* The supplied probability table is converted into a probability funtion
* lookup table at initialization time. This is the definition for each
* entry in the table.
*/
typedef struct randfunc {
double rf_base;
double rf_range;
} randfunc_t;
/* Number of entries in the probability function table */
#define PF_TAB_SIZE 100
/*
* Random Distribution definition object. Includes a pointer to the
* appropriate function to access the distribution defined by the object,
* as well as a function pointer to the specified source of random
* numbers.
*/
typedef struct randdist {
double (*rnd_get)(struct randdist *);
double (*rnd_src)(unsigned short *);
struct randdist *rnd_next;
avd_t rnd_seed;
avd_t rnd_mean;
avd_t rnd_gamma;
avd_t rnd_min;
avd_t rnd_round;
double rnd_dbl_mean;
double rnd_dbl_gamma;
fbint_t rnd_vint_min;
fbint_t rnd_vint_round;
probtabent_t *rnd_probtabs;
randfunc_t rnd_rft[PF_TAB_SIZE];
uint16_t rnd_xi[3];
uint16_t rnd_type;
} randdist_t;
#define RAND_TYPE_UNIFORM 0x1
#define RAND_TYPE_GAMMA 0x2
#define RAND_TYPE_TABLE 0x3
#define RAND_TYPE_MASK 0x0fff
#define RAND_SRC_URANDOM 0x0000
#define RAND_SRC_GENERATOR 0x1000
#define RAND_PARAM_TYPE 1
#define RAND_PARAM_SRC 2
#define RAND_PARAM_SEED 3
#define RAND_PARAM_MIN 4
#define RAND_PARAM_MEAN 5
#define RAND_PARAM_GAMMA 6
#define RAND_PARAM_ROUND 7
/* Function declarations */
extern void fb_random64(uint64_t *, uint64_t, uint64_t, avd_t);
extern void fb_random32(uint32_t *, uint32_t, uint32_t, avd_t);
extern randdist_t *randdist_alloc(void);
extern void randdist_init(randdist_t *rndp);
#endif /* _FB_RANDOM_H */