Fix endianness inconsistency with PcgRandom::bytes()

This commit is contained in:
kwolekr 2015-03-23 21:07:32 -04:00
parent a423202756
commit 9fc2b93d9f

@ -123,38 +123,23 @@ s32 PcgRandom::range(s32 min, s32 max)
void PcgRandom::bytes(void *out, size_t len) void PcgRandom::bytes(void *out, size_t len)
{ {
u32 r;
u8 *outb = (u8 *)out; u8 *outb = (u8 *)out;
int bytes_left = 0;
u32 r;
size_t len_alignment = (uintptr_t)out % sizeof(u32); while (len--) {
if (len_alignment) { if (bytes_left == 0) {
len -= len_alignment; bytes_left = sizeof(u32);
r = next(); r = next();
while (len_alignment--) { }
*outb = r & 0xFF; *outb = r & 0xFF;
outb++; outb++;
bytes_left--;
r >>= 8; r >>= 8;
} }
} }
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;
}
}
}
s32 PcgRandom::randNormalDist(s32 min, s32 max, int num_trials) s32 PcgRandom::randNormalDist(s32 min, s32 max, int num_trials)
{ {