use sycl_rs_sys::{context::ffi, kernel_bundle, types::ffi::DevicePtr};
use crate::{Result, device::Device, kernel::SourceKernelBundle};
pub struct Context(pub(crate) cxx::UniquePtr<ffi::Context>);
impl From<cxx::UniquePtr<ffi::Context>> for Context {
fn from(value: cxx::UniquePtr<ffi::Context>) -> Self {
Self(value)
}
}
impl Context {
pub fn new(devices: &[&Device]) -> Self {
let devices = devices
.iter()
.map(|d| DevicePtr {
ptr: (*d).clone().0,
})
.collect::<Vec<_>>();
ffi::new_context(devices).into()
}
pub fn create_kernel_bundle_from_source(&self, source: &str) -> Result<SourceKernelBundle> {
kernel_bundle::ffi::create_kernel_bundle_from_source(&self.0, source).map(Into::into)
}
}