diff options
Diffstat (limited to 'src/noise.cpp')
-rw-r--r-- | src/noise.cpp | 35 |
1 files changed, 10 insertions, 25 deletions
diff --git a/src/noise.cpp b/src/noise.cpp index c36b33db8..bb7c9969e 100644 --- a/src/noise.cpp +++ b/src/noise.cpp @@ -123,35 +123,20 @@ s32 PcgRandom::range(s32 min, s32 max) void PcgRandom::bytes(void *out, size_t len) { - u32 r; u8 *outb = (u8 *)out; + int bytes_left = 0; + u32 r; - size_t len_alignment = (uintptr_t)out % sizeof(u32); - if (len_alignment) { - len -= len_alignment; - r = next(); - while (len_alignment--) { - *outb = r & 0xFF; - outb++; - r >>= 8; + while (len--) { + if (bytes_left == 0) { + bytes_left = sizeof(u32); + r = next(); } - } - size_t len_dwords = len / sizeof(u32); - while (len_dwords--) { - r = next(); - *(u32 *)outb = next(); - outb += sizeof(u32); - } - - size_t len_remaining = len % sizeof(u32); - if (len_remaining) { - r = next(); - while (len_remaining--) { - *outb = r & 0xFF; - outb++; - r >>= 8; - } + *outb = r & 0xFF; + outb++; + bytes_left--; + r >>= 8; } } |