matrixmultiply/
ptr.rs
1use rawpointer::PointerExt;
10
11#[derive(Copy, Clone)]
13#[repr(transparent)]
14pub(crate) struct Ptr<T> { ptr: T }
15unsafe impl<T> Sync for Ptr<*const T> { }
16unsafe impl<T> Sync for Ptr<*mut T> { }
17unsafe impl<T> Send for Ptr<*const T> { }
18unsafe impl<T> Send for Ptr<*mut T> { }
19
20#[allow(non_snake_case)]
26pub(crate) unsafe fn Ptr<T>(ptr: T) -> Ptr<T> { Ptr { ptr } }
27
28impl<T> Ptr<T> {
29 pub(crate) fn ptr(self) -> T
31 where T: Copy
32 {
33 self.ptr
34 }
35}
36
37impl<T> Ptr<*mut T> {
38 pub(crate) fn to_const(self) -> Ptr<*const T> {
40 Ptr { ptr: self.ptr }
41 }
42}
43
44impl<T> PointerExt for Ptr<*const T> {
45 #[inline(always)]
46 unsafe fn offset(self, i: isize) -> Self {
47 Ptr(self.ptr.offset(i))
48 }
49}
50
51impl<T> PointerExt for Ptr<*mut T> {
52 #[inline(always)]
53 unsafe fn offset(self, i: isize) -> Self {
54 Ptr(self.ptr.offset(i))
55 }
56}