Return interior pointers more uniformly.

v0.7.x
whitequark 2016-12-13 22:37:05 +00:00
parent 53309f8271
commit 57e544cc8c
4 changed files with 25 additions and 19 deletions

View File

@ -169,8 +169,8 @@ impl<'a, DeviceT: Device, ArpCacheT: ArpCache> Interface<'a, DeviceT, ArpCacheT>
if let Response::Nop = response { return Ok(()) }
let tx_size = self.device.mtu();
let tx_buffer = try!(self.device.transmit(tx_size));
let mut frame = try!(EthernetFrame::new(tx_buffer));
let mut tx_buffer = try!(self.device.transmit(tx_size));
let mut frame = try!(EthernetFrame::new(&mut tx_buffer));
frame.set_src_addr(self.hardware_addr);
match response {

View File

@ -148,7 +148,9 @@ impl<T: AsRef<[u8]> + AsMut<[u8]>> Frame<T> {
let data = self.buffer.as_mut();
NetworkEndian::write_u16(&mut data[field::ETHERTYPE], value.into())
}
}
impl<'a, T: AsRef<[u8]> + AsMut<[u8]> + ?Sized> Frame<&'a mut T> {
/// Return a mutable pointer to the payload.
#[inline(always)]
pub fn payload_mut(&mut self) -> &mut [u8] {

View File

@ -272,14 +272,6 @@ impl<T: AsRef<[u8]> + AsMut<[u8]>> Packet<T> {
NetworkEndian::write_u16(&mut data[field::ECHO_SEQNO], value)
}
/// Return a mutable pointer to the type-specific data.
#[inline(always)]
pub fn data_mut(&mut self) -> &mut [u8] {
let range = self.header_len()..;
let mut data = self.buffer.as_mut();
&mut data[range]
}
/// Compute and fill in the header checksum.
pub fn fill_checksum(&mut self) {
self.set_checksum(0);
@ -291,6 +283,16 @@ impl<T: AsRef<[u8]> + AsMut<[u8]>> Packet<T> {
}
}
impl<'a, T: AsRef<[u8]> + AsMut<[u8]> + ?Sized> Packet<&'a mut T> {
/// Return a mutable pointer to the type-specific data.
#[inline(always)]
pub fn data_mut(&mut self) -> &mut [u8] {
let range = self.header_len()..;
let mut data = self.buffer.as_mut();
&mut data[range]
}
}
/// A high-level representation of an Internet Control Message Protocol version 4 packet header.
#[derive(Debug, PartialEq, Eq, Clone, Copy)]
pub enum Repr<'a> {
@ -344,7 +346,7 @@ impl<'a> Repr<'a> {
}
/// Emit a high-level representation into an Internet Protocol version 4 packet.
pub fn emit<T: AsRef<[u8]> + AsMut<[u8]>>(&self, packet: &mut Packet<T>) {
pub fn emit<T: AsRef<[u8]> + AsMut<[u8]> + ?Sized>(&self, packet: &mut Packet<&mut T>) {
packet.set_msg_code(0);
match self {
&Repr::EchoRequest { ident, seq_no, data } => {

View File

@ -329,14 +329,6 @@ impl<T: AsRef<[u8]> + AsMut<[u8]>> Packet<T> {
data[field::DST_ADDR].copy_from_slice(value.as_bytes())
}
/// Return a mutable pointer to the payload.
#[inline(always)]
pub fn payload_mut(&mut self) -> &mut [u8] {
let range = self.header_len() as usize..;
let data = self.buffer.as_mut();
&mut data[range]
}
/// Compute and fill in the header checksum.
pub fn fill_checksum(&mut self) {
self.set_checksum(0);
@ -348,6 +340,16 @@ impl<T: AsRef<[u8]> + AsMut<[u8]>> Packet<T> {
}
}
impl<'a, T: AsRef<[u8]> + AsMut<[u8]> + ?Sized> Packet<&'a mut T> {
/// Return a mutable pointer to the payload.
#[inline(always)]
pub fn payload_mut(&mut self) -> &mut [u8] {
let range = self.header_len() as usize..;
let data = self.buffer.as_mut();
&mut data[range]
}
}
/// A high-level representation of an Internet Protocol version 4 packet header.
#[derive(Debug, PartialEq, Eq, Clone, Copy)]
pub struct Repr {