use super::StorageCopy;
use crate::server::{IoError, ServerError};
#[cfg(feature = "storage-bytes")]
use crate::storage::BytesStorage;
use crate::storage::ComputeStorage;
pub trait CopyQueue<Storage: ComputeStorage> {
fn wait_device(&mut self) -> Result<(), ServerError>;
fn copy(&mut self, storage: &mut Storage, copy: &StorageCopy) -> Result<(), IoError>;
fn wait_copies(&mut self) -> Result<(), ServerError>;
}
#[cfg(feature = "storage-bytes")]
#[derive(Debug, Default)]
pub struct HostCopies;
#[cfg(feature = "storage-bytes")]
impl CopyQueue<BytesStorage> for HostCopies {
fn wait_device(&mut self) -> Result<(), ServerError> {
Ok(())
}
fn copy(&mut self, storage: &mut BytesStorage, copy: &StorageCopy) -> Result<(), IoError> {
let source = storage.get(©.source)?;
let mut target = storage.get(©.target)?;
target.write().copy_from_slice(source.read());
Ok(())
}
fn wait_copies(&mut self) -> Result<(), ServerError> {
Ok(())
}
}