source: MondoRescue/branches/3.3/mindi-busybox/shell/random.h@ 3647

Last change on this file since 3647 was 3621, checked in by Bruno Cornec, 10 years ago

New 3?3 banch for incorporation of latest busybox 1.25. Changing minor version to handle potential incompatibilities.

  • Property svn:eol-style set to native
File size: 871 bytes
Line 
1/* vi: set sw=4 ts=4: */
2/*
3 * $RANDOM support.
4 *
5 * Copyright (C) 2009 Denys Vlasenko
6 *
7 * Licensed under GPLv2, see file LICENSE in this source tree.
8 */
9#ifndef SHELL_RANDOM_H
10#define SHELL_RANDOM_H 1
11
12PUSH_AND_SET_FUNCTION_VISIBILITY_TO_HIDDEN
13
14typedef struct random_t {
15 /* State of random number generators: */
16
17 /* Galois LFSR (fast but weak) */
18 int32_t galois_LFSR; /* must be signed! */
19
20 /* LCG (fast but weak) */
21 uint32_t LCG;
22
23 /* 64-bit xorshift (fast, moderate strength) */
24 uint32_t xs64_x;
25 uint32_t xs64_y;
26} random_t;
27
28#define UNINITED_RANDOM_T(rnd) \
29 ((rnd)->galois_LFSR == 0)
30
31#define INIT_RANDOM_T(rnd, nonzero, v) \
32 ((rnd)->galois_LFSR = (rnd)->xs64_x = (nonzero), (rnd)->LCG = (rnd)->xs64_y = (v))
33
34#define CLEAR_RANDOM_T(rnd) \
35 ((rnd)->galois_LFSR = 0)
36
37uint32_t next_random(random_t *rnd) FAST_FUNC;
38
39POP_SAVED_FUNCTION_VISIBILITY
40
41#endif
Note: See TracBrowser for help on using the repository browser.