# `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.