1 use crate::mem::{size_of, transmute_copy};
2 use crate::ptr::write_bytes;
4 pub(super) trait SpecFill<T> {
5 fn spec_fill(&mut self, value: T);
8 impl<T: Clone> SpecFill<T> for [T] {
9 default fn spec_fill(&mut self, value: T) {
10 if let Some((last, elems)) = self.split_last_mut() {
12 el.clone_from(&value);
20 impl<T: Copy> SpecFill<T> for [T] {
21 fn spec_fill(&mut self, value: T) {
22 if size_of::<T>() == 1 {
23 // SAFETY: The size_of check above ensures that values are 1 byte wide, as required
24 // for the transmute and write_bytes
26 let value: u8 = transmute_copy(&value);
27 write_bytes(self.as_mut_ptr(), value, self.len());
30 for item in self.iter_mut() {