use crate::emulator::emulator::{Mmu, Perm, Trap};
pub trait GuestMem {
fn load8(&self, addr: u32) -> Result<u8, Trap>;
fn load16(&self, addr: u32) -> Result<u16, Trap>;
fn load32(&self, addr: u32) -> Result<u32, Trap>;
fn load64(&self, addr: u32) -> Result<u64, Trap>;
fn store8(&mut self, addr: u32, value: u8) -> Result<(), Trap>;
fn store16(&mut self, addr: u32, value: u16) -> Result<(), Trap>;
fn store32(&mut self, addr: u32, value: u32) -> Result<(), Trap>;
fn store64(&mut self, addr: u32, value: u64) -> Result<(), Trap>;
fn map(&mut self, addr: u32, size: u32, perm: Perm);
fn map_zeroed(&mut self, addr: u32, size: u32, perm: Perm);
fn write_initializer(&mut self, addr: u32, data: &[u8]) -> Result<(), Trap>;
}
impl GuestMem for Mmu {
fn load8(&self, addr: u32) -> Result<u8, Trap> {
Mmu::load8(self, addr)
}
fn load16(&self, addr: u32) -> Result<u16, Trap> {
Mmu::load16(self, addr)
}
fn load32(&self, addr: u32) -> Result<u32, Trap> {
Mmu::load32(self, addr)
}
fn load64(&self, addr: u32) -> Result<u64, Trap> {
Mmu::load64(self, addr)
}
fn store8(&mut self, addr: u32, value: u8) -> Result<(), Trap> {
Mmu::store8(self, addr, value)
}
fn store16(&mut self, addr: u32, value: u16) -> Result<(), Trap> {
Mmu::store16(self, addr, value)
}
fn store32(&mut self, addr: u32, value: u32) -> Result<(), Trap> {
Mmu::store32(self, addr, value)
}
fn store64(&mut self, addr: u32, value: u64) -> Result<(), Trap> {
Mmu::store64(self, addr, value)
}
fn map(&mut self, addr: u32, size: u32, perm: Perm) {
Mmu::map(self, addr, size, perm);
}
fn map_zeroed(&mut self, addr: u32, size: u32, perm: Perm) {
Mmu::map_zeroed(self, addr, size, perm);
}
fn write_initializer(&mut self, addr: u32, data: &[u8]) -> Result<(), Trap> {
Mmu::write_initializer(self, addr, data)
}
}