| 188 | } |
| 189 | |
| 190 | fn put_leaf(&mut self, leaf: &Leaf, after: Option<LeafId>) -> Result<bool, Self::Error> { |
| 191 | let id = leaf.id(); |
| 192 | let is_new = !self.leaves.contains_key(&id); |
| 193 | self.leaves.insert(id, leaf.clone()); |
| 194 | |
| 195 | let leaves = self.branch_leaves.entry(leaf.branch()).or_default(); |
| 196 | if let Some(after_id) = after { |
| 197 | if let Some(pos) = leaves.iter().position(|l| *l == after_id) { |
| 198 | leaves.insert(pos + 1, id); |
| 199 | } else { |
| 200 | leaves.push(id); |
| 201 | } |
| 202 | } else { |
| 203 | leaves.insert(0, id); |
| 204 | } |
| 205 | Ok(is_new) |
| 206 | } |
| 207 | |
| 208 | fn get_leaf(&self, id: LeafId) -> Result<Option<Leaf>, Self::Error> { |
| 209 | Ok(self.leaves.get(&id).cloned()) |