deadbeef_rand_c.h 687 B

1234567891011121314151617181920212223
  1. #include "deadbeef_rand.h"
  2. #include <time.h>
  3. static uint32_t deadbeef_seed;
  4. static uint32_t deadbeef_beef = 0xdeadbeef;
  5. uint32_t deadbeef_rand(void) {
  6. deadbeef_seed = (deadbeef_seed << 7) ^ ((deadbeef_seed >> 25) + deadbeef_beef);
  7. deadbeef_beef = (deadbeef_beef << 7) ^ ((deadbeef_beef >> 25) + 0xdeadbeef);
  8. return deadbeef_seed;
  9. }
  10. void deadbeef_srand(uint32_t x) {
  11. deadbeef_seed = x;
  12. deadbeef_beef = 0xdeadbeef;
  13. }
  14. /* Taken directly from the documentation: http://inglorion.net/software/cstuff/deadbeef_rand/ */
  15. uint32_t deadbeef_generate_seed(void) {
  16. uint32_t t = (uint32_t)time(NULL);
  17. uint32_t c = (uint32_t)clock();
  18. return (t << 24) ^ (c << 11) ^ t ^ (size_t) &c;
  19. }