use core::ops::{Index, IndexMut};
pub trait UxnMemory {
fn get(&self, address: u16) -> u8;
fn get_short(&self, address: u16) -> u16 {
u16::from_be_bytes([self.get(address), self.get(address.wrapping_add(1))])
}
fn get_mut(&mut self, address: u16) -> &mut u8;
fn set_short(&mut self, address: u16, value: u16) {
let [msb, lsb] = value.to_be_bytes();
*self.get_mut(address) = msb;
*self.get_mut(address.wrapping_add(1)) = lsb;
}
}
impl<T: Index<usize, Output = u8> + IndexMut<usize>> UxnMemory for T {
fn get(&self, address: u16) -> u8 {
self[address as usize]
}
fn get_mut(&mut self, address: u16) -> &mut u8 {
&mut self[address as usize]
}
}