# Safety This is highly unsafe, due to pointer
(
node: Option<NonNull<Node<K, V>>>,
mut key: &'a K,
)
| 173 | /// |
| 174 | /// This is highly unsafe, due to pointer |
| 175 | unsafe fn pred<'a, K: 'a, V: 'a>( |
| 176 | node: Option<NonNull<Node<K, V>>>, |
| 177 | mut key: &'a K, |
| 178 | ) -> Option<NonNull<Node<K, V>>> |
| 179 | where |
| 180 | K: Ord, |
| 181 | { |
| 182 | find(node, key).and_then(|node| { |
| 183 | let mut nq = NodeQuery::new(Some(node)); |
| 184 | match nq.left().node { |
| 185 | //左分支的最大值 |
| 186 | Some(l) => find_max(Some(l)), |
| 187 | None => { |
| 188 | //左分支为空,向上找 |
| 189 | loop { |
| 190 | nq = nq.parent(); |
| 191 | match nq.left_key() { |
| 192 | Some(l) if l == key => key = nq.get_key().unwrap(), |
| 193 | _ => return nq.node, |
| 194 | } |
| 195 | } |
| 196 | } |
| 197 | } |
| 198 | }) |
| 199 | } |
| 200 | |
| 201 | /// # Safety |
| 202 | /// |