use crate::commons::numeric::Numeric;
use concrete_cuda::cuda_bind::cuda_drop;
use std::ffi::c_void;
use std::marker::PhantomData;
#[derive(Debug)]
pub struct CudaVec<T: Numeric> {
pub(super) ptr: *mut c_void,
pub(super) idx: u32,
pub(super) len: usize,
pub(super) _phantom: PhantomData<T>,
}
impl<T: Numeric> CudaVec<T> {
pub fn as_c_ptr(&self) -> *const c_void {
self.ptr as *const c_void
}
pub fn as_mut_c_ptr(&mut self) -> *mut c_void {
self.ptr
}
pub fn len(&self) -> usize {
self.len
}
pub fn is_empty(&self) -> bool {
self.len == 0
}
}
impl<T: Numeric> Drop for CudaVec<T> {
fn drop(&mut self) {
unsafe { cuda_drop(self.ptr, self.idx) };
}
}