Skip to content
Permalink
Browse files

Fix endianness inconsistency with PcgRandom::bytes()

  • Loading branch information
kwolekr committed Mar 24, 2015
1 parent a423202 commit 9fc2b93d9ff7fdde1695e52aec877e98d5cc1e39
Showing with 10 additions and 25 deletions.
  1. +10 −25 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;
}
}

0 comments on commit 9fc2b93

Please sign in to comment.