mirror of
https://github.com/tokio-rs/bytes.git
synced 2026-08-07 00:00:13 +02:00
Implement native-endian get and put functions for Buf and BufMut (#576)
Fixes #549
This commit is contained in:
@@ -354,6 +354,29 @@ pub trait Buf {
|
||||
buf_get_impl!(self, u16::from_le_bytes);
|
||||
}
|
||||
|
||||
/// Gets an unsigned 16 bit integer from `self` in native-endian byte order.
|
||||
///
|
||||
/// The current position is advanced by 2.
|
||||
///
|
||||
/// # Examples
|
||||
///
|
||||
/// ```
|
||||
/// use bytes::Buf;
|
||||
///
|
||||
/// let mut buf: &[u8] = match cfg!(target_endian = "big") {
|
||||
/// true => b"\x08\x09 hello",
|
||||
/// false => b"\x09\x08 hello",
|
||||
/// };
|
||||
/// assert_eq!(0x0809, buf.get_u16_ne());
|
||||
/// ```
|
||||
///
|
||||
/// # Panics
|
||||
///
|
||||
/// This function panics if there is not enough remaining data in `self`.
|
||||
fn get_u16_ne(&mut self) -> u16 {
|
||||
buf_get_impl!(self, u16::from_ne_bytes);
|
||||
}
|
||||
|
||||
/// Gets a signed 16 bit integer from `self` in big-endian byte order.
|
||||
///
|
||||
/// The current position is advanced by 2.
|
||||
@@ -394,6 +417,29 @@ pub trait Buf {
|
||||
buf_get_impl!(self, i16::from_le_bytes);
|
||||
}
|
||||
|
||||
/// Gets a signed 16 bit integer from `self` in native-endian byte order.
|
||||
///
|
||||
/// The current position is advanced by 2.
|
||||
///
|
||||
/// # Examples
|
||||
///
|
||||
/// ```
|
||||
/// use bytes::Buf;
|
||||
///
|
||||
/// let mut buf: &[u8] = match cfg!(target_endian = "big") {
|
||||
/// true => b"\x08\x09 hello",
|
||||
/// false => b"\x09\x08 hello",
|
||||
/// };
|
||||
/// assert_eq!(0x0809, buf.get_i16_ne());
|
||||
/// ```
|
||||
///
|
||||
/// # Panics
|
||||
///
|
||||
/// This function panics if there is not enough remaining data in `self`.
|
||||
fn get_i16_ne(&mut self) -> i16 {
|
||||
buf_get_impl!(self, i16::from_ne_bytes);
|
||||
}
|
||||
|
||||
/// Gets an unsigned 32 bit integer from `self` in the big-endian byte order.
|
||||
///
|
||||
/// The current position is advanced by 4.
|
||||
@@ -434,6 +480,29 @@ pub trait Buf {
|
||||
buf_get_impl!(self, u32::from_le_bytes);
|
||||
}
|
||||
|
||||
/// Gets an unsigned 32 bit integer from `self` in native-endian byte order.
|
||||
///
|
||||
/// The current position is advanced by 4.
|
||||
///
|
||||
/// # Examples
|
||||
///
|
||||
/// ```
|
||||
/// use bytes::Buf;
|
||||
///
|
||||
/// let mut buf: &[u8] = match cfg!(target_endian = "big") {
|
||||
/// true => b"\x08\x09\xA0\xA1 hello",
|
||||
/// false => b"\xA1\xA0\x09\x08 hello",
|
||||
/// };
|
||||
/// assert_eq!(0x0809A0A1, buf.get_u32_ne());
|
||||
/// ```
|
||||
///
|
||||
/// # Panics
|
||||
///
|
||||
/// This function panics if there is not enough remaining data in `self`.
|
||||
fn get_u32_ne(&mut self) -> u32 {
|
||||
buf_get_impl!(self, u32::from_ne_bytes);
|
||||
}
|
||||
|
||||
/// Gets a signed 32 bit integer from `self` in big-endian byte order.
|
||||
///
|
||||
/// The current position is advanced by 4.
|
||||
@@ -474,6 +543,29 @@ pub trait Buf {
|
||||
buf_get_impl!(self, i32::from_le_bytes);
|
||||
}
|
||||
|
||||
/// Gets a signed 32 bit integer from `self` in native-endian byte order.
|
||||
///
|
||||
/// The current position is advanced by 4.
|
||||
///
|
||||
/// # Examples
|
||||
///
|
||||
/// ```
|
||||
/// use bytes::Buf;
|
||||
///
|
||||
/// let mut buf: &[u8] = match cfg!(target_endian = "big") {
|
||||
/// true => b"\x08\x09\xA0\xA1 hello",
|
||||
/// false => b"\xA1\xA0\x09\x08 hello",
|
||||
/// };
|
||||
/// assert_eq!(0x0809A0A1, buf.get_i32_ne());
|
||||
/// ```
|
||||
///
|
||||
/// # Panics
|
||||
///
|
||||
/// This function panics if there is not enough remaining data in `self`.
|
||||
fn get_i32_ne(&mut self) -> i32 {
|
||||
buf_get_impl!(self, i32::from_ne_bytes);
|
||||
}
|
||||
|
||||
/// Gets an unsigned 64 bit integer from `self` in big-endian byte order.
|
||||
///
|
||||
/// The current position is advanced by 8.
|
||||
@@ -514,6 +606,29 @@ pub trait Buf {
|
||||
buf_get_impl!(self, u64::from_le_bytes);
|
||||
}
|
||||
|
||||
/// Gets an unsigned 64 bit integer from `self` in native-endian byte order.
|
||||
///
|
||||
/// The current position is advanced by 8.
|
||||
///
|
||||
/// # Examples
|
||||
///
|
||||
/// ```
|
||||
/// use bytes::Buf;
|
||||
///
|
||||
/// let mut buf: &[u8] = match cfg!(target_endian = "big") {
|
||||
/// true => b"\x01\x02\x03\x04\x05\x06\x07\x08 hello",
|
||||
/// false => b"\x08\x07\x06\x05\x04\x03\x02\x01 hello",
|
||||
/// };
|
||||
/// assert_eq!(0x0102030405060708, buf.get_u64_ne());
|
||||
/// ```
|
||||
///
|
||||
/// # Panics
|
||||
///
|
||||
/// This function panics if there is not enough remaining data in `self`.
|
||||
fn get_u64_ne(&mut self) -> u64 {
|
||||
buf_get_impl!(self, u64::from_ne_bytes);
|
||||
}
|
||||
|
||||
/// Gets a signed 64 bit integer from `self` in big-endian byte order.
|
||||
///
|
||||
/// The current position is advanced by 8.
|
||||
@@ -554,6 +669,29 @@ pub trait Buf {
|
||||
buf_get_impl!(self, i64::from_le_bytes);
|
||||
}
|
||||
|
||||
/// Gets a signed 64 bit integer from `self` in native-endian byte order.
|
||||
///
|
||||
/// The current position is advanced by 8.
|
||||
///
|
||||
/// # Examples
|
||||
///
|
||||
/// ```
|
||||
/// use bytes::Buf;
|
||||
///
|
||||
/// let mut buf: &[u8] = match cfg!(target_endian = "big") {
|
||||
/// true => b"\x01\x02\x03\x04\x05\x06\x07\x08 hello",
|
||||
/// false => b"\x08\x07\x06\x05\x04\x03\x02\x01 hello",
|
||||
/// };
|
||||
/// assert_eq!(0x0102030405060708, buf.get_i64_ne());
|
||||
/// ```
|
||||
///
|
||||
/// # Panics
|
||||
///
|
||||
/// This function panics if there is not enough remaining data in `self`.
|
||||
fn get_i64_ne(&mut self) -> i64 {
|
||||
buf_get_impl!(self, i64::from_ne_bytes);
|
||||
}
|
||||
|
||||
/// Gets an unsigned 128 bit integer from `self` in big-endian byte order.
|
||||
///
|
||||
/// The current position is advanced by 16.
|
||||
@@ -594,6 +732,29 @@ pub trait Buf {
|
||||
buf_get_impl!(self, u128::from_le_bytes);
|
||||
}
|
||||
|
||||
/// Gets an unsigned 128 bit integer from `self` in native-endian byte order.
|
||||
///
|
||||
/// The current position is advanced by 16.
|
||||
///
|
||||
/// # Examples
|
||||
///
|
||||
/// ```
|
||||
/// use bytes::Buf;
|
||||
///
|
||||
/// let mut buf: &[u8] = match cfg!(target_endian = "big") {
|
||||
/// true => b"\x01\x02\x03\x04\x05\x06\x07\x08\x09\x10\x11\x12\x13\x14\x15\x16 hello",
|
||||
/// false => b"\x16\x15\x14\x13\x12\x11\x10\x09\x08\x07\x06\x05\x04\x03\x02\x01 hello",
|
||||
/// };
|
||||
/// assert_eq!(0x01020304050607080910111213141516, buf.get_u128_ne());
|
||||
/// ```
|
||||
///
|
||||
/// # Panics
|
||||
///
|
||||
/// This function panics if there is not enough remaining data in `self`.
|
||||
fn get_u128_ne(&mut self) -> u128 {
|
||||
buf_get_impl!(self, u128::from_ne_bytes);
|
||||
}
|
||||
|
||||
/// Gets a signed 128 bit integer from `self` in big-endian byte order.
|
||||
///
|
||||
/// The current position is advanced by 16.
|
||||
@@ -634,6 +795,29 @@ pub trait Buf {
|
||||
buf_get_impl!(self, i128::from_le_bytes);
|
||||
}
|
||||
|
||||
/// Gets a signed 128 bit integer from `self` in native-endian byte order.
|
||||
///
|
||||
/// The current position is advanced by 16.
|
||||
///
|
||||
/// # Examples
|
||||
///
|
||||
/// ```
|
||||
/// use bytes::Buf;
|
||||
///
|
||||
/// let mut buf: &[u8] = match cfg!(target_endian = "big") {
|
||||
/// true => b"\x01\x02\x03\x04\x05\x06\x07\x08\x09\x10\x11\x12\x13\x14\x15\x16 hello",
|
||||
/// false => b"\x16\x15\x14\x13\x12\x11\x10\x09\x08\x07\x06\x05\x04\x03\x02\x01 hello",
|
||||
/// };
|
||||
/// assert_eq!(0x01020304050607080910111213141516, buf.get_i128_ne());
|
||||
/// ```
|
||||
///
|
||||
/// # Panics
|
||||
///
|
||||
/// This function panics if there is not enough remaining data in `self`.
|
||||
fn get_i128_ne(&mut self) -> i128 {
|
||||
buf_get_impl!(self, i128::from_ne_bytes);
|
||||
}
|
||||
|
||||
/// Gets an unsigned n-byte integer from `self` in big-endian byte order.
|
||||
///
|
||||
/// The current position is advanced by `nbytes`.
|
||||
@@ -674,6 +858,33 @@ pub trait Buf {
|
||||
buf_get_impl!(le => self, u64, nbytes);
|
||||
}
|
||||
|
||||
/// Gets an unsigned n-byte integer from `self` in native-endian byte order.
|
||||
///
|
||||
/// The current position is advanced by `nbytes`.
|
||||
///
|
||||
/// # Examples
|
||||
///
|
||||
/// ```
|
||||
/// use bytes::Buf;
|
||||
///
|
||||
/// let mut buf: &[u8] = match cfg!(target_endian = "big") {
|
||||
/// true => b"\x01\x02\x03 hello",
|
||||
/// false => b"\x03\x02\x01 hello",
|
||||
/// };
|
||||
/// assert_eq!(0x010203, buf.get_uint_ne(3));
|
||||
/// ```
|
||||
///
|
||||
/// # Panics
|
||||
///
|
||||
/// This function panics if there is not enough remaining data in `self`.
|
||||
fn get_uint_ne(&mut self, nbytes: usize) -> u64 {
|
||||
if cfg!(target_endian = "big") {
|
||||
self.get_uint(nbytes)
|
||||
} else {
|
||||
self.get_uint_le(nbytes)
|
||||
}
|
||||
}
|
||||
|
||||
/// Gets a signed n-byte integer from `self` in big-endian byte order.
|
||||
///
|
||||
/// The current position is advanced by `nbytes`.
|
||||
@@ -714,6 +925,33 @@ pub trait Buf {
|
||||
buf_get_impl!(le => self, i64, nbytes);
|
||||
}
|
||||
|
||||
/// Gets a signed n-byte integer from `self` in native-endian byte order.
|
||||
///
|
||||
/// The current position is advanced by `nbytes`.
|
||||
///
|
||||
/// # Examples
|
||||
///
|
||||
/// ```
|
||||
/// use bytes::Buf;
|
||||
///
|
||||
/// let mut buf: &[u8] = match cfg!(target_endian = "big") {
|
||||
/// true => b"\x01\x02\x03 hello",
|
||||
/// false => b"\x03\x02\x01 hello",
|
||||
/// };
|
||||
/// assert_eq!(0x010203, buf.get_int_ne(3));
|
||||
/// ```
|
||||
///
|
||||
/// # Panics
|
||||
///
|
||||
/// This function panics if there is not enough remaining data in `self`.
|
||||
fn get_int_ne(&mut self, nbytes: usize) -> i64 {
|
||||
if cfg!(target_endian = "big") {
|
||||
self.get_int(nbytes)
|
||||
} else {
|
||||
self.get_int_le(nbytes)
|
||||
}
|
||||
}
|
||||
|
||||
/// Gets an IEEE754 single-precision (4 bytes) floating point number from
|
||||
/// `self` in big-endian byte order.
|
||||
///
|
||||
@@ -756,6 +994,30 @@ pub trait Buf {
|
||||
f32::from_bits(Self::get_u32_le(self))
|
||||
}
|
||||
|
||||
/// Gets an IEEE754 single-precision (4 bytes) floating point number from
|
||||
/// `self` in native-endian byte order.
|
||||
///
|
||||
/// The current position is advanced by 4.
|
||||
///
|
||||
/// # Examples
|
||||
///
|
||||
/// ```
|
||||
/// use bytes::Buf;
|
||||
///
|
||||
/// let mut buf: &[u8] = match cfg!(target_endian = "big") {
|
||||
/// true => b"\x3F\x99\x99\x9A hello",
|
||||
/// false => b"\x9A\x99\x99\x3F hello",
|
||||
/// };
|
||||
/// assert_eq!(1.2f32, buf.get_f32_ne());
|
||||
/// ```
|
||||
///
|
||||
/// # Panics
|
||||
///
|
||||
/// This function panics if there is not enough remaining data in `self`.
|
||||
fn get_f32_ne(&mut self) -> f32 {
|
||||
f32::from_bits(Self::get_u32_ne(self))
|
||||
}
|
||||
|
||||
/// Gets an IEEE754 double-precision (8 bytes) floating point number from
|
||||
/// `self` in big-endian byte order.
|
||||
///
|
||||
@@ -798,6 +1060,30 @@ pub trait Buf {
|
||||
f64::from_bits(Self::get_u64_le(self))
|
||||
}
|
||||
|
||||
/// Gets an IEEE754 double-precision (8 bytes) floating point number from
|
||||
/// `self` in native-endian byte order.
|
||||
///
|
||||
/// The current position is advanced by 8.
|
||||
///
|
||||
/// # Examples
|
||||
///
|
||||
/// ```
|
||||
/// use bytes::Buf;
|
||||
///
|
||||
/// let mut buf: &[u8] = match cfg!(target_endian = "big") {
|
||||
/// true => b"\x3F\xF3\x33\x33\x33\x33\x33\x33 hello",
|
||||
/// false => b"\x33\x33\x33\x33\x33\x33\xF3\x3F hello",
|
||||
/// };
|
||||
/// assert_eq!(1.2f64, buf.get_f64_ne());
|
||||
/// ```
|
||||
///
|
||||
/// # Panics
|
||||
///
|
||||
/// This function panics if there is not enough remaining data in `self`.
|
||||
fn get_f64_ne(&mut self) -> f64 {
|
||||
f64::from_bits(Self::get_u64_ne(self))
|
||||
}
|
||||
|
||||
/// Consumes `len` bytes inside self and returns new instance of `Bytes`
|
||||
/// with this data.
|
||||
///
|
||||
@@ -948,6 +1234,10 @@ macro_rules! deref_forward_buf {
|
||||
(**self).get_u16_le()
|
||||
}
|
||||
|
||||
fn get_u16_ne(&mut self) -> u16 {
|
||||
(**self).get_u16_ne()
|
||||
}
|
||||
|
||||
fn get_i16(&mut self) -> i16 {
|
||||
(**self).get_i16()
|
||||
}
|
||||
@@ -956,6 +1246,10 @@ macro_rules! deref_forward_buf {
|
||||
(**self).get_i16_le()
|
||||
}
|
||||
|
||||
fn get_i16_ne(&mut self) -> i16 {
|
||||
(**self).get_i16_ne()
|
||||
}
|
||||
|
||||
fn get_u32(&mut self) -> u32 {
|
||||
(**self).get_u32()
|
||||
}
|
||||
@@ -964,6 +1258,10 @@ macro_rules! deref_forward_buf {
|
||||
(**self).get_u32_le()
|
||||
}
|
||||
|
||||
fn get_u32_ne(&mut self) -> u32 {
|
||||
(**self).get_u32_ne()
|
||||
}
|
||||
|
||||
fn get_i32(&mut self) -> i32 {
|
||||
(**self).get_i32()
|
||||
}
|
||||
@@ -972,6 +1270,10 @@ macro_rules! deref_forward_buf {
|
||||
(**self).get_i32_le()
|
||||
}
|
||||
|
||||
fn get_i32_ne(&mut self) -> i32 {
|
||||
(**self).get_i32_ne()
|
||||
}
|
||||
|
||||
fn get_u64(&mut self) -> u64 {
|
||||
(**self).get_u64()
|
||||
}
|
||||
@@ -980,6 +1282,10 @@ macro_rules! deref_forward_buf {
|
||||
(**self).get_u64_le()
|
||||
}
|
||||
|
||||
fn get_u64_ne(&mut self) -> u64 {
|
||||
(**self).get_u64_ne()
|
||||
}
|
||||
|
||||
fn get_i64(&mut self) -> i64 {
|
||||
(**self).get_i64()
|
||||
}
|
||||
@@ -988,6 +1294,10 @@ macro_rules! deref_forward_buf {
|
||||
(**self).get_i64_le()
|
||||
}
|
||||
|
||||
fn get_i64_ne(&mut self) -> i64 {
|
||||
(**self).get_i64_ne()
|
||||
}
|
||||
|
||||
fn get_uint(&mut self, nbytes: usize) -> u64 {
|
||||
(**self).get_uint(nbytes)
|
||||
}
|
||||
@@ -996,6 +1306,10 @@ macro_rules! deref_forward_buf {
|
||||
(**self).get_uint_le(nbytes)
|
||||
}
|
||||
|
||||
fn get_uint_ne(&mut self, nbytes: usize) -> u64 {
|
||||
(**self).get_uint_ne(nbytes)
|
||||
}
|
||||
|
||||
fn get_int(&mut self, nbytes: usize) -> i64 {
|
||||
(**self).get_int(nbytes)
|
||||
}
|
||||
@@ -1004,6 +1318,10 @@ macro_rules! deref_forward_buf {
|
||||
(**self).get_int_le(nbytes)
|
||||
}
|
||||
|
||||
fn get_int_ne(&mut self, nbytes: usize) -> i64 {
|
||||
(**self).get_int_ne(nbytes)
|
||||
}
|
||||
|
||||
fn copy_to_bytes(&mut self, len: usize) -> crate::Bytes {
|
||||
(**self).copy_to_bytes(len)
|
||||
}
|
||||
|
||||
@@ -386,6 +386,32 @@ pub unsafe trait BufMut {
|
||||
self.put_slice(&n.to_le_bytes())
|
||||
}
|
||||
|
||||
/// Writes an unsigned 16 bit integer to `self` in native-endian byte order.
|
||||
///
|
||||
/// The current position is advanced by 2.
|
||||
///
|
||||
/// # Examples
|
||||
///
|
||||
/// ```
|
||||
/// use bytes::BufMut;
|
||||
///
|
||||
/// let mut buf = vec![];
|
||||
/// buf.put_u16_ne(0x0809);
|
||||
/// if cfg!(target_endian = "big") {
|
||||
/// assert_eq!(buf, b"\x08\x09");
|
||||
/// } else {
|
||||
/// assert_eq!(buf, b"\x09\x08");
|
||||
/// }
|
||||
/// ```
|
||||
///
|
||||
/// # Panics
|
||||
///
|
||||
/// This function panics if there is not enough remaining capacity in
|
||||
/// `self`.
|
||||
fn put_u16_ne(&mut self, n: u16) {
|
||||
self.put_slice(&n.to_ne_bytes())
|
||||
}
|
||||
|
||||
/// Writes a signed 16 bit integer to `self` in big-endian byte order.
|
||||
///
|
||||
/// The current position is advanced by 2.
|
||||
@@ -430,6 +456,32 @@ pub unsafe trait BufMut {
|
||||
self.put_slice(&n.to_le_bytes())
|
||||
}
|
||||
|
||||
/// Writes a signed 16 bit integer to `self` in native-endian byte order.
|
||||
///
|
||||
/// The current position is advanced by 2.
|
||||
///
|
||||
/// # Examples
|
||||
///
|
||||
/// ```
|
||||
/// use bytes::BufMut;
|
||||
///
|
||||
/// let mut buf = vec![];
|
||||
/// buf.put_i16_ne(0x0809);
|
||||
/// if cfg!(target_endian = "big") {
|
||||
/// assert_eq!(buf, b"\x08\x09");
|
||||
/// } else {
|
||||
/// assert_eq!(buf, b"\x09\x08");
|
||||
/// }
|
||||
/// ```
|
||||
///
|
||||
/// # Panics
|
||||
///
|
||||
/// This function panics if there is not enough remaining capacity in
|
||||
/// `self`.
|
||||
fn put_i16_ne(&mut self, n: i16) {
|
||||
self.put_slice(&n.to_ne_bytes())
|
||||
}
|
||||
|
||||
/// Writes an unsigned 32 bit integer to `self` in big-endian byte order.
|
||||
///
|
||||
/// The current position is advanced by 4.
|
||||
@@ -474,6 +526,32 @@ pub unsafe trait BufMut {
|
||||
self.put_slice(&n.to_le_bytes())
|
||||
}
|
||||
|
||||
/// Writes an unsigned 32 bit integer to `self` in native-endian byte order.
|
||||
///
|
||||
/// The current position is advanced by 4.
|
||||
///
|
||||
/// # Examples
|
||||
///
|
||||
/// ```
|
||||
/// use bytes::BufMut;
|
||||
///
|
||||
/// let mut buf = vec![];
|
||||
/// buf.put_u32_ne(0x0809A0A1);
|
||||
/// if cfg!(target_endian = "big") {
|
||||
/// assert_eq!(buf, b"\x08\x09\xA0\xA1");
|
||||
/// } else {
|
||||
/// assert_eq!(buf, b"\xA1\xA0\x09\x08");
|
||||
/// }
|
||||
/// ```
|
||||
///
|
||||
/// # Panics
|
||||
///
|
||||
/// This function panics if there is not enough remaining capacity in
|
||||
/// `self`.
|
||||
fn put_u32_ne(&mut self, n: u32) {
|
||||
self.put_slice(&n.to_ne_bytes())
|
||||
}
|
||||
|
||||
/// Writes a signed 32 bit integer to `self` in big-endian byte order.
|
||||
///
|
||||
/// The current position is advanced by 4.
|
||||
@@ -518,6 +596,32 @@ pub unsafe trait BufMut {
|
||||
self.put_slice(&n.to_le_bytes())
|
||||
}
|
||||
|
||||
/// Writes a signed 32 bit integer to `self` in native-endian byte order.
|
||||
///
|
||||
/// The current position is advanced by 4.
|
||||
///
|
||||
/// # Examples
|
||||
///
|
||||
/// ```
|
||||
/// use bytes::BufMut;
|
||||
///
|
||||
/// let mut buf = vec![];
|
||||
/// buf.put_i32_ne(0x0809A0A1);
|
||||
/// if cfg!(target_endian = "big") {
|
||||
/// assert_eq!(buf, b"\x08\x09\xA0\xA1");
|
||||
/// } else {
|
||||
/// assert_eq!(buf, b"\xA1\xA0\x09\x08");
|
||||
/// }
|
||||
/// ```
|
||||
///
|
||||
/// # Panics
|
||||
///
|
||||
/// This function panics if there is not enough remaining capacity in
|
||||
/// `self`.
|
||||
fn put_i32_ne(&mut self, n: i32) {
|
||||
self.put_slice(&n.to_ne_bytes())
|
||||
}
|
||||
|
||||
/// Writes an unsigned 64 bit integer to `self` in the big-endian byte order.
|
||||
///
|
||||
/// The current position is advanced by 8.
|
||||
@@ -562,6 +666,32 @@ pub unsafe trait BufMut {
|
||||
self.put_slice(&n.to_le_bytes())
|
||||
}
|
||||
|
||||
/// Writes an unsigned 64 bit integer to `self` in native-endian byte order.
|
||||
///
|
||||
/// The current position is advanced by 8.
|
||||
///
|
||||
/// # Examples
|
||||
///
|
||||
/// ```
|
||||
/// use bytes::BufMut;
|
||||
///
|
||||
/// let mut buf = vec![];
|
||||
/// buf.put_u64_ne(0x0102030405060708);
|
||||
/// if cfg!(target_endian = "big") {
|
||||
/// assert_eq!(buf, b"\x01\x02\x03\x04\x05\x06\x07\x08");
|
||||
/// } else {
|
||||
/// assert_eq!(buf, b"\x08\x07\x06\x05\x04\x03\x02\x01");
|
||||
/// }
|
||||
/// ```
|
||||
///
|
||||
/// # Panics
|
||||
///
|
||||
/// This function panics if there is not enough remaining capacity in
|
||||
/// `self`.
|
||||
fn put_u64_ne(&mut self, n: u64) {
|
||||
self.put_slice(&n.to_ne_bytes())
|
||||
}
|
||||
|
||||
/// Writes a signed 64 bit integer to `self` in the big-endian byte order.
|
||||
///
|
||||
/// The current position is advanced by 8.
|
||||
@@ -606,6 +736,32 @@ pub unsafe trait BufMut {
|
||||
self.put_slice(&n.to_le_bytes())
|
||||
}
|
||||
|
||||
/// Writes a signed 64 bit integer to `self` in native-endian byte order.
|
||||
///
|
||||
/// The current position is advanced by 8.
|
||||
///
|
||||
/// # Examples
|
||||
///
|
||||
/// ```
|
||||
/// use bytes::BufMut;
|
||||
///
|
||||
/// let mut buf = vec![];
|
||||
/// buf.put_i64_ne(0x0102030405060708);
|
||||
/// if cfg!(target_endian = "big") {
|
||||
/// assert_eq!(buf, b"\x01\x02\x03\x04\x05\x06\x07\x08");
|
||||
/// } else {
|
||||
/// assert_eq!(buf, b"\x08\x07\x06\x05\x04\x03\x02\x01");
|
||||
/// }
|
||||
/// ```
|
||||
///
|
||||
/// # Panics
|
||||
///
|
||||
/// This function panics if there is not enough remaining capacity in
|
||||
/// `self`.
|
||||
fn put_i64_ne(&mut self, n: i64) {
|
||||
self.put_slice(&n.to_ne_bytes())
|
||||
}
|
||||
|
||||
/// Writes an unsigned 128 bit integer to `self` in the big-endian byte order.
|
||||
///
|
||||
/// The current position is advanced by 16.
|
||||
@@ -650,6 +806,32 @@ pub unsafe trait BufMut {
|
||||
self.put_slice(&n.to_le_bytes())
|
||||
}
|
||||
|
||||
/// Writes an unsigned 128 bit integer to `self` in native-endian byte order.
|
||||
///
|
||||
/// The current position is advanced by 16.
|
||||
///
|
||||
/// # Examples
|
||||
///
|
||||
/// ```
|
||||
/// use bytes::BufMut;
|
||||
///
|
||||
/// let mut buf = vec![];
|
||||
/// buf.put_u128_ne(0x01020304050607080910111213141516);
|
||||
/// if cfg!(target_endian = "big") {
|
||||
/// assert_eq!(buf, b"\x01\x02\x03\x04\x05\x06\x07\x08\x09\x10\x11\x12\x13\x14\x15\x16");
|
||||
/// } else {
|
||||
/// assert_eq!(buf, b"\x16\x15\x14\x13\x12\x11\x10\x09\x08\x07\x06\x05\x04\x03\x02\x01");
|
||||
/// }
|
||||
/// ```
|
||||
///
|
||||
/// # Panics
|
||||
///
|
||||
/// This function panics if there is not enough remaining capacity in
|
||||
/// `self`.
|
||||
fn put_u128_ne(&mut self, n: u128) {
|
||||
self.put_slice(&n.to_ne_bytes())
|
||||
}
|
||||
|
||||
/// Writes a signed 128 bit integer to `self` in the big-endian byte order.
|
||||
///
|
||||
/// The current position is advanced by 16.
|
||||
@@ -694,6 +876,32 @@ pub unsafe trait BufMut {
|
||||
self.put_slice(&n.to_le_bytes())
|
||||
}
|
||||
|
||||
/// Writes a signed 128 bit integer to `self` in native-endian byte order.
|
||||
///
|
||||
/// The current position is advanced by 16.
|
||||
///
|
||||
/// # Examples
|
||||
///
|
||||
/// ```
|
||||
/// use bytes::BufMut;
|
||||
///
|
||||
/// let mut buf = vec![];
|
||||
/// buf.put_i128_ne(0x01020304050607080910111213141516);
|
||||
/// if cfg!(target_endian = "big") {
|
||||
/// assert_eq!(buf, b"\x01\x02\x03\x04\x05\x06\x07\x08\x09\x10\x11\x12\x13\x14\x15\x16");
|
||||
/// } else {
|
||||
/// assert_eq!(buf, b"\x16\x15\x14\x13\x12\x11\x10\x09\x08\x07\x06\x05\x04\x03\x02\x01");
|
||||
/// }
|
||||
/// ```
|
||||
///
|
||||
/// # Panics
|
||||
///
|
||||
/// This function panics if there is not enough remaining capacity in
|
||||
/// `self`.
|
||||
fn put_i128_ne(&mut self, n: i128) {
|
||||
self.put_slice(&n.to_ne_bytes())
|
||||
}
|
||||
|
||||
/// Writes an unsigned n-byte integer to `self` in big-endian byte order.
|
||||
///
|
||||
/// The current position is advanced by `nbytes`.
|
||||
@@ -738,6 +946,36 @@ pub unsafe trait BufMut {
|
||||
self.put_slice(&n.to_le_bytes()[0..nbytes]);
|
||||
}
|
||||
|
||||
/// Writes an unsigned n-byte integer to `self` in the native-endian byte order.
|
||||
///
|
||||
/// The current position is advanced by `nbytes`.
|
||||
///
|
||||
/// # Examples
|
||||
///
|
||||
/// ```
|
||||
/// use bytes::BufMut;
|
||||
///
|
||||
/// let mut buf = vec![];
|
||||
/// buf.put_uint_ne(0x010203, 3);
|
||||
/// if cfg!(target_endian = "big") {
|
||||
/// assert_eq!(buf, b"\x01\x02\x03");
|
||||
/// } else {
|
||||
/// assert_eq!(buf, b"\x03\x02\x01");
|
||||
/// }
|
||||
/// ```
|
||||
///
|
||||
/// # Panics
|
||||
///
|
||||
/// This function panics if there is not enough remaining capacity in
|
||||
/// `self`.
|
||||
fn put_uint_ne(&mut self, n: u64, nbytes: usize) {
|
||||
if cfg!(target_endian = "big") {
|
||||
self.put_uint(n, nbytes)
|
||||
} else {
|
||||
self.put_uint_le(n, nbytes)
|
||||
}
|
||||
}
|
||||
|
||||
/// Writes low `nbytes` of a signed integer to `self` in big-endian byte order.
|
||||
///
|
||||
/// The current position is advanced by `nbytes`.
|
||||
@@ -782,6 +1020,36 @@ pub unsafe trait BufMut {
|
||||
self.put_slice(&n.to_le_bytes()[0..nbytes]);
|
||||
}
|
||||
|
||||
/// Writes low `nbytes` of a signed integer to `self` in native-endian byte order.
|
||||
///
|
||||
/// The current position is advanced by `nbytes`.
|
||||
///
|
||||
/// # Examples
|
||||
///
|
||||
/// ```
|
||||
/// use bytes::BufMut;
|
||||
///
|
||||
/// let mut buf = vec![];
|
||||
/// buf.put_int_ne(0x010203, 3);
|
||||
/// if cfg!(target_endian = "big") {
|
||||
/// assert_eq!(buf, b"\x01\x02\x03");
|
||||
/// } else {
|
||||
/// assert_eq!(buf, b"\x03\x02\x01");
|
||||
/// }
|
||||
/// ```
|
||||
///
|
||||
/// # Panics
|
||||
///
|
||||
/// This function panics if there is not enough remaining capacity in
|
||||
/// `self` or if `nbytes` is greater than 8.
|
||||
fn put_int_ne(&mut self, n: i64, nbytes: usize) {
|
||||
if cfg!(target_endian = "big") {
|
||||
self.put_int(n, nbytes)
|
||||
} else {
|
||||
self.put_int_le(n, nbytes)
|
||||
}
|
||||
}
|
||||
|
||||
/// Writes an IEEE754 single-precision (4 bytes) floating point number to
|
||||
/// `self` in big-endian byte order.
|
||||
///
|
||||
@@ -828,6 +1096,33 @@ pub unsafe trait BufMut {
|
||||
self.put_u32_le(n.to_bits());
|
||||
}
|
||||
|
||||
/// Writes an IEEE754 single-precision (4 bytes) floating point number to
|
||||
/// `self` in native-endian byte order.
|
||||
///
|
||||
/// The current position is advanced by 4.
|
||||
///
|
||||
/// # Examples
|
||||
///
|
||||
/// ```
|
||||
/// use bytes::BufMut;
|
||||
///
|
||||
/// let mut buf = vec![];
|
||||
/// buf.put_f32_ne(1.2f32);
|
||||
/// if cfg!(target_endian = "big") {
|
||||
/// assert_eq!(buf, b"\x3F\x99\x99\x9A");
|
||||
/// } else {
|
||||
/// assert_eq!(buf, b"\x9A\x99\x99\x3F");
|
||||
/// }
|
||||
/// ```
|
||||
///
|
||||
/// # Panics
|
||||
///
|
||||
/// This function panics if there is not enough remaining capacity in
|
||||
/// `self`.
|
||||
fn put_f32_ne(&mut self, n: f32) {
|
||||
self.put_u32_ne(n.to_bits());
|
||||
}
|
||||
|
||||
/// Writes an IEEE754 double-precision (8 bytes) floating point number to
|
||||
/// `self` in big-endian byte order.
|
||||
///
|
||||
@@ -874,6 +1169,33 @@ pub unsafe trait BufMut {
|
||||
self.put_u64_le(n.to_bits());
|
||||
}
|
||||
|
||||
/// Writes an IEEE754 double-precision (8 bytes) floating point number to
|
||||
/// `self` in native-endian byte order.
|
||||
///
|
||||
/// The current position is advanced by 8.
|
||||
///
|
||||
/// # Examples
|
||||
///
|
||||
/// ```
|
||||
/// use bytes::BufMut;
|
||||
///
|
||||
/// let mut buf = vec![];
|
||||
/// buf.put_f64_ne(1.2f64);
|
||||
/// if cfg!(target_endian = "big") {
|
||||
/// assert_eq!(buf, b"\x3F\xF3\x33\x33\x33\x33\x33\x33");
|
||||
/// } else {
|
||||
/// assert_eq!(buf, b"\x33\x33\x33\x33\x33\x33\xF3\x3F");
|
||||
/// }
|
||||
/// ```
|
||||
///
|
||||
/// # Panics
|
||||
///
|
||||
/// This function panics if there is not enough remaining capacity in
|
||||
/// `self`.
|
||||
fn put_f64_ne(&mut self, n: f64) {
|
||||
self.put_u64_ne(n.to_bits());
|
||||
}
|
||||
|
||||
/// Creates an adaptor which can write at most `limit` bytes to `self`.
|
||||
///
|
||||
/// # Examples
|
||||
@@ -986,6 +1308,10 @@ macro_rules! deref_forward_bufmut {
|
||||
(**self).put_u16_le(n)
|
||||
}
|
||||
|
||||
fn put_u16_ne(&mut self, n: u16) {
|
||||
(**self).put_u16_ne(n)
|
||||
}
|
||||
|
||||
fn put_i16(&mut self, n: i16) {
|
||||
(**self).put_i16(n)
|
||||
}
|
||||
@@ -994,6 +1320,10 @@ macro_rules! deref_forward_bufmut {
|
||||
(**self).put_i16_le(n)
|
||||
}
|
||||
|
||||
fn put_i16_ne(&mut self, n: i16) {
|
||||
(**self).put_i16_ne(n)
|
||||
}
|
||||
|
||||
fn put_u32(&mut self, n: u32) {
|
||||
(**self).put_u32(n)
|
||||
}
|
||||
@@ -1002,6 +1332,10 @@ macro_rules! deref_forward_bufmut {
|
||||
(**self).put_u32_le(n)
|
||||
}
|
||||
|
||||
fn put_u32_ne(&mut self, n: u32) {
|
||||
(**self).put_u32_ne(n)
|
||||
}
|
||||
|
||||
fn put_i32(&mut self, n: i32) {
|
||||
(**self).put_i32(n)
|
||||
}
|
||||
@@ -1010,6 +1344,10 @@ macro_rules! deref_forward_bufmut {
|
||||
(**self).put_i32_le(n)
|
||||
}
|
||||
|
||||
fn put_i32_ne(&mut self, n: i32) {
|
||||
(**self).put_i32_ne(n)
|
||||
}
|
||||
|
||||
fn put_u64(&mut self, n: u64) {
|
||||
(**self).put_u64(n)
|
||||
}
|
||||
@@ -1018,6 +1356,10 @@ macro_rules! deref_forward_bufmut {
|
||||
(**self).put_u64_le(n)
|
||||
}
|
||||
|
||||
fn put_u64_ne(&mut self, n: u64) {
|
||||
(**self).put_u64_ne(n)
|
||||
}
|
||||
|
||||
fn put_i64(&mut self, n: i64) {
|
||||
(**self).put_i64(n)
|
||||
}
|
||||
@@ -1025,6 +1367,10 @@ macro_rules! deref_forward_bufmut {
|
||||
fn put_i64_le(&mut self, n: i64) {
|
||||
(**self).put_i64_le(n)
|
||||
}
|
||||
|
||||
fn put_i64_ne(&mut self, n: i64) {
|
||||
(**self).put_i64_ne(n)
|
||||
}
|
||||
};
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user