# Safety This is highly unsafe, due to pointer
(
p: Option<NonNull<Node<K, V>>>,
mut key: &'a K,
)
| 144 | /// |
| 145 | /// This is highly unsafe, due to pointer |
| 146 | unsafe fn succ<'a, K: 'a, V: 'a>( |
| 147 | p: Option<NonNull<Node<K, V>>>, |
| 148 | mut key: &'a K, |
| 149 | ) -> Option<NonNull<Node<K, V>>> |
| 150 | where |
| 151 | K: Ord, |
| 152 | { |
| 153 | find(p, key).and_then(|node| { |
| 154 | let mut nq = NodeQuery::new(Some(node)); |
| 155 | match nq.right().node { |
| 156 | //右分支的最小值 |
| 157 | Some(r) => find_min(Some(r)), |
| 158 | None => { |
| 159 | //右分支为空,向上找 |
| 160 | loop { |
| 161 | nq = nq.parent(); |
| 162 | match nq.right_key() { |
| 163 | Some(r) if r == key => key = nq.get_key().unwrap(), |
| 164 | _ => return nq.node, |
| 165 | } |
| 166 | } |
| 167 | } |
| 168 | } |
| 169 | }) |
| 170 | } |
| 171 | |
| 172 | /// # Safety |
| 173 | /// |