fast image operations
Diffstat (limited to 'src/affine.rs')
-rw-r--r--src/affine.rs16
1 files changed, 7 insertions, 9 deletions
diff --git a/src/affine.rs b/src/affine.rs
index 2568693..b0152a5 100644
--- a/src/affine.rs
+++ b/src/affine.rs
@@ -1,6 +1,4 @@
//! Manages the affine image transformations.
-use std::ops::DerefMut;
-
use crate::{cloner::ImageCloner, Image};
impl<const CHANNELS: usize> ImageCloner<'_, CHANNELS> {
@@ -45,7 +43,7 @@ impl<const CHANNELS: usize> ImageCloner<'_, CHANNELS> {
}
}
-impl<const CHANNELS: usize, T: DerefMut<Target = [u8]>> Image<T, CHANNELS> {
+impl<const CHANNELS: usize, T: AsMut<[u8]> + AsRef<[u8]>> Image<T, CHANNELS> {
/// Flip an image vertically.
pub fn flip_v(&mut self) {
for y in 0..self.height() / 2 {
@@ -127,7 +125,7 @@ impl<const CHANNELS: usize> ImageCloner<'_, CHANNELS> {
}
}
-impl<const CHANNELS: usize, T: DerefMut<Target = [u8]>> Image<T, CHANNELS> {
+impl<const CHANNELS: usize, T: AsMut<[u8]> + AsRef<[u8]>> Image<T, CHANNELS> {
/// Rotate an image 180 degrees clockwise.
pub fn rot_180(&mut self) {
self.flatten_mut().reverse();
@@ -162,7 +160,7 @@ impl<const CHANNELS: usize, T: DerefMut<Target = [u8]>> Image<T, CHANNELS> {
/// # Safety
///
/// UB if supplied image not square
-unsafe fn crev<const CHANNELS: usize, T: DerefMut<Target = [u8]>>(mut img: Image<T, CHANNELS>) {
+unsafe fn crev<const CHANNELS: usize, T: AsMut<[u8]> + AsRef<[u8]>>(mut img: Image<T, CHANNELS>) {
debug_assert_eq!(img.width(), img.height());
let size = img.width() as usize;
let b = img.flatten_mut();
@@ -202,7 +200,7 @@ unsafe fn transpose_out<const CHANNELS: usize>(
/// # Safety
///
/// UB if supplied image rectangular
-unsafe fn transpose<const CHANNELS: usize, T: DerefMut<Target = [u8]>>(
+unsafe fn transpose<const CHANNELS: usize, T: AsMut<[u8]> + AsRef<[u8]>>(
img: &mut Image<T, CHANNELS>,
) {
debug_assert_eq!(img.width(), img.height());
@@ -220,7 +218,7 @@ unsafe fn transpose<const CHANNELS: usize, T: DerefMut<Target = [u8]>>(
/// # Safety
///
/// UB if image not square
-unsafe fn transpose_non_power_of_two<const CHANNELS: usize, T: DerefMut<Target = [u8]>>(
+unsafe fn transpose_non_power_of_two<const CHANNELS: usize, T: AsMut<[u8]> + AsRef<[u8]>>(
img: &mut Image<T, CHANNELS>,
) {
debug_assert_eq!(img.width(), img.height());
@@ -239,7 +237,7 @@ const TILE: usize = 4;
/// # Safety
///
/// be careful
-unsafe fn transpose_tile<const CHANNELS: usize, T: DerefMut<Target = [u8]>>(
+unsafe fn transpose_tile<const CHANNELS: usize, T: AsMut<[u8]> + AsRef<[u8]>>(
img: &mut Image<T, CHANNELS>,
row: usize,
col: usize,
@@ -275,7 +273,7 @@ unsafe fn transpose_tile<const CHANNELS: usize, T: DerefMut<Target = [u8]>>(
/// # Safety
///
/// be careful
-unsafe fn transpose_diag<const CHANNELS: usize, T: DerefMut<Target = [u8]>>(
+unsafe fn transpose_diag<const CHANNELS: usize, T: AsMut<[u8]> + AsRef<[u8]>>(
img: &mut Image<T, CHANNELS>,
pos: usize,
size: usize,