use crate::{Array, Compiled, Error, MetalKernel, MetalLibrary, Result, Stream};
pub fn array_native_handle(array: &Array) -> Result<usize> {
let address = mirtal_sys::ffi::array_native_handle(array.native()?);
if address == 0 {
return Err(Error::NullHandle("native array"));
}
Ok(address)
}
pub unsafe fn array_from_owned_native_handle(address: usize) -> Result<Array> {
Array::from_raw(mirtal_sys::ffi::array_from_owned_native_handle(address)?, "owned native array")
}
pub fn stream_native_value(stream: &Stream) -> Result<usize> {
let address = mirtal_sys::ffi::stream_native_value(stream.native()?);
if address == 0 {
return Err(Error::NullHandle("native stream value"));
}
Ok(address)
}
pub fn compiled_native_handle<const INPUTS: usize, const OUTPUTS: usize>(
compiled: &Compiled<INPUTS, OUTPUTS>,
) -> Result<usize> {
let address = mirtal_sys::ffi::compiled_native_handle(compiled.native()?);
if address == 0 {
return Err(Error::NullHandle("native compiled graph"));
}
Ok(address)
}
pub fn metal_kernel_native_handle<const INPUTS: usize, const OUTPUTS: usize>(
kernel: &MetalKernel<INPUTS, OUTPUTS>,
) -> Result<usize> {
let address = mirtal_sys::ffi::metal_kernel_native_handle(kernel.native()?);
if address == 0 {
return Err(Error::NullHandle("native Metal kernel"));
}
Ok(address)
}
pub fn metal_library_native_handle(library: &MetalLibrary) -> Result<usize> {
let address = mirtal_sys::ffi::metal_library_native_handle(library.native()?);
if address == 0 {
return Err(Error::NullHandle("native Metal library"));
}
Ok(address)
}