(&mut self, addr: usize, len: usize, val: u8)
| 210 | |
| 211 | #[inline(always)] |
| 212 | fn fill(&mut self, addr: usize, len: usize, val: u8) -> Option<()> { |
| 213 | let end = self.checked_end(addr, len)?; |
| 214 | let mut pos = addr; |
| 215 | |
| 216 | while pos < end { |
| 217 | let chunk_idx = pos >> self.chunk_shift; |
| 218 | let chunk_offset = pos & self.chunk_mask; |
| 219 | let chunk_start = chunk_idx << self.chunk_shift; |
| 220 | let chunk_full_len = min(self.chunk_size, self.len - chunk_start); |
| 221 | let chunk_end = min(chunk_start + self.chunk_size, end); |
| 222 | let fill_len = chunk_end - pos; |
| 223 | |
| 224 | if val == 0 { |
| 225 | if chunk_offset == 0 && fill_len == chunk_full_len { |
| 226 | self.chunks[chunk_idx] = None; |
| 227 | } else if let Some(Some(chunk)) = self.chunks.get_mut(chunk_idx) { |
| 228 | chunk[chunk_offset..chunk_offset + fill_len].fill(0); |
| 229 | } |
| 230 | } else { |
| 231 | self.chunk_mut(chunk_idx).ok()?[chunk_offset..chunk_offset + fill_len].fill(val); |
| 232 | } |
| 233 | |
| 234 | pos = chunk_end; |
| 235 | } |
| 236 | |
| 237 | Some(()) |
| 238 | } |
| 239 | |
| 240 | #[inline(always)] |
| 241 | fn copy_within(&mut self, dst: usize, src: usize, len: usize) -> Option<()> { |
no test coverage detected