1#![allow(unsafe_code, clippy::missing_safety_doc)]
2
3#[inline(always)]
4pub fn cast_ptr<T: ?Sized, U>(p: &T) -> *const U {
5 <*const T>::cast(p)
6}
7
8#[inline(always)]
9pub fn cast_ptr_mut<T: ?Sized, U>(p: &mut T) -> *mut U {
10 <*mut T>::cast(p)
11}
12
13#[inline(always)]
14pub unsafe fn read_at<T>(src: *const T, idx: usize) -> T {
15 src.add(idx).read()
16}
17
18#[inline(always)]
19pub unsafe fn write_at<T>(dst: *mut T, idx: usize, val: T) {
20 dst.add(idx).write(val);
21}
22
23#[inline(always)]
24pub unsafe fn cast_read_at<T, U>(src: *const T, idx: usize) -> U {
25 src.add(idx).cast::<U>().read()
26}
27
28#[inline(always)]
29pub unsafe fn cast_write_at<T, U>(dst: *mut T, idx: usize, val: U) {
30 dst.add(idx).cast::<U>().write(val);
31}