use super::device::Device;
#[derive(Default)]
pub struct ReadWrite<TR, TW> {
read: TR,
write: TW,
}
impl<TR, TW> ReadWrite<TR, TW>
where
TR: Device + Default,
TW: Device + Default,
{
pub fn new() -> Self {
Self::default()
}
}
impl<TR, TW> Device for ReadWrite<TR, TW>
where
TR: Device + Default,
TW: Device + Default,
{
fn with_data(data: &[u8]) -> Self {
Self {
read: TR::with_data(data),
write: TW::with_data(data),
}
}
fn init_data(&mut self, data: &[u8]) {
self.read.init_data(data);
}
fn cache_current_read_data(&self, destination: &mut [u8]) {
self.read.cache_current_read_data(destination);
}
fn read(&self, addr: u16) -> u8 {
self.read.read(addr)
}
fn write(&mut self, data: u8, addr: u16) {
self.write.write(data, addr);
}
fn addr_space_size() -> u32
where
Self: Sized,
{
TR::addr_space_size()
}
fn addr_bits_count() -> u8
where
Self: Sized,
{
TR::addr_bits_count()
}
fn addr_space_size_dyn(&self) -> u32 {
self.read.addr_space_size_dyn()
}
fn addr_bits_count_dyn(&self) -> u8 {
self.read.addr_bits_count_dyn()
}
}