Skip to main content

apple_mps/generated/
ndarray.rs

1use crate::ffi;
2use core::ffi::c_void;
3use core::ptr;
4
5macro_rules! opaque_generated_handle {
6    ($name:ident) => {
7        pub struct $name {
8            ptr: *mut c_void,
9        }
10
11        unsafe impl Send for $name {}
12        unsafe impl Sync for $name {}
13
14        impl Drop for $name {
15            fn drop(&mut self) {
16                if !self.ptr.is_null() {
17                    unsafe { ffi::mps_object_release(self.ptr) };
18                    self.ptr = ptr::null_mut();
19                }
20            }
21        }
22
23        impl $name {
24            #[must_use]
25            pub const fn as_ptr(&self) -> *mut c_void {
26                self.ptr
27            }
28
29            /// # Safety
30            ///
31            /// `ptr` must be a valid Objective-C object of the matching MPS type or protocol.
32            #[must_use]
33            pub unsafe fn retained_from_raw(ptr: *mut c_void) -> Option<Self> {
34                let retained = unsafe { ffi::mps_object_retain(ptr) };
35                if retained.is_null() {
36                    None
37                } else {
38                    Some(Self { ptr: retained })
39                }
40            }
41        }
42    };
43}
44
45macro_rules! raw_value_type {
46    ($name:ident, $raw:ty) => {
47        #[derive(Clone, Copy, Debug, Default, PartialEq, Eq, PartialOrd, Ord, Hash)]
48        #[repr(transparent)]
49        pub struct $name(pub $raw);
50
51        impl $name {
52            #[must_use]
53            pub const fn from_raw(raw: $raw) -> Self {
54                Self(raw)
55            }
56
57            #[must_use]
58            pub const fn as_raw(self) -> $raw {
59                self.0
60            }
61        }
62
63        impl From<$raw> for $name {
64            fn from(value: $raw) -> Self {
65                Self(value)
66            }
67        }
68
69        impl From<$name> for $raw {
70            fn from(value: $name) -> Self {
71                value.0
72            }
73        }
74    };
75}
76
77raw_value_type!(NDArrayQuantizationScheme, usize);
78opaque_generated_handle!(NDArrayAffineInt4Dequantize);
79opaque_generated_handle!(NDArrayAffineQuantizationDescriptor);
80opaque_generated_handle!(NDArrayBinaryKernel);
81opaque_generated_handle!(NDArrayBinaryPrimaryGradientKernel);
82opaque_generated_handle!(NDArrayBinarySecondaryGradientKernel);
83opaque_generated_handle!(NDArrayGather);
84opaque_generated_handle!(NDArrayGatherGradient);
85opaque_generated_handle!(NDArrayGatherGradientState);
86opaque_generated_handle!(NDArrayGradientState);
87opaque_generated_handle!(NDArrayLUTDequantize);
88opaque_generated_handle!(NDArrayLUTQuantizationDescriptor);
89opaque_generated_handle!(NDArrayMultiaryBase);
90opaque_generated_handle!(NDArrayMultiaryGradientKernel);
91opaque_generated_handle!(NDArrayMultiaryKernel);
92opaque_generated_handle!(NDArrayQuantizationDescriptor);
93opaque_generated_handle!(NDArrayQuantizedMatrixMultiplication);
94opaque_generated_handle!(NDArrayStridedSlice);
95opaque_generated_handle!(NDArrayStridedSliceGradient);
96opaque_generated_handle!(NDArrayUnaryGradientKernel);
97opaque_generated_handle!(NDArrayUnaryKernel);
98opaque_generated_handle!(NDArrayVectorLUTDequantize);
99opaque_generated_handle!(TemporaryNDArray);
100opaque_generated_handle!(NDArrayAllocator);