Use {f32,f64}::{from_bits,to_bits} instead of unsafe transmute.

These APIs were stabilized in Rust 1.20.0.
This commit is contained in:
KAMADA Ken'ichi 2018-04-20 22:16:21 +09:00
parent 7fcd64b40b
commit bbca6ea229
2 changed files with 4 additions and 6 deletions

View File

@ -25,7 +25,6 @@
//
use std::fmt;
use std::mem;
use endian::Endian;
@ -404,7 +403,7 @@ fn parse_float<'a, E>(data: &'a [u8], offset: usize, count: usize)
-> Value<'a> where E: Endian {
let mut val = Vec::with_capacity(count);
for i in 0..count {
val.push(unsafe { mem::transmute(E::loadu32(data, offset + i * 4)) });
val.push(f32::from_bits(E::loadu32(data, offset + i * 4)));
}
Value::Float(val)
}
@ -414,7 +413,7 @@ fn parse_double<'a, E>(data: &'a [u8], offset: usize, count: usize)
-> Value<'a> where E: Endian {
let mut val = Vec::with_capacity(count);
for i in 0..count {
val.push(unsafe { mem::transmute(E::loadu64(data, offset + i * 8)) });
val.push(f64::from_bits(E::loadu64(data, offset + i * 8)));
}
Value::Double(val)
}

View File

@ -26,7 +26,6 @@
use std::io;
use std::io::{Seek, SeekFrom, Write};
use std::mem;
use std::slice;
use endian::{Endian, BigEndian, LittleEndian};
@ -559,14 +558,14 @@ fn compose_value<E>(value: &Value)
Value::Float(ref vec) => {
let mut buf = Vec::new();
for &v in vec {
E::writeu32(&mut buf, unsafe { mem::transmute(v) })?;
E::writeu32(&mut buf, v.to_bits())?;
}
Ok((11, vec.len(), buf))
},
Value::Double(ref vec) => {
let mut buf = Vec::new();
for &v in vec {
E::writeu64(&mut buf, unsafe { mem::transmute(v) })?;
E::writeu64(&mut buf, v.to_bits())?;
}
Ok((12, vec.len(), buf))
},