zkvmc-core 0.0.1

zkVMc core library
Documentation
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);
            }
        }
    }
}