wasmer/entities/memory/buffer/
mod.rs

1use std::{marker::PhantomData, mem::MaybeUninit};
2
3use crate::MemoryAccessError;
4
5pub(crate) mod inner;
6pub(crate) use inner::*;
7
8/// Underlying buffer for a memory.
9#[derive(Debug, Copy, Clone, derive_more::From)]
10pub(crate) struct MemoryBuffer<'a>(pub(crate) BackendMemoryBuffer<'a>);
11
12impl MemoryBuffer<'_> {
13    #[allow(unused)]
14    pub(crate) fn read(&self, offset: u64, buf: &mut [u8]) -> Result<(), MemoryAccessError> {
15        self.0.read(offset, buf)
16    }
17
18    #[allow(unused)]
19    pub(crate) fn read_uninit<'b>(
20        &self,
21        offset: u64,
22        buf: &'b mut [MaybeUninit<u8>],
23    ) -> Result<&'b mut [u8], MemoryAccessError> {
24        self.0.read_uninit(offset, buf)
25    }
26
27    #[allow(unused)]
28    pub(crate) fn write(&self, offset: u64, data: &[u8]) -> Result<(), MemoryAccessError> {
29        self.0.write(offset, data)
30    }
31
32    pub(crate) fn len(&self) -> usize {
33        self.0.len()
34    }
35
36    pub(crate) fn base(&self) -> *mut u8 {
37        self.0.base()
38    }
39
40    /// This is used to determine if the buffer is owned by the memory.
41    ///
42    /// This is only useful for JS memory buffers, as they will slowdown
43    /// if we always need to own the memory in other engines.
44    pub(crate) fn is_owned(&self) -> bool {
45        self.0.is_owned()
46    }
47}