fast image operations
add a leak method
bendn 2023-10-27
parent 7e1f99d · commit 59bf636
-rw-r--r--Cargo.toml2
-rw-r--r--src/lib.rs16
2 files changed, 17 insertions, 1 deletions
diff --git a/Cargo.toml b/Cargo.toml
index 0de3b77..f21479a 100644
--- a/Cargo.toml
+++ b/Cargo.toml
@@ -1,6 +1,6 @@
[package]
name = "fimg"
-version = "0.4.17"
+version = "0.4.19"
authors = ["bend-n <[email protected]>"]
license = "MIT"
edition = "2021"
diff --git a/src/lib.rs b/src/lib.rs
index cd82ba8..56fd2a9 100644
--- a/src/lib.rs
+++ b/src/lib.rs
@@ -475,6 +475,22 @@ impl<const CHANNELS: usize> Image<Vec<u8>, CHANNELS> {
buffer: vec![0; CHANNELS * width as usize * height as usize],
}
}
+
+ /// Consumes and leaks this image, returning a reference to the image.
+ #[must_use = "not using the returned reference is a memory leak"]
+ pub fn leak(self) -> Image<&'static mut [u8], CHANNELS> {
+ // SAFETY: ctor
+ unsafe { Image::new(self.width, self.height, self.buffer.leak()) }
+ }
+}
+
+impl<const CHANNELS: usize, T: ?Sized> Image<Box<T>, CHANNELS> {
+ /// Consumes and leaks this image, returning a reference to the image.
+ #[must_use = "not using the returned reference is a memory leak"]
+ pub fn leak(self) -> Image<&'static mut T, CHANNELS> {
+ // SAFETY: ctor
+ unsafe { Image::new(self.width, self.height, Box::leak(self.buffer)) }
+ }
}
/// helper macro for defining the save() method.