pub use crate::loader::{AddProgram, Library};
pub use rt::unit::{ADDRESS_BASE, Clock, Event, LoadError, LoadedProgram, Loader, OS_COMMAND_ROUTINES, Observer, RETURN_CODE, StatementFilter};
use crate::Compiled;
use std::rc::Rc;
pub type RunUnit<'w> = rt::unit::RunUnit<'w, Rc<Compiled>, Library>;
#[derive(Clone, Debug, Default, PartialEq, Eq)]
pub struct Remains {
pub mem: Vec<u8>,
pub programs: Vec<(String, usize)>,
pub taint: Option<(Vec<u64>, Option<&'static str>)>,
}
impl Remains {
pub fn of<H: Clone, L: Loader<H>>(unit: &rt::unit::RunUnit<'_, H, L>) -> Self {
let taint = unit.taint.as_ref().map(|t| (t.bits(), t.not_followed()));
Self { mem: unit.mem.clone(), programs: unit.programs.iter().map(|p| (p.name.clone(), p.base)).collect(), taint }
}
}