stdx/
ptr.rs

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
#![allow(unsafe_code, clippy::missing_safety_doc)]

#[inline(always)]
pub fn cast_ptr<T: ?Sized, U>(p: &T) -> *const U {
    <*const T>::cast(p)
}

#[inline(always)]
pub fn cast_ptr_mut<T: ?Sized, U>(p: &mut T) -> *mut U {
    <*mut T>::cast(p)
}

#[inline(always)]
pub unsafe fn read_at<T>(src: *const T, idx: usize) -> T {
    src.add(idx).read()
}

#[inline(always)]
pub unsafe fn write_at<T>(dst: *mut T, idx: usize, val: T) {
    dst.add(idx).write(val);
}

#[inline(always)]
pub unsafe fn cast_read_at<T, U>(src: *const T, idx: usize) -> U {
    src.add(idx).cast::<U>().read()
}

#[inline(always)]
pub unsafe fn cast_write_at<T, U>(dst: *mut T, idx: usize, val: U) {
    dst.add(idx).cast::<U>().write(val);
}