use crate::{memory::write_bytes, send_sync_ptr::SendSyncPtr};
use rustc_hash::FxHashMap;
pub struct Image {
entry: u32,
segments: FxHashMap<u32, Vec<u8>>,
}
impl Image {
pub fn new<'a, T>(entry: u32, iter: T) -> Self
where
T: IntoIterator<Item = (u32, &'a [u8])>,
{
Self {
entry,
segments: iter
.into_iter()
.map(|(addr, data)| (addr, data.to_vec()))
.collect(),
}
}
pub fn load(&mut self, pc: &mut u32, ptr: SendSyncPtr<u8>) {
*pc = self.entry;
for (addr, data) in self.segments.iter() {
unsafe {
write_bytes(ptr.as_ptr(), *addr, data);
}
}
}
}