Prepare mem_access commons

This commit is contained in:
Syrus Akbary
2023-02-09 16:52:48 -08:00
parent bd55e7b2a0
commit 039098ce2c
4 changed files with 11 additions and 9 deletions

View File

@@ -103,6 +103,7 @@ impl<'a> MemoryView<'a> {
Bytes(self.size as usize).try_into().unwrap() Bytes(self.size as usize).try_into().unwrap()
} }
#[inline]
pub(crate) fn buffer(&self) -> MemoryBuffer<'a> { pub(crate) fn buffer(&self) -> MemoryBuffer<'a> {
MemoryBuffer { MemoryBuffer {
base: &self.view as *const _ as *mut _, base: &self.view as *const _ as *mut _,

View File

@@ -30,12 +30,12 @@ pub enum MemoryAccessError {
impl From<MemoryAccessError> for RuntimeError { impl From<MemoryAccessError> for RuntimeError {
fn from(err: MemoryAccessError) -> Self { fn from(err: MemoryAccessError) -> Self {
RuntimeError::new(err.to_string()) Self::new(err.to_string())
} }
} }
impl From<FromUtf8Error> for MemoryAccessError { impl From<FromUtf8Error> for MemoryAccessError {
fn from(_err: FromUtf8Error) -> Self { fn from(_err: FromUtf8Error) -> Self {
MemoryAccessError::NonUtf8String Self::NonUtf8String
} }
} }
@@ -158,7 +158,7 @@ impl<'a, T: ValueType> WasmSlice<'a, T> {
/// ///
/// Returns a `MemoryAccessError` if the slice length overflows. /// Returns a `MemoryAccessError` if the slice length overflows.
#[inline] #[inline]
pub fn new(memory: &'a MemoryView, offset: u64, len: u64) -> Result<Self, MemoryAccessError> { pub fn new(view: &'a MemoryView, offset: u64, len: u64) -> Result<Self, MemoryAccessError> {
let total_len = len let total_len = len
.checked_mul(mem::size_of::<T>() as u64) .checked_mul(mem::size_of::<T>() as u64)
.ok_or(MemoryAccessError::Overflow)?; .ok_or(MemoryAccessError::Overflow)?;
@@ -166,7 +166,7 @@ impl<'a, T: ValueType> WasmSlice<'a, T> {
.checked_add(total_len) .checked_add(total_len)
.ok_or(MemoryAccessError::Overflow)?; .ok_or(MemoryAccessError::Overflow)?;
Ok(Self { Ok(Self {
buffer: memory.buffer(), buffer: view.buffer(),
offset, offset,
len, len,
marker: PhantomData, marker: PhantomData,
@@ -197,7 +197,7 @@ impl<'a, T: ValueType> WasmSlice<'a, T> {
self.len self.len
} }
/// Return if the slice is empty. /// Returns `true` if the number of elements is 0.
#[inline] #[inline]
pub fn is_empty(&self) -> bool { pub fn is_empty(&self) -> bool {
self.len == 0 self.len == 0
@@ -367,7 +367,7 @@ impl<'a, T: ValueType> Iterator for WasmSliceIter<'a, T> {
type Item = WasmRef<'a, T>; type Item = WasmRef<'a, T>;
fn next(&mut self) -> Option<Self::Item> { fn next(&mut self) -> Option<Self::Item> {
if self.slice.len() != 0 { if !self.slice.is_empty() {
let elem = self.slice.index(0); let elem = self.slice.index(0);
self.slice = self.slice.subslice(1..self.slice.len()); self.slice = self.slice.subslice(1..self.slice.len());
Some(elem) Some(elem)
@@ -383,7 +383,7 @@ impl<'a, T: ValueType> Iterator for WasmSliceIter<'a, T> {
impl<'a, T: ValueType> DoubleEndedIterator for WasmSliceIter<'a, T> { impl<'a, T: ValueType> DoubleEndedIterator for WasmSliceIter<'a, T> {
fn next_back(&mut self) -> Option<Self::Item> { fn next_back(&mut self) -> Option<Self::Item> {
if self.slice.len() != 0 { if !self.slice.is_empty() {
let elem = self.slice.index(self.slice.len() - 1); let elem = self.slice.index(self.slice.len() - 1);
self.slice = self.slice.subslice(0..self.slice.len() - 1); self.slice = self.slice.subslice(0..self.slice.len() - 1);
Some(elem) Some(elem)

View File

@@ -96,6 +96,7 @@ impl<'a> MemoryView<'a> {
self.size self.size
} }
#[inline]
pub(crate) fn buffer(&'a self) -> MemoryBuffer<'a> { pub(crate) fn buffer(&'a self) -> MemoryBuffer<'a> {
self.buffer self.buffer
} }

View File

@@ -64,7 +64,7 @@ impl<'a, T: ValueType> WasmRef<'a, T> {
#[inline] #[inline]
pub fn new(view: &'a MemoryView, offset: u64) -> Self { pub fn new(view: &'a MemoryView, offset: u64) -> Self {
Self { Self {
buffer: view.buffer, buffer: view.buffer(),
offset, offset,
marker: PhantomData, marker: PhantomData,
} }
@@ -201,7 +201,7 @@ impl<'a, T: ValueType> WasmSlice<'a, T> {
/// Returns `true` if the number of elements is 0. /// Returns `true` if the number of elements is 0.
#[inline] #[inline]
pub fn is_empty(self) -> bool { pub fn is_empty(&self) -> bool {
self.len == 0 self.len == 0
} }