#![forbid(unsafe_code)]
use crate::{BlurImage, BlurImageMut};
use std::fmt::Debug;
pub(crate) fn gather_channel<'a, T: Copy + Default + Debug, const CN: usize>(
image: &BlurImage<'a, T>,
dest: &mut BlurImageMut<'a, T>,
order: usize,
) {
assert!(order < CN);
image.only_size_matches_mut(dest).unwrap();
let dst_stride = dest.row_stride() as usize;
for (dst, src) in dest.data.borrow_mut().chunks_exact_mut(dst_stride).zip(
image
.data
.as_ref()
.chunks_exact(image.row_stride() as usize),
) {
for (dst, src) in dst.iter_mut().zip(src.as_chunks::<CN>().0.iter()) {
*dst = src[order];
}
}
}
pub fn squash_channel<T: Copy + Default + Debug, const CN: usize>(
image: &mut BlurImageMut<'_, T>,
source: &BlurImage<T>,
order: usize,
) {
assert!(order < CN);
let dst_stride = image.row_stride() as usize;
for (dst, src) in image.data.borrow_mut().chunks_exact_mut(dst_stride).zip(
source
.data
.as_ref()
.chunks_exact(source.row_stride() as usize),
) {
for (dst, src) in dst.as_chunks_mut::<CN>().0.iter_mut().zip(src.iter()) {
dst[order] = *src;
}
}
}