use ic_stable_structures::{Memory, memory_manager::VirtualMemory};
use std::rc::Rc;
pub struct RuntimeMemory<M: Memory>(pub(super) VirtualMemory<Rc<M>>);
impl<M: Memory> Clone for RuntimeMemory<M> {
fn clone(&self) -> Self {
Self(self.0.clone())
}
}
impl<M: Memory> Memory for RuntimeMemory<M> {
fn size(&self) -> u64 {
self.0.size()
}
fn grow(&self, pages: u64) -> i64 {
self.0.grow(pages)
}
fn read(&self, offset: u64, dst: &mut [u8]) {
self.0.read(offset, dst);
}
#[allow(
unsafe_code,
reason = "delegate the upstream raw-read contract unchanged"
)]
unsafe fn read_unsafe(&self, offset: u64, dst: *mut u8, count: usize) {
unsafe { self.0.read_unsafe(offset, dst, count) }
}
fn write(&self, offset: u64, src: &[u8]) {
self.0.write(offset, src);
}
}