pub struct WasmSlice<'a, T: ValueType> { /* private fields */ }
Expand description
Reference to an array of values in Wasm memory.
The type of the value must satisfy the requirements of the ValueType
trait which guarantees that reading and writing such a value to untrusted
memory is safe.
The address is not required to be aligned: unaligned accesses are fully supported.
This wrapper safely handles concurrent modifications of the data by another thread.
Implementations§
source§impl<'a, T: ValueType> WasmSlice<'a, T>
impl<'a, T: ValueType> WasmSlice<'a, T>
sourcepub fn new(
view: &'a MemoryView<'_>,
offset: u64,
len: u64
) -> Result<Self, MemoryAccessError>
pub fn new(
view: &'a MemoryView<'_>,
offset: u64,
len: u64
) -> Result<Self, MemoryAccessError>
Creates a new WasmSlice
starting at the given offset in memory and
with the given number of elements.
Returns a MemoryAccessError
if the slice length overflows.
sourcepub fn subslice(self, range: Range<u64>) -> WasmSlice<'a, T>
pub fn subslice(self, range: Range<u64>) -> WasmSlice<'a, T>
Get a WasmSlice
for a subslice of this slice.
sourcepub fn iter(self) -> WasmSliceIter<'a, T> ⓘ
pub fn iter(self) -> WasmSliceIter<'a, T> ⓘ
Get an iterator over the elements in this slice.
sourcepub fn read(self, idx: u64) -> Result<T, MemoryAccessError>
pub fn read(self, idx: u64) -> Result<T, MemoryAccessError>
Reads an element of this slice.
sourcepub fn write(self, idx: u64, val: T) -> Result<(), MemoryAccessError>
pub fn write(self, idx: u64, val: T) -> Result<(), MemoryAccessError>
Writes to an element of this slice.
sourcepub fn read_slice(self, buf: &mut [T]) -> Result<(), MemoryAccessError>
pub fn read_slice(self, buf: &mut [T]) -> Result<(), MemoryAccessError>
Reads the entire slice into the given buffer.
The length of the buffer must match the length of the slice.
sourcepub fn read_slice_uninit(
self,
buf: &mut [MaybeUninit<T>]
) -> Result<&mut [T], MemoryAccessError>
pub fn read_slice_uninit(
self,
buf: &mut [MaybeUninit<T>]
) -> Result<&mut [T], MemoryAccessError>
Reads the entire slice into the given uninitialized buffer.
The length of the buffer must match the length of the slice.
This method returns an initialized view of the buffer.
sourcepub fn write_slice(self, data: &[T]) -> Result<(), MemoryAccessError>
pub fn write_slice(self, data: &[T]) -> Result<(), MemoryAccessError>
Write the given slice into this WasmSlice
.
The length of the slice must match the length of the WasmSlice
.
sourcepub fn read_to_vec(self) -> Result<Vec<T>, MemoryAccessError>
pub fn read_to_vec(self) -> Result<Vec<T>, MemoryAccessError>
Reads this WasmSlice
into a Vec
.
sourcepub fn read_to_bytes(self) -> Result<BytesMut, MemoryAccessError>
pub fn read_to_bytes(self) -> Result<BytesMut, MemoryAccessError>
Reads this WasmSlice
into a BytesMut