mod memory;
mod stack;
use alloc::{rc::Rc, vec::Vec};
pub use self::{memory::Memory, stack::Stack};
pub struct Machine<S> {
pub(crate) data: Rc<Vec<u8>>,
pub(crate) code: Rc<Vec<u8>>,
pub retval: Vec<u8>,
pub memory: Memory,
pub stack: Stack,
pub state: S,
}
impl<S> Machine<S> {
pub fn new(
code: Rc<Vec<u8>>,
data: Rc<Vec<u8>>,
stack_limit: usize,
memory_limit: usize,
state: S,
) -> Self {
Self {
data,
code,
retval: Vec::new(),
memory: Memory::new(memory_limit),
stack: Stack::new(stack_limit),
state,
}
}
pub fn code(&self) -> &[u8] {
&self.code
}
#[must_use]
pub fn is_empty(&self) -> bool {
self.code.is_empty()
}
}