mod test;
mod r#impl;
use crate::ValidLayout;
use crate::mask::{Mask, MaskLayout};
use crate::simd::{Simd, SimdLayout, SimdScalar};
#[expect(clippy::wrong_self_convention)]
pub trait SimdMutPtr<T, const N: usize>: crate::ptr::seal::SimdMutPtr
where
T: Sized,
SimdLayout<*mut T, N>: ValidLayout,
SimdLayout<usize, N>: ValidLayout,
{
#[must_use]
fn null() -> Self;
#[must_use]
fn dangling() -> Self;
#[must_use]
fn with_exposed_provenance(addr: Simd<usize, N>) -> Self
where
SimdLayout<usize, N>: ValidLayout;
#[must_use]
fn without_provenance(addr: Simd<usize, N>) -> Self;
#[cfg_attr(feature = "unstable_docs", doc = "See [`<*mut _>::offset`](pointer::offset).")]
#[cfg_attr(not(feature = "unstable_docs"), doc = "See `<*mut _>::offset`.")]
#[expect(clippy::missing_safety_doc)]
#[must_use]
unsafe fn offset(self, count: Simd<isize, N>) -> Self
where
SimdLayout<isize, N>: ValidLayout;
#[cfg_attr(feature = "unstable_docs", doc = "See [`<*mut _>::byte_offset`](pointer::byte_offset).")]
#[cfg_attr(not(feature = "unstable_docs"), doc = "See `<*mut _>::byte_offset`.")]
#[expect(clippy::missing_safety_doc)]
#[must_use]
unsafe fn byte_offset(self, count: Simd<isize, N>) -> Self
where
SimdLayout<isize, N>: ValidLayout;
#[cfg_attr(feature = "unstable_docs", doc = "See [`<*mut _>::add`](pointer::add).")]
#[cfg_attr(not(feature = "unstable_docs"), doc = "See `<*mut _>::add`.")]
#[expect(clippy::missing_safety_doc)]
#[must_use]
unsafe fn add(self, count: Simd<usize, N>) -> Self
where
SimdLayout<usize, N>: ValidLayout;
#[cfg_attr(feature = "unstable_docs", doc = "See [`<*mut _>::byte_add`](pointer::byte_add).")]
#[cfg_attr(not(feature = "unstable_docs"), doc = "See `<*mut _>::byte_add`.")]
#[expect(clippy::missing_safety_doc)]
#[must_use]
unsafe fn byte_add(self, count: Simd<usize, N>) -> Self
where
SimdLayout<usize, N>: ValidLayout;
#[cfg_attr(feature = "unstable_docs", doc = "See [`<*mut _>::sub`](pointer::sub).")]
#[cfg_attr(not(feature = "unstable_docs"), doc = "See `<*mut _>::sub`.")]
#[expect(clippy::missing_safety_doc)]
#[must_use]
unsafe fn sub(self, count: Simd<usize, N>) -> Self
where
SimdLayout<usize, N>: ValidLayout;
#[cfg_attr(feature = "unstable_docs", doc = "See [`<*mut _>::byte_sub`](pointer::byte_sub).")]
#[cfg_attr(not(feature = "unstable_docs"), doc = "See `<*mut _>::byte_sub`.")]
#[expect(clippy::missing_safety_doc)]
#[must_use]
unsafe fn byte_sub(self, count: Simd<usize, N>) -> Self
where
SimdLayout<usize, N>: ValidLayout;
#[cfg_attr(feature = "unstable_docs", doc = "See [`<*mut _>::wrapping_offset`](pointer::wrapping_offset).")]
#[cfg_attr(not(feature = "unstable_docs"), doc = "See `<*mut _>::wrapping_offset`.")]
#[must_use]
fn wrapping_offset(self, count: Simd<isize, N>) -> Self
where
SimdLayout<isize, N>: ValidLayout;
#[cfg_attr(feature = "unstable_docs", doc = "See [`<*mut _>::wrapping_byte_offset`](pointer::wrapping_byte_offset).")]
#[cfg_attr(not(feature = "unstable_docs"), doc = "See `<*mut _>::wrapping_byte_offset`.")]
#[must_use]
fn wrapping_byte_offset(self, count: Simd<isize, N>) -> Self
where
SimdLayout<isize, N>: ValidLayout;
#[cfg_attr(feature = "unstable_docs", doc = "See [`<*mut _>::wrapping_add`](pointer::wrapping_add).")]
#[cfg_attr(not(feature = "unstable_docs"), doc = "See `<*mut _>::wrapping_add`.")]
#[must_use]
fn wrapping_add(self, count: Simd<usize, N>) -> Self
where
SimdLayout<usize, N>: ValidLayout;
#[cfg_attr(feature = "unstable_docs", doc = "See [`<*mut _>::wrapping_byte_add`](pointer::wrapping_byte_add).")]
#[cfg_attr(not(feature = "unstable_docs"), doc = "See `<*mut _>::wrapping_byte_add`.")]
#[must_use]
fn wrapping_byte_add(self, count: Simd<usize, N>) -> Self
where
SimdLayout<usize, N>: ValidLayout;
#[cfg_attr(feature = "unstable_docs", doc = "See [`<*mut _>::wrapping_sub`](pointer::wrapping_sub).")]
#[cfg_attr(not(feature = "unstable_docs"), doc = "See `<*mut _>::wrapping_sub`.")]
#[must_use]
fn wrapping_sub(self, count: Simd<usize, N>) -> Self
where
SimdLayout<usize, N>: ValidLayout;
#[cfg_attr(feature = "unstable_docs", doc = "See [`<*mut _>::wrapping_byte_sub`](pointer::wrapping_byte_sub).")]
#[cfg_attr(not(feature = "unstable_docs"), doc = "See `<*mut _>::wrapping_byte_sub`.")]
#[must_use]
fn wrapping_byte_sub(self, count: Simd<usize, N>) -> Self
where
SimdLayout<usize, N>: ValidLayout;
#[cfg_attr(feature = "unstable_docs", doc = "See [`<*mut _>::map_addr`](pointer::map_addr).")]
#[cfg_attr(not(feature = "unstable_docs"), doc = "See `<*mut _>::map_addr`.")]
#[must_use]
fn map_addr<F>(self, op: F) -> Self
where
F: FnMut(usize) -> usize,
SimdLayout<usize, N>: ValidLayout;
#[cfg_attr(feature = "unstable_docs", doc = "See [`<*mut _>::read`](pointer::read).")]
#[cfg_attr(not(feature = "unstable_docs"), doc = "See [`ptr::read`](core::ptr::read).")]
#[expect(clippy::missing_safety_doc)]
#[must_use]
unsafe fn read(self) -> Simd<T, N>
where
T: SimdScalar,
SimdLayout<T, N>: ValidLayout;
#[cfg_attr(feature = "unstable_docs", doc = "See [`<*mut _>::read_volatile`](pointer::read_volatile).")]
#[cfg_attr(not(feature = "unstable_docs"), doc = "See [`ptr::read_volatile`](core::ptr::read_volatile).")]
#[expect(clippy::missing_safety_doc)]
#[must_use]
unsafe fn read_volatile(self) -> Simd<T, N>
where
T: SimdScalar,
SimdLayout<T, N>: ValidLayout;
#[cfg_attr(feature = "unstable_docs", doc = "See [`<*mut _>::read_unaligned`](pointer::read_unaligned).")]
#[cfg_attr(not(feature = "unstable_docs"), doc = "See [`ptr::read_unaligned`](core::ptr::read_unaligned).")]
#[expect(clippy::missing_safety_doc)]
#[must_use]
unsafe fn read_unaligned(self) -> Simd<T, N>
where
T: SimdScalar,
SimdLayout<T, N>: ValidLayout;
#[cfg_attr(feature = "unstable_docs", doc = "See [`<*mut _>::write`](pointer::write).")]
#[cfg_attr(not(feature = "unstable_docs"), doc = "See [`ptr::read`](write::ptr::write).")]
#[expect(clippy::missing_safety_doc)]
unsafe fn write(self, value: Simd<T, N>)
where
T: SimdScalar,
SimdLayout<T, N>: ValidLayout;
#[cfg_attr(feature = "unstable_docs", doc = "See [`<*mut _>::write_volatile`](pointer::write_volatile).")]
#[cfg_attr(not(feature = "unstable_docs"), doc = "See [`ptr::write_volatile`](core::ptr::write_volatile).")]
#[expect(clippy::missing_safety_doc)]
unsafe fn write_volatile(self, value: Simd<T, N>)
where
T: SimdScalar,
SimdLayout<T, N>: ValidLayout;
#[cfg_attr(feature = "unstable_docs", doc = "See [`<*mut _>::write_unaligned`](pointer::write_unaligned).")]
#[cfg_attr(not(feature = "unstable_docs"), doc = "See [`ptr::write_unaligned`](core::ptr::write_unaligned).")]
#[expect(clippy::missing_safety_doc)]
unsafe fn write_unaligned(self, value: Simd<T, N>)
where
T: SimdScalar,
SimdLayout<T, N>: ValidLayout;
#[cfg_attr(feature = "unstable_docs", doc = "See [`<*mut _>::addr`](pointer::addr).")]
#[cfg_attr(not(feature = "unstable_docs"), doc = "See `<*mut _>::addr`.")]
#[must_use]
fn addr(self) -> Simd<usize, N>
where
SimdLayout<usize, N>: ValidLayout;
#[cfg_attr(feature = "unstable_docs", doc = "See [`<*mut _>::align_offset`](pointer::align_offset).")]
#[cfg_attr(not(feature = "unstable_docs"), doc = "See `<*mut _>::align_offset`.")]
#[must_use]
fn align_offset(self, align: Simd<usize, N>) -> Simd<usize, N>
where
SimdLayout<usize, N>: ValidLayout;
#[cfg_attr(feature = "unstable_docs", doc = "See [`<*mut _>::is_null`](pointer::is_null).")]
#[cfg_attr(not(feature = "unstable_docs"), doc = "See `<*mut _>::is_null`.")]
#[must_use]
fn is_null(self) -> Mask<N>
where
MaskLayout<N>: ValidLayout;
#[cfg_attr(feature = "unstable_docs", doc = "See [`<*mut _>::is_aligned`](pointer::is_aligned).")]
#[cfg_attr(not(feature = "unstable_docs"), doc = "See `<*mut _>::is_aligned`.")]
#[must_use]
fn is_aligned(self) -> Mask<N>
where
MaskLayout<N>: ValidLayout;
#[cfg_attr(feature = "unstable_docs", doc = "See [`<*mut _>::with_addr`](pointer::with_addr).")]
#[cfg_attr(not(feature = "unstable_docs"), doc = "See `<*mut _>::with_addr`.")]
#[must_use]
fn with_addr(self, addr: Simd<usize, N>) -> Self
where
SimdLayout<usize, N>: ValidLayout;
#[cfg_attr(feature = "unstable_docs", doc = "See [`<*mut _>::cast`](pointer::cast).")]
#[cfg_attr(not(feature = "unstable_docs"), doc = "See `<*mut _>::cast`.")]
#[must_use]
fn cast<U>(self) -> Simd<*mut U, N>
where
U: Sized,
SimdLayout<*mut U, N>: ValidLayout;
#[cfg_attr(feature = "unstable_docs", doc = "See [`<*mut _>::cast_mut`](pointer::cast_mut).")]
#[cfg_attr(not(feature = "unstable_docs"), doc = "See `<*mut _>::cast_mut`.")]
#[must_use]
fn cast_const(self) -> Simd<*const T, N>
where
SimdLayout<*const T, N>: ValidLayout;
#[cfg_attr(feature = "unstable_docs", doc = "See [`<*mut _>::expose_provenance`](pointer::expose_provenance).")]
#[cfg_attr(not(feature = "unstable_docs"), doc = "See `<*mut _>::expose_provenance`.")]
#[must_use]
fn expose_provenance(self) -> Simd<usize, N>
where
SimdLayout<usize, N>: ValidLayout;
}