(&mut self, i: usize)
| 121 | } |
| 122 | |
| 123 | fn remove_from_list(&mut self, i: usize) { |
| 124 | let (prev, next) = { |
| 125 | let entry = self.entries.get_mut(i).unwrap(); |
| 126 | (entry.prev, entry.next) |
| 127 | }; |
| 128 | |
| 129 | match (prev, next) { |
| 130 | // 数据项在缓存中间 |
| 131 | (Some(j), Some(k)) => { |
| 132 | let head = &mut self.entries[j]; |
| 133 | head.next = next; |
| 134 | let next = &mut self.entries[k]; |
| 135 | next.prev = prev; |
| 136 | }, |
| 137 | // 数据项在缓存末尾 |
| 138 | (Some(j), None) => { |
| 139 | let head = &mut self.entries[j]; |
| 140 | head.next = None; |
| 141 | self.tail = prev; |
| 142 | }, |
| 143 | // 数据项在缓存头部 |
| 144 | _ => { |
| 145 | if self.len() > 1 { |
| 146 | let head = &mut self.entries[0]; |
| 147 | head.next = None; |
| 148 | let next = &mut self.entries[1]; |
| 149 | next.prev = None; |
| 150 | } |
| 151 | }, |
| 152 | } |
| 153 | } |
| 154 | |
| 155 | // 确保容量足够,满了就移除末尾的元素 |
| 156 | fn ensure_room(&mut self) { |
no test coverage detected