fix transpose comments

This commit is contained in:
bendn 2023-09-05 07:27:10 +07:00
parent 62fbd6fd1a
commit 0a5f7f14fd
No known key found for this signature in database
GPG key ID: 0D9D3A2A3B2A93D6
2 changed files with 11 additions and 12 deletions

View file

@ -104,38 +104,36 @@ impl<const CHANNELS: usize> Rotations for Image<&mut [u8], CHANNELS> {
// This is done by first flipping // This is done by first flipping
self.flip_v(); self.flip_v();
// Then transposing the image, to save allocations. // Then transposing the image, to save allocations.
// SAFETY: caller ensures rectangularity // SAFETY: caller ensures square
unsafe { transpose(self) }; unsafe { transpose(self) };
} }
#[inline] #[inline]
unsafe fn rot_270(&mut self) { unsafe fn rot_270(&mut self) {
self.flip_h(); self.flip_h();
// SAFETY: caller ensures rectangularity // SAFETY: caller ensures squareness
unsafe { transpose(self) }; unsafe { transpose(self) };
} }
} }
/// Transpose a square image
/// # Safety /// # Safety
/// ///
/// UB if supplied image rectangular /// UB if supplied image rectangular
unsafe fn transpose<const CHANNELS: usize>(img: &mut Image<&mut [u8], CHANNELS>) { unsafe fn transpose<const CHANNELS: usize>(img: &mut Image<&mut [u8], CHANNELS>) {
debug_assert_eq!(img.width(), img.height()); debug_assert_eq!(img.width(), img.height());
let size = img.width(); let size = img.width() as usize;
// SAFETY: no half pixels
let b = unsafe { img.buffer.as_chunks_unchecked_mut::<CHANNELS>() };
for i in 0..size { for i in 0..size {
for j in i..size { for j in i..size {
for c in 0..CHANNELS { // SAFETY: caller ensures squarity
// SAFETY: caller gurantees rectangularity
unsafe { unsafe {
img.buffer.swap_unchecked( b.swap_unchecked(i * size + j, j * size + i);
(i * size + j) as usize * CHANNELS + c,
(j * size + i) as usize * CHANNELS + c,
);
}; };
} }
} }
} }
}
#[cfg(test)] #[cfg(test)]
mod tests { mod tests {

View file

@ -1,5 +1,6 @@
#![feature( #![feature(
slice_swap_unchecked, slice_swap_unchecked,
slice_as_chunks,
unchecked_math, unchecked_math,
portable_simd, portable_simd,
array_chunks, array_chunks,