aboutsummaryrefslogtreecommitdiff
path: root/src/io.rs
diff options
context:
space:
mode:
Diffstat (limited to 'src/io.rs')
-rw-r--r--src/io.rs95
1 files changed, 41 insertions, 54 deletions
diff --git a/src/io.rs b/src/io.rs
index ed6a848..dfad2ca 100644
--- a/src/io.rs
+++ b/src/io.rs
@@ -1,7 +1,9 @@
-use std::io::{self, Result};
-use std::slice;
+use std::{
+ io::{self, Result},
+ slice,
+};
-use ByteOrder;
+use crate::ByteOrder;
/// Extends [`Read`] with methods for reading numbers. (For `std::io`.)
///
@@ -52,7 +54,7 @@ pub trait ReadBytesExt: io::Read {
#[inline]
fn read_u8(&mut self) -> Result<u8> {
let mut buf = [0; 1];
- try!(self.read_exact(&mut buf));
+ self.read_exact(&mut buf)?;
Ok(buf[0])
}
@@ -82,7 +84,7 @@ pub trait ReadBytesExt: io::Read {
#[inline]
fn read_i8(&mut self) -> Result<i8> {
let mut buf = [0; 1];
- try!(self.read_exact(&mut buf));
+ self.read_exact(&mut buf)?;
Ok(buf[0] as i8)
}
@@ -109,7 +111,7 @@ pub trait ReadBytesExt: io::Read {
#[inline]
fn read_u16<T: ByteOrder>(&mut self) -> Result<u16> {
let mut buf = [0; 2];
- try!(self.read_exact(&mut buf));
+ self.read_exact(&mut buf)?;
Ok(T::read_u16(&buf))
}
@@ -136,7 +138,7 @@ pub trait ReadBytesExt: io::Read {
#[inline]
fn read_i16<T: ByteOrder>(&mut self) -> Result<i16> {
let mut buf = [0; 2];
- try!(self.read_exact(&mut buf));
+ self.read_exact(&mut buf)?;
Ok(T::read_i16(&buf))
}
@@ -162,7 +164,7 @@ pub trait ReadBytesExt: io::Read {
#[inline]
fn read_u24<T: ByteOrder>(&mut self) -> Result<u32> {
let mut buf = [0; 3];
- try!(self.read_exact(&mut buf));
+ self.read_exact(&mut buf)?;
Ok(T::read_u24(&buf))
}
@@ -188,7 +190,7 @@ pub trait ReadBytesExt: io::Read {
#[inline]
fn read_i24<T: ByteOrder>(&mut self) -> Result<i32> {
let mut buf = [0; 3];
- try!(self.read_exact(&mut buf));
+ self.read_exact(&mut buf)?;
Ok(T::read_i24(&buf))
}
@@ -214,7 +216,7 @@ pub trait ReadBytesExt: io::Read {
#[inline]
fn read_u32<T: ByteOrder>(&mut self) -> Result<u32> {
let mut buf = [0; 4];
- try!(self.read_exact(&mut buf));
+ self.read_exact(&mut buf)?;
Ok(T::read_u32(&buf))
}
@@ -240,7 +242,7 @@ pub trait ReadBytesExt: io::Read {
#[inline]
fn read_i32<T: ByteOrder>(&mut self) -> Result<i32> {
let mut buf = [0; 4];
- try!(self.read_exact(&mut buf));
+ self.read_exact(&mut buf)?;
Ok(T::read_i32(&buf))
}
@@ -266,7 +268,7 @@ pub trait ReadBytesExt: io::Read {
#[inline]
fn read_u48<T: ByteOrder>(&mut self) -> Result<u64> {
let mut buf = [0; 6];
- try!(self.read_exact(&mut buf));
+ self.read_exact(&mut buf)?;
Ok(T::read_u48(&buf))
}
@@ -292,7 +294,7 @@ pub trait ReadBytesExt: io::Read {
#[inline]
fn read_i48<T: ByteOrder>(&mut self) -> Result<i64> {
let mut buf = [0; 6];
- try!(self.read_exact(&mut buf));
+ self.read_exact(&mut buf)?;
Ok(T::read_i48(&buf))
}
@@ -318,7 +320,7 @@ pub trait ReadBytesExt: io::Read {
#[inline]
fn read_u64<T: ByteOrder>(&mut self) -> Result<u64> {
let mut buf = [0; 8];
- try!(self.read_exact(&mut buf));
+ self.read_exact(&mut buf)?;
Ok(T::read_u64(&buf))
}
@@ -344,7 +346,7 @@ pub trait ReadBytesExt: io::Read {
#[inline]
fn read_i64<T: ByteOrder>(&mut self) -> Result<i64> {
let mut buf = [0; 8];
- try!(self.read_exact(&mut buf));
+ self.read_exact(&mut buf)?;
Ok(T::read_i64(&buf))
}
@@ -370,11 +372,10 @@ pub trait ReadBytesExt: io::Read {
/// ]);
/// assert_eq!(16947640962301618749969007319746179, rdr.read_u128::<BigEndian>().unwrap());
/// ```
- #[cfg(byteorder_i128)]
#[inline]
fn read_u128<T: ByteOrder>(&mut self) -> Result<u128> {
let mut buf = [0; 16];
- try!(self.read_exact(&mut buf));
+ self.read_exact(&mut buf)?;
Ok(T::read_u128(&buf))
}
@@ -397,11 +398,10 @@ pub trait ReadBytesExt: io::Read {
/// let mut rdr = Cursor::new(vec![0x80, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]);
/// assert_eq!(i128::min_value(), rdr.read_i128::<BigEndian>().unwrap());
/// ```
- #[cfg(byteorder_i128)]
#[inline]
fn read_i128<T: ByteOrder>(&mut self) -> Result<i128> {
let mut buf = [0; 16];
- try!(self.read_exact(&mut buf));
+ self.read_exact(&mut buf)?;
Ok(T::read_i128(&buf))
}
@@ -426,7 +426,7 @@ pub trait ReadBytesExt: io::Read {
#[inline]
fn read_uint<T: ByteOrder>(&mut self, nbytes: usize) -> Result<u64> {
let mut buf = [0; 8];
- try!(self.read_exact(&mut buf[..nbytes]));
+ self.read_exact(&mut buf[..nbytes])?;
Ok(T::read_uint(&buf[..nbytes], nbytes))
}
@@ -451,25 +451,23 @@ pub trait ReadBytesExt: io::Read {
#[inline]
fn read_int<T: ByteOrder>(&mut self, nbytes: usize) -> Result<i64> {
let mut buf = [0; 8];
- try!(self.read_exact(&mut buf[..nbytes]));
+ self.read_exact(&mut buf[..nbytes])?;
Ok(T::read_int(&buf[..nbytes], nbytes))
}
/// Reads an unsigned n-bytes integer from the underlying reader.
- #[cfg(byteorder_i128)]
#[inline]
fn read_uint128<T: ByteOrder>(&mut self, nbytes: usize) -> Result<u128> {
let mut buf = [0; 16];
- try!(self.read_exact(&mut buf[..nbytes]));
+ self.read_exact(&mut buf[..nbytes])?;
Ok(T::read_uint128(&buf[..nbytes], nbytes))
}
/// Reads a signed n-bytes integer from the underlying reader.
- #[cfg(byteorder_i128)]
#[inline]
fn read_int128<T: ByteOrder>(&mut self, nbytes: usize) -> Result<i128> {
let mut buf = [0; 16];
- try!(self.read_exact(&mut buf[..nbytes]));
+ self.read_exact(&mut buf[..nbytes])?;
Ok(T::read_int128(&buf[..nbytes], nbytes))
}
@@ -500,7 +498,7 @@ pub trait ReadBytesExt: io::Read {
#[inline]
fn read_f32<T: ByteOrder>(&mut self) -> Result<f32> {
let mut buf = [0; 4];
- try!(self.read_exact(&mut buf));
+ self.read_exact(&mut buf)?;
Ok(T::read_f32(&buf))
}
@@ -531,7 +529,7 @@ pub trait ReadBytesExt: io::Read {
#[inline]
fn read_f64<T: ByteOrder>(&mut self) -> Result<f64> {
let mut buf = [0; 8];
- try!(self.read_exact(&mut buf));
+ self.read_exact(&mut buf)?;
Ok(T::read_f64(&buf))
}
@@ -564,7 +562,7 @@ pub trait ReadBytesExt: io::Read {
fn read_u16_into<T: ByteOrder>(&mut self, dst: &mut [u16]) -> Result<()> {
{
let buf = unsafe { slice_to_u8_mut(dst) };
- try!(self.read_exact(buf));
+ self.read_exact(buf)?;
}
T::from_slice_u16(dst);
Ok(())
@@ -599,7 +597,7 @@ pub trait ReadBytesExt: io::Read {
fn read_u32_into<T: ByteOrder>(&mut self, dst: &mut [u32]) -> Result<()> {
{
let buf = unsafe { slice_to_u8_mut(dst) };
- try!(self.read_exact(buf));
+ self.read_exact(buf)?;
}
T::from_slice_u32(dst);
Ok(())
@@ -637,7 +635,7 @@ pub trait ReadBytesExt: io::Read {
fn read_u64_into<T: ByteOrder>(&mut self, dst: &mut [u64]) -> Result<()> {
{
let buf = unsafe { slice_to_u8_mut(dst) };
- try!(self.read_exact(buf));
+ self.read_exact(buf)?;
}
T::from_slice_u64(dst);
Ok(())
@@ -671,7 +669,6 @@ pub trait ReadBytesExt: io::Read {
/// rdr.read_u128_into::<BigEndian>(&mut dst).unwrap();
/// assert_eq!([517, 768], dst);
/// ```
- #[cfg(byteorder_i128)]
#[inline]
fn read_u128_into<T: ByteOrder>(
&mut self,
@@ -679,7 +676,7 @@ pub trait ReadBytesExt: io::Read {
) -> Result<()> {
{
let buf = unsafe { slice_to_u8_mut(dst) };
- try!(self.read_exact(buf));
+ self.read_exact(buf)?;
}
T::from_slice_u128(dst);
Ok(())
@@ -750,7 +747,7 @@ pub trait ReadBytesExt: io::Read {
fn read_i16_into<T: ByteOrder>(&mut self, dst: &mut [i16]) -> Result<()> {
{
let buf = unsafe { slice_to_u8_mut(dst) };
- try!(self.read_exact(buf));
+ self.read_exact(buf)?;
}
T::from_slice_i16(dst);
Ok(())
@@ -785,7 +782,7 @@ pub trait ReadBytesExt: io::Read {
fn read_i32_into<T: ByteOrder>(&mut self, dst: &mut [i32]) -> Result<()> {
{
let buf = unsafe { slice_to_u8_mut(dst) };
- try!(self.read_exact(buf));
+ self.read_exact(buf)?;
}
T::from_slice_i32(dst);
Ok(())
@@ -823,7 +820,7 @@ pub trait ReadBytesExt: io::Read {
fn read_i64_into<T: ByteOrder>(&mut self, dst: &mut [i64]) -> Result<()> {
{
let buf = unsafe { slice_to_u8_mut(dst) };
- try!(self.read_exact(buf));
+ self.read_exact(buf)?;
}
T::from_slice_i64(dst);
Ok(())
@@ -857,7 +854,6 @@ pub trait ReadBytesExt: io::Read {
/// rdr.read_i128_into::<BigEndian>(&mut dst).unwrap();
/// assert_eq!([517, 768], dst);
/// ```
- #[cfg(byteorder_i128)]
#[inline]
fn read_i128_into<T: ByteOrder>(
&mut self,
@@ -865,7 +861,7 @@ pub trait ReadBytesExt: io::Read {
) -> Result<()> {
{
let buf = unsafe { slice_to_u8_mut(dst) };
- try!(self.read_exact(buf));
+ self.read_exact(buf)?;
}
T::from_slice_i128(dst);
Ok(())
@@ -903,13 +899,10 @@ pub trait ReadBytesExt: io::Read {
/// assert_eq!([f32::consts::PI, 1.0], dst);
/// ```
#[inline]
- fn read_f32_into<T: ByteOrder>(
- &mut self,
- dst: &mut [f32],
- ) -> Result<()> {
+ fn read_f32_into<T: ByteOrder>(&mut self, dst: &mut [f32]) -> Result<()> {
{
let buf = unsafe { slice_to_u8_mut(dst) };
- try!(self.read_exact(buf));
+ self.read_exact(buf)?;
}
T::from_slice_f32(dst);
Ok(())
@@ -951,7 +944,7 @@ pub trait ReadBytesExt: io::Read {
/// assert_eq!([f32::consts::PI, 1.0], dst);
/// ```
#[inline]
- #[deprecated(since="1.2.0", note="please use `read_f32_into` instead")]
+ #[deprecated(since = "1.2.0", note = "please use `read_f32_into` instead")]
fn read_f32_into_unchecked<T: ByteOrder>(
&mut self,
dst: &mut [f32],
@@ -991,13 +984,10 @@ pub trait ReadBytesExt: io::Read {
/// assert_eq!([f64::consts::PI, 1.0], dst);
/// ```
#[inline]
- fn read_f64_into<T: ByteOrder>(
- &mut self,
- dst: &mut [f64],
- ) -> Result<()> {
+ fn read_f64_into<T: ByteOrder>(&mut self, dst: &mut [f64]) -> Result<()> {
{
let buf = unsafe { slice_to_u8_mut(dst) };
- try!(self.read_exact(buf));
+ self.read_exact(buf)?;
}
T::from_slice_f64(dst);
Ok(())
@@ -1045,7 +1035,7 @@ pub trait ReadBytesExt: io::Read {
/// assert_eq!([f64::consts::PI, 1.0], dst);
/// ```
#[inline]
- #[deprecated(since="1.2.0", note="please use `read_f64_into` instead")]
+ #[deprecated(since = "1.2.0", note = "please use `read_f64_into` instead")]
fn read_f64_into_unchecked<T: ByteOrder>(
&mut self,
dst: &mut [f64],
@@ -1408,7 +1398,6 @@ pub trait WriteBytesExt: io::Write {
}
/// Writes an unsigned 128 bit integer to the underlying writer.
- #[cfg(byteorder_i128)]
#[inline]
fn write_u128<T: ByteOrder>(&mut self, n: u128) -> Result<()> {
let mut buf = [0; 16];
@@ -1417,7 +1406,6 @@ pub trait WriteBytesExt: io::Write {
}
/// Writes a signed 128 bit integer to the underlying writer.
- #[cfg(byteorder_i128)]
#[inline]
fn write_i128<T: ByteOrder>(&mut self, n: i128) -> Result<()> {
let mut buf = [0; 16];
@@ -1501,7 +1489,6 @@ pub trait WriteBytesExt: io::Write {
///
/// If the given integer is not representable in the given number of bytes,
/// this method panics. If `nbytes > 16`, this method panics.
- #[cfg(byteorder_i128)]
#[inline]
fn write_uint128<T: ByteOrder>(
&mut self,
@@ -1517,7 +1504,6 @@ pub trait WriteBytesExt: io::Write {
///
/// If the given integer is not representable in the given number of bytes,
/// this method panics. If `nbytes > 16`, this method panics.
- #[cfg(byteorder_i128)]
#[inline]
fn write_int128<T: ByteOrder>(
&mut self,
@@ -1596,7 +1582,8 @@ impl<W: io::Write + ?Sized> WriteBytesExt for W {}
/// representation.
///
/// This function is wildly unsafe because it permits arbitrary modification of
-/// the binary representation of any `Copy` type. Use with care.
+/// the binary representation of any `Copy` type. Use with care. It's intended
+/// to be called only where `T` is a numeric type.
unsafe fn slice_to_u8_mut<T: Copy>(slice: &mut [T]) -> &mut [u8] {
use std::mem::size_of;