random.h 741 B

123456789101112131415161718192021222324252627282930313233
  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 tarball for details.
  8. */
  9. #ifndef SHELL_RANDOM_H
  10. #define SHELL_RANDOM_H 1
  11. PUSH_AND_SET_FUNCTION_VISIBILITY_TO_HIDDEN
  12. typedef struct random_t {
  13. /* Random number generators */
  14. int32_t galois_LFSR; /* Galois LFSR (fast but weak). signed! */
  15. uint32_t LCG; /* LCG (fast but weak) */
  16. } random_t;
  17. #define UNINITED_RANDOM_T(rnd) \
  18. ((rnd)->galois_LFSR == 0)
  19. #define INIT_RANDOM_T(rnd, nonzero, v) \
  20. ((rnd)->galois_LFSR = (nonzero), (rnd)->LCG = (v))
  21. #define CLEAR_RANDOM_T(rnd) \
  22. ((rnd)->galois_LFSR = 0)
  23. uint32_t next_random(random_t *rnd) FAST_FUNC;
  24. POP_SAVED_FUNCTION_VISIBILITY
  25. #endif