# `imgref-iter` A small crate for iterating over the rows or columns of `imgref` buffers. This crate exports four traits that allow creating iterators over rows or columns of `imgref::Img`s: - `ImgIterPtr` for `Img<*const [T]>`; allows creating iterators over `*const` pointers - `ImgIterPtrMut` for `Img<*mut [T]>`; allows creating iterators over `*mut` pointers - `ImgIter` for `Img<&[T]>`; allows creating iterators over shared references - `ImgIterMut` for `Img<&mut [T]>`; allows creating iterators over mutable references As well as two utility traits for converting to `Img<*const [T]>` or `Img<*mut [T]>`: - `ImgAsPtr` for conversions to `Img<*const [T]>`. - `ImgAsMutPtr` for conversions to `Img<*mut [T]>`. This is actually not implemented by anything other than `Img<*mut [T]>`, but it exists for the purpose of documenting why it cannot be implemented for `Img<&mut [T]>`. Additionally, when the (experimental!) `simd` feature is enabled, there are four more traits - `ImgSimdIter`, `ImgSimdIterMut`, `ImgSimdIterPtr`, and `ImgSimdIterPtrMut`. These allow creating iterators over *multiple* rows or columns of an image at once. They don't actually depend on SIMD or a nightly compiler - they just return multiple items at once. Methods on `ImgIterPtr` and `ImgIterPtrMut` are `unsafe` because they offset on the provided pointers. `ImgIter` and `ImgIterMut` cannot include safe versions because the pointer iterators may outlive the references. See [the documentation](https://docs.rs/imgref-iter) for more information.