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

Method remove_from_list

code/chapter09/lru.rs:115–145  ·  view source on GitHub ↗
(&mut self, i: usize)

Source from the content-addressed store, hash-verified

113 }
114
115 fn remove_from_list(&mut self, i: usize) {
116 let (prev, next) = {
117 let entry = self.entries.get_mut(i).unwrap();
118 (entry.prev, entry.next)
119 };
120
121 match (prev, next) {
122 // 数据项在缓存中间
123 (Some(j), Some(k)) => {
124 let head = &mut self.entries[j];
125 head.next = next;
126 let next = &mut self.entries[k];
127 next.prev = prev;
128 },
129 // 数据项在缓存末尾
130 (Some(j), None) => {
131 let head = &mut self.entries[j];
132 head.next = None;
133 self.tail = prev;
134 },
135 // 数据项在缓存头部
136 _ => {
137 if self.len() > 1 {
138 let head = &mut self.entries[0];
139 head.next = None;
140 let next = &mut self.entries[1];
141 next.prev = None;
142 }
143 },
144 }
145 }
146
147 // 确保容量足够,满了就移除末尾的元素
148 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