}
pub fn pop_front(&mut self) -> Option<T> {
- let tok = self.noalias.token_mut();
- Self::pop_front_inner(
- tok,
+ let mut tok = self.noalias.token_mut();
+ let deleted = Self::pop_front_inner(
+ tok.as_mut(),
&mut self.head,
&mut self.tail,
- )
+ )?;
+ let deleted = unsafe { deleted.free_heap_return(&mut tok) };
+ Some(deleted.data)
}
pub fn head_and_tail_mut(&mut self) -> HeadAndTail<&mut T> {
})
}
- // We wouldn't do this, since it's daft, but
- // it lets us demonstrate passing a token.
fn pop_front_inner<'a>(
mut tok: TokenMut<'a>,
head: &mut Option<P<T>>,
tail: &mut Option<P<T>>,
- ) -> Option<T> {
+ ) -> Option<P<T>> {
let deleting = (*head)?;
let new_head = deleting.borrow(&tok).next;
*head = new_head;
} else {
*tail = None;
}
- let deleted = unsafe { deleting.free_heap_return(&mut tok) };
- Some(deleted.data)
+ Some(deleting)
}
fn iter_ptrs<'i, I: 'i>(