(&mut self, new_size: usize)
| 169 | |
| 170 | impl<T> DictInner<T> { |
| 171 | fn resize(&mut self, new_size: usize) { |
| 172 | let new_size = { |
| 173 | let mut i = 1; |
| 174 | while i < new_size { |
| 175 | i <<= 1; |
| 176 | } |
| 177 | i |
| 178 | }; |
| 179 | self.indices = vec![IndexEntry::FREE; new_size]; |
| 180 | let mask = (new_size - 1) as i64; |
| 181 | for (entry_idx, entry) in self.entries.iter_mut().enumerate() { |
| 182 | if let Some(entry) = entry { |
| 183 | let mut idxs = GenIndexes::new(entry.hash, mask); |
| 184 | loop { |
| 185 | let index_index = idxs.next(); |
| 186 | unsafe { |
| 187 | // Safety: index is always valid here |
| 188 | // index_index is generated by idxs |
| 189 | // entry_idx is saved one |
| 190 | let idx = self.indices.get_unchecked_mut(index_index); |
| 191 | if *idx == IndexEntry::FREE { |
| 192 | *idx = IndexEntry::from_index_unchecked(entry_idx); |
| 193 | entry.index = index_index; |
| 194 | break; |
| 195 | } |
| 196 | } |
| 197 | } |
| 198 | } else { |
| 199 | //removed entry |
| 200 | } |
| 201 | } |
| 202 | self.filled = self.used; |
| 203 | } |
| 204 | |
| 205 | fn unchecked_push( |
| 206 | &mut self, |
no test coverage detected