use crate::prelude::Result;
use std::{rc::Rc, sync::Arc};
flat_mod!(scope, raw, flags, global, single, queue);
pub trait Context {
fn as_raw(&self) -> &RawContext;
fn queues(&self) -> &[CommandQueue];
fn next_queue(&self) -> &CommandQueue;
#[inline(always)]
fn flush_all(&self) -> Result<()> {
for queue in self.queues() {
queue.flush()?
}
Ok(())
}
#[inline(always)]
fn finish_all(&self) -> Result<()> {
for queue in self.queues() {
queue.finish()?
}
Ok(())
}
}
impl<T: ?Sized + Context> Context for &T {
#[inline(always)]
fn as_raw(&self) -> &RawContext {
T::as_raw(self)
}
#[inline(always)]
fn queues(&self) -> &[CommandQueue] {
T::queues(self)
}
#[inline(always)]
fn next_queue(&self) -> &CommandQueue {
T::next_queue(self)
}
}
impl<T: ?Sized + Context> Context for Rc<T> {
#[inline(always)]
fn as_raw(&self) -> &RawContext {
T::as_raw(self)
}
#[inline(always)]
fn queues(&self) -> &[CommandQueue] {
T::queues(self)
}
#[inline(always)]
fn next_queue(&self) -> &CommandQueue {
T::next_queue(self)
}
}
impl<T: ?Sized + Context> Context for Arc<T> {
#[inline(always)]
fn as_raw(&self) -> &RawContext {
T::as_raw(self)
}
#[inline(always)]
fn queues(&self) -> &[CommandQueue] {
T::queues(self)
}
#[inline(always)]
fn next_queue(&self) -> &CommandQueue {
T::next_queue(self)
}
}