fast image operations
Diffstat (limited to 'src/indexed/builder.rs')
| -rw-r--r-- | src/indexed/builder.rs | 20 |
1 files changed, 20 insertions, 0 deletions
diff --git a/src/indexed/builder.rs b/src/indexed/builder.rs index c774712..b00c12f 100644 --- a/src/indexed/builder.rs +++ b/src/indexed/builder.rs @@ -85,4 +85,24 @@ impl<B, P> Builder<B, P> { palette: self.palette.expect("require palette"), } } + + /// Safety + /// + /// read implementation + pub unsafe fn from_iter<I: uint, J>( + self, + iter: impl Iterator<Item = ((u32, u32), I)> + ExactSizeIterator, + ) -> Image<Box<[I]>, P> + where + P: AsRef<[J]>, + { + debug_assert!(iter.len() >= self.width as usize * self.height as usize); + let mut me = self.uninit(); + // SAFETY: the pixel must be in bounds + iter.for_each(|((x, y), item)| unsafe { + me.pixel_mut(x, y).write(item); + }); + // SAFETY: all pixels must have been visited at least once + unsafe { me.assume_init() } + } } |