summaryrefslogtreecommitdiff
path: root/crates/utils/src
diff options
context:
space:
mode:
authorNathan Ringo <nathan@remexre.com>2024-09-01 12:26:47 -0500
committerNathan Ringo <nathan@remexre.com>2024-09-01 12:26:47 -0500
commit8b50585b5f15cb52fdb584af5dd4536b9839a802 (patch)
treedc9e52930cdd934bcfff97c083fb187d6c0ea08f /crates/utils/src
parentac876162d111ced97969f5e17accb5d4aec789f6 (diff)
Fix UB.
Diffstat (limited to 'crates/utils/src')
-rw-r--r--crates/utils/src/lib.rs3
-rw-r--r--crates/utils/src/pin.rs28
2 files changed, 0 insertions, 31 deletions
diff --git a/crates/utils/src/lib.rs b/crates/utils/src/lib.rs
deleted file mode 100644
index 57143bc..0000000
--- a/crates/utils/src/lib.rs
+++ /dev/null
@@ -1,3 +0,0 @@
-//! Common utilities.
-
-pub mod pin;
diff --git a/crates/utils/src/pin.rs b/crates/utils/src/pin.rs
deleted file mode 100644
index cdf40fd..0000000
--- a/crates/utils/src/pin.rs
+++ /dev/null
@@ -1,28 +0,0 @@
-//! Utilities having to do with pinning. I sure hope these are sound!
-
-use contracts::requires;
-use core::pin::Pin;
-use std::ptr::NonNull;
-
-/// Iterates over projections of elements out of a pinned slice.
-pub fn pin_project_slice_mut_iter<T>(
- mut slice: Pin<&mut [T]>,
-) -> impl Iterator<Item = Pin<&mut T>> {
- // SAFETY: We never move out of this pointer.
- let base_ptr: NonNull<T> = NonNull::from(unsafe { slice.as_mut().get_unchecked_mut() }).cast();
- (0..slice.len()).map(move |i| {
- // SAFETY: This is in-bounds, since the original slice was valid. No other references to
- // the data can exist, since we visit each index once and have an exclusive borrow on the
- // slice.
- let ptr = unsafe { base_ptr.add(i).as_mut() };
- // SAFETY: This is not certainly sound; see https://github.com/rust-lang/rust/issues/104108
- unsafe { Pin::new_unchecked(ptr) }
- })
-}
-
-/// Projects a single element out of a pinned slice.
-#[requires(index < slice.len())]
-pub fn pin_project_slice_mut<T>(slice: Pin<&mut [T]>, index: usize) -> Pin<&mut T> {
- // SAFETY: This is not certainly sound; see https://github.com/rust-lang/rust/issues/104108
- unsafe { slice.map_unchecked_mut(|slice| &mut slice[index]) }
-}