MCPcopy Create free account
hub / github.com/QMHTMY/RustBook / remove_from_list

Method remove_from_list

publication/code/chapter10/lru.rs:123–153  ·  view source on GitHub ↗
(&mut self, i: usize)

Source from the content-addressed store, hash-verified

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) {

Callers 3

removeMethod · 0.45
accessMethod · 0.45
remove_tailMethod · 0.45

Calls 2

get_mutMethod · 0.45
lenMethod · 0.45

Tested by

no test coverage detected