You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

55 lines
1.3 KiB

25 years ago
25 years ago
25 years ago
25 years ago
25 years ago
25 years ago
25 years ago
25 years ago
25 years ago
25 years ago
25 years ago
25 years ago
  1. // Public random number operations.
  2. #ifndef _CL_RANDOM_H
  3. #define _CL_RANDOM_H
  4. #include "cln/types.h"
  5. #include "cln/modules.h"
  6. namespace cln {
  7. class random_state {
  8. public:
  9. struct { uint32 hi; uint32 lo; } seed;
  10. // Constructor:
  11. random_state ();
  12. };
  13. // random32(randomstate) liefert eine neue Zufallszahl.
  14. // > randomstate: ein Random-State, wird verändert
  15. // < ergebnis: eine 32-Bit-Zufallszahl
  16. extern uint32 random32 (random_state& randomstate);
  17. #if defined(HAVE_FAST_LONGLONG)
  18. // random64(randomstate) liefert eine neue Zufallszahl.
  19. // > randomstate: ein Random-State, wird verändert
  20. // < ergebnis: eine 64-Bit-Zufallszahl
  21. inline uint64 random64 (random_state& randomstate)
  22. {
  23. return ((uint64)random32(randomstate) << 32)
  24. | (uint64)random32(randomstate);
  25. }
  26. #endif
  27. // Ein globaler Zufallszahlengenerator.
  28. extern random_state default_random_state;
  29. class cl_random_def_init_helper
  30. {
  31. static int count;
  32. public:
  33. cl_random_def_init_helper();
  34. ~cl_random_def_init_helper();
  35. };
  36. static cl_random_def_init_helper cl_random_def_init_helper_instance;
  37. // Das ist der Default-Generator.
  38. inline uint32 random32 (void)
  39. { return random32(default_random_state); }
  40. #if defined(HAVE_FAST_LONGLONG)
  41. inline uint64 random64 (void)
  42. { return random64(default_random_state); }
  43. #endif
  44. } // namespace cln
  45. #endif /* _CL_RANDOM_H */