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
self.flip_v();
// Then transposing the image, to save allocations.
// SAFETY: caller ensures rectangularity
// SAFETY: caller ensures square
unsafe { transpose(self) };
}
#[inline]
unsafe fn rot_270(&mut self) {
self.flip_h();
// SAFETY: caller ensures rectangularity
// SAFETY: caller ensures squareness
unsafe { transpose(self) };
}
}
/// Transpose a square image
/// # Safety
///
/// UB if supplied image rectangular
unsafe fn transpose<const CHANNELS: usize>(img: &mut Image<&mut [u8], CHANNELS>) {
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 j in i..size {
for c in 0..CHANNELS {
// SAFETY: caller gurantees rectangularity
// SAFETY: caller ensures squarity
unsafe {
img.buffer.swap_unchecked(
(i * size + j) as usize * CHANNELS + c,
(j * size + i) as usize * CHANNELS + c,
);
b.swap_unchecked(i * size + j, j * size + i);
};
}
}
}
}
#[cfg(test)]
mod tests {

View file

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