nnapi/
burst.rs

1use nnapi_sys::{
2    ANeuralNetworksBurst, ANeuralNetworksBurst_create, ANeuralNetworksBurst_free, ResultCode,
3};
4use std::{
5    ops::{Deref, DerefMut},
6    ptr::{null_mut, NonNull},
7};
8
9use crate::{Compilation, IntoResult};
10
11pub struct Burst {
12    inner: NonNull<ANeuralNetworksBurst>,
13}
14
15impl Burst {
16    pub fn new(compilation: &mut Compilation) -> crate::Result<Burst> {
17        let mut burst = null_mut();
18        unsafe { ANeuralNetworksBurst_create(&mut **compilation, &mut burst) }.into_result()?;
19
20        Ok(Burst {
21            inner: NonNull::new(burst).ok_or(ResultCode::ANEURALNETWORKS_UNEXPECTED_NULL)?,
22        })
23    }
24}
25
26impl Deref for Burst {
27    type Target = ANeuralNetworksBurst;
28
29    #[inline]
30    fn deref(&self) -> &Self::Target {
31        unsafe { self.inner.as_ref() }
32    }
33}
34
35impl DerefMut for Burst {
36    #[inline]
37    fn deref_mut(&mut self) -> &mut Self::Target {
38        unsafe { self.inner.as_mut() }
39    }
40}
41
42impl Drop for Burst {
43    fn drop(&mut self) {
44        unsafe {
45            ANeuralNetworksBurst_free(self.inner.as_mut());
46        }
47    }
48}