1use sycl_rs_sys::{context::ffi, kernel_bundle, types::ffi::DevicePtr};
10
11use crate::{Result, device::Device, kernel::SourceKernelBundle};
12
13pub struct Context(pub(crate) cxx::UniquePtr<ffi::Context>);
16
17impl From<cxx::UniquePtr<ffi::Context>> for Context {
18 fn from(value: cxx::UniquePtr<ffi::Context>) -> Self {
19 Self(value)
20 }
21}
22
23impl Context {
24 pub fn new(devices: &[&Device]) -> Result<Self> {
28 let devices = devices
29 .iter()
30 .map(|d| DevicePtr {
31 ptr: (*d).clone().0,
32 })
33 .collect::<Vec<_>>();
34
35 ffi::new_context(devices).map(Into::into)
36 }
37
38 pub fn create_kernel_bundle_from_source(&self, source: &str) -> Result<SourceKernelBundle> {
39 kernel_bundle::ffi::create_kernel_bundle_from_source(&self.0, source).map(Into::into)
40 }
41}