Fix "type punning" warning in printing floats (#33)

Signed-off-by: Erik Boasson <eb@ilities.com>
This commit is contained in:
eboasson 2019-09-13 12:12:16 +02:00 committed by GitHub
parent 3edf332573
commit 44e61e20e0
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23

View file

@ -411,18 +411,22 @@ public:
} }
inline void print(float & x) inline void print(float & x)
{ {
union { uint32_t u; float f; } tmp;
align(sizeof(x)); align(sizeof(x));
uint32_t z = *reinterpret_cast<const uint32_t *>(data + pos); tmp.u = *reinterpret_cast<const uint32_t *>(data + pos);
if (swap_bytes) {z = bswap4u(z);} if (swap_bytes) {tmp.u = bswap4u(tmp.u);}
prtf(&buf, &bufsize, "%f", *reinterpret_cast<float *>(&z)); static_cast<void>(tmp.u);
prtf(&buf, &bufsize, "%f", tmp.f);
pos += sizeof(x); pos += sizeof(x);
} }
inline void print(double & x) inline void print(double & x)
{ {
union { uint64_t u; double f; } tmp;
align(sizeof(x)); align(sizeof(x));
uint64_t z = *reinterpret_cast<const uint64_t *>(data + pos); tmp.u = *reinterpret_cast<const uint64_t *>(data + pos);
if (swap_bytes) {z = bswap8u(z);} if (swap_bytes) {tmp.u = bswap8u(tmp.u);}
prtf(&buf, &bufsize, "%f", *reinterpret_cast<double *>(&z)); static_cast<void>(tmp.u);
prtf(&buf, &bufsize, "%f", tmp.f);
pos += sizeof(x); pos += sizeof(x);
} }
inline uint32_t get32() inline uint32_t get32()