}
}
+impl<'a, T> From<&'a mut Link<T>> for Rawlink<Node<T>> {
+ fn from(node: &'a mut Link<T>) -> Self {
+ match node.as_mut() {
+ None => Rawlink::none(),
+ Some(ptr) => Rawlink::some(ptr),
+ }
+ }
+}
+
impl<T> Clone for Rawlink<T> {
#[inline]
fn clone(&self) -> Rawlink<T> {
fn push_front_node(&mut self, mut new_head: Box<Node<T>>) {
match self.list_head {
None => {
- self.list_tail = Rawlink::some(&mut *new_head);
self.list_head = link_no_prev(new_head);
+ self.list_tail = Rawlink::from(&mut self.list_head);
}
Some(ref mut head) => {
new_head.prev = Rawlink::none();
match unsafe { self.list_tail.resolve_mut() } {
None => return self.push_front_node(new_tail),
Some(tail) => {
- self.list_tail = Rawlink::some(&mut *new_tail);
tail.set_next(new_tail);
+ self.list_tail = Rawlink::from(&mut tail.next);
}
}
self.length += 1;
#[inline]
#[stable(feature = "rust1", since = "1.0.0")]
pub fn iter_mut(&mut self) -> IterMut<T> {
- let head_raw = match self.list_head {
- Some(ref mut h) => Rawlink::some(&mut **h),
- None => Rawlink::none(),
- };
- IterMut{
+ IterMut {
nelem: self.len(),
- head: head_raw,
+ head: Rawlink::from(&mut self.list_head),
tail: self.list_tail,
list: self
}
unsafe {
self.head.resolve_mut().map(|next| {
self.nelem -= 1;
- self.head = match next.next {
- Some(ref mut node) => Rawlink::some(&mut **node),
- None => Rawlink::none(),
- };
+ self.head = Rawlink::from(&mut next.next);
&mut next.value
})
}