Auto merge of #27624 - apasel422:issue-27620, r=Gankro

Closes #27620.
This commit is contained in:
bors 2015-08-18 18:41:17 +00:00
commit 6c11e4a48e

View File

@ -387,8 +387,29 @@ impl<K, V> Node<K, V> {
#[inline]
pub fn as_slices_internal_mut<'b>(&'b mut self) -> MutNodeSlice<'b, K, V> {
// FIXME(#27620): Bad: This relies on structure layout!
unsafe { mem::transmute(self.as_slices_internal()) }
let len = self.len();
let is_leaf = self.is_leaf();
let keys = unsafe { slice::from_raw_parts_mut(*self.keys, len) };
let vals = unsafe { slice::from_raw_parts_mut(*self.vals, len) };
let edges: &mut [_] = if is_leaf {
&mut []
} else {
unsafe {
let data = match self.edges {
None => heap::EMPTY as *mut Node<K,V>,
Some(ref mut p) => **p as *mut Node<K,V>,
};
slice::from_raw_parts_mut(data, len + 1)
}
};
MutNodeSlice {
keys: keys,
vals: vals,
edges: edges,
head_is_edge: true,
tail_is_edge: true,
has_edges: !is_leaf,
}
}
#[inline]