Struct SharedMemory

Source
pub struct SharedMemory { /* private fields */ }
Expand description

A sequential memory shared between calls, which uses a Vec for internal representation. A SharedMemory instance should always be obtained using the new static method to ensure memory safety.

Implementations§

Source§

impl SharedMemory

Source

pub fn new() -> Self

Creates a new memory instance that can be shared between calls.

The default initial capacity is 4KiB.

Source

pub fn invalid() -> Self

Creates a new invalid memory instance.

Source

pub fn new_with_buffer(buffer: Rc<RefCell<Vec<u8>>>) -> Self

Creates a new memory instance with a given shared buffer.

Source

pub fn with_capacity(capacity: usize) -> Self

Creates a new memory instance that can be shared between calls with the given capacity.

Source

pub fn new_child_context(&mut self) -> SharedMemory

Prepares the shared memory for a new child context.

§Panics

Panics if this function was already called without freeing child context.

Source

pub fn free_child_context(&mut self)

Prepares the shared memory for returning from child context. Do nothing if there is no child context.

Source

pub fn len(&self) -> usize

Returns the length of the current memory range.

Source

pub fn is_empty(&self) -> bool

Returns true if the current memory range is empty.

Source

pub fn resize(&mut self, new_size: usize)

Resizes the memory in-place so that len is equal to new_len.

Source

pub fn slice_len(&self, offset: usize, size: usize) -> Ref<'_, [u8]>

Returns a byte slice of the memory region at the given offset.

§Panics

Panics on out of bounds.

Source

pub fn slice_range(&self, range: Range<usize>) -> Ref<'_, [u8]>

Returns a byte slice of the memory region at the given offset.

§Panics

Panics on out of bounds access in debug builds only.

§Safety

In release builds, calling this method with an out-of-bounds range triggers undefined behavior. Callers must ensure that the range is within the bounds of the memory (i.e., range.end <= self.len()).

Source

pub fn global_slice_range(&self, range: Range<usize>) -> Ref<'_, [u8]>

Returns a byte slice of the memory region at the given offset.

§Panics

Panics on out of bounds access in debug builds only.

§Safety

In release builds, calling this method with an out-of-bounds range triggers undefined behavior. Callers must ensure that the range is within the bounds of the buffer.

Source

pub fn slice_mut(&mut self, offset: usize, size: usize) -> RefMut<'_, [u8]>

Returns a byte slice of the memory region at the given offset.

§Panics

Panics on out of bounds access in debug builds only.

§Safety

In release builds, calling this method with out-of-bounds parameters triggers undefined behavior. Callers must ensure that offset + size does not exceed the length of the memory.

Source

pub fn get_byte(&self, offset: usize) -> u8

Returns the byte at the given offset.

§Panics

Panics on out of bounds.

Source

pub fn get_word(&self, offset: usize) -> B256

Returns a 32-byte slice of the memory region at the given offset.

§Panics

Panics on out of bounds.

Source

pub fn get_u256(&self, offset: usize) -> U256

Returns a U256 of the memory region at the given offset.

§Panics

Panics on out of bounds.

Source

pub fn set_byte(&mut self, offset: usize, byte: u8)

Sets the byte at the given index.

§Panics

Panics on out of bounds.

Source

pub fn set_word(&mut self, offset: usize, value: &B256)

Sets the given 32-byte value to the memory region at the given offset.

§Panics

Panics on out of bounds.

Source

pub fn set_u256(&mut self, offset: usize, value: U256)

Sets the given U256 value to the memory region at the given offset.

§Panics

Panics on out of bounds.

Source

pub fn set(&mut self, offset: usize, value: &[u8])

Set memory region at given offset.

§Panics

Panics on out of bounds.

Source

pub fn set_data( &mut self, memory_offset: usize, data_offset: usize, len: usize, data: &[u8], )

Set memory from data. Our memory offset+len is expected to be correct but we are doing bound checks on data/data_offeset/len and zeroing parts that is not copied.

§Panics

Panics if memory is out of bounds.

Source

pub fn global_to_local_set_data( &mut self, memory_offset: usize, data_offset: usize, len: usize, data_range: Range<usize>, )

Set data from global memory to local memory. If global range is smaller than len, zeroes the rest.

Source

pub fn copy(&mut self, dst: usize, src: usize, len: usize)

Copies elements from one part of the memory to another part of itself.

§Panics

Panics on out of bounds.

Source

pub fn context_memory(&self) -> Ref<'_, [u8]>

Returns a reference to the memory of the current context, the active memory.

§Panics

Panics if the checkpoint is invalid in debug builds only.

§Safety

In release builds, calling this method with an invalid checkpoint triggers undefined behavior. The checkpoint must be within the bounds of the buffer.

Source

pub fn context_memory_mut(&mut self) -> RefMut<'_, [u8]>

Returns a mutable reference to the memory of the current context.

§Panics

Panics if the checkpoint is invalid in debug builds only.

§Safety

In release builds, calling this method with an invalid checkpoint triggers undefined behavior. The checkpoint must be within the bounds of the buffer.

Trait Implementations§

Source§

impl Clone for SharedMemory

Source§

fn clone(&self) -> SharedMemory

Returns a duplicate of the value. Read more
1.0.0 · Source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
Source§

impl Debug for SharedMemory

Source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
Source§

impl Default for SharedMemory

Source§

fn default() -> Self

Returns the “default value” for a type. Read more
Source§

impl<'de> Deserialize<'de> for SharedMemory

Source§

fn deserialize<__D>(__deserializer: __D) -> Result<Self, __D::Error>
where __D: Deserializer<'de>,

Deserialize this value from the given Serde deserializer. Read more
Source§

impl MemoryTr for SharedMemory

Source§

fn global_slice(&self, range: Range<usize>) -> Ref<'_, [u8]>

Returns a byte slice of the memory region at the given offset.

§Panics

Panics on out of bounds access in debug builds only.

§Safety

In release builds, calling this method with an out-of-bounds range triggers undefined behavior. Callers must ensure that the range is within the bounds of the buffer.

Source§

fn set_data( &mut self, memory_offset: usize, data_offset: usize, len: usize, data: &[u8], )

Sets memory data at given offset from data with a given data_offset and len. Read more
Source§

fn set(&mut self, memory_offset: usize, data: &[u8])

Sets memory data at given offset. Read more
Source§

fn size(&self) -> usize

Returns memory size.
Source§

fn copy(&mut self, destination: usize, source: usize, len: usize)

Copies memory data from source to destination. Read more
Source§

fn slice(&self, range: Range<usize>) -> Ref<'_, [u8]>

Memory slice with range Read more
Source§

fn local_memory_offset(&self) -> usize

Offset of local context of memory.
Source§

fn set_data_from_global( &mut self, memory_offset: usize, data_offset: usize, len: usize, data_range: Range<usize>, )

Inner clone part of memory from global context to local context. This is used to clone calldata to memory. Read more
Source§

fn resize(&mut self, new_size: usize) -> bool

Resizes memory to new size Read more
Source§

fn slice_len(&self, offset: usize, len: usize) -> impl Deref<Target = [u8]> + '_

Memory slice len Read more
Source§

impl PartialEq for SharedMemory

Source§

fn eq(&self, other: &SharedMemory) -> bool

Tests for self and other values to be equal, and is used by ==.
1.0.0 · Source§

fn ne(&self, other: &Rhs) -> bool

Tests for !=. The default implementation is almost always sufficient, and should not be overridden without very good reason.
Source§

impl Serialize for SharedMemory

Source§

fn serialize<__S>(&self, __serializer: __S) -> Result<__S::Ok, __S::Error>
where __S: Serializer,

Serialize this value into the given Serde serializer. Read more
Source§

impl Eq for SharedMemory

Source§

impl StructuralPartialEq for SharedMemory

Auto Trait Implementations§

Blanket Implementations§

Source§

impl<T> Any for T
where T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<T> CloneToUninit for T
where T: Clone,

Source§

unsafe fn clone_to_uninit(&self, dest: *mut u8)

🔬This is a nightly-only experimental API. (clone_to_uninit)
Performs copy-assignment from self to dest. Read more
§

impl<T> Conv for T

§

fn conv<T>(self) -> T
where Self: Into<T>,

Converts self into T using Into<T>. Read more
§

impl<Q, K> Equivalent<K> for Q
where Q: Eq + ?Sized, K: Borrow<Q> + ?Sized,

§

fn equivalent(&self, key: &K) -> bool

Compare self to key and return true if they are equal.
§

impl<T> FmtForward for T

§

fn fmt_binary(self) -> FmtBinary<Self>
where Self: Binary,

Causes self to use its Binary implementation when Debug-formatted.
§

fn fmt_display(self) -> FmtDisplay<Self>
where Self: Display,

Causes self to use its Display implementation when Debug-formatted.
§

fn fmt_lower_exp(self) -> FmtLowerExp<Self>
where Self: LowerExp,

Causes self to use its LowerExp implementation when Debug-formatted.
§

fn fmt_lower_hex(self) -> FmtLowerHex<Self>
where Self: LowerHex,

Causes self to use its LowerHex implementation when Debug-formatted.
§

fn fmt_octal(self) -> FmtOctal<Self>
where Self: Octal,

Causes self to use its Octal implementation when Debug-formatted.
§

fn fmt_pointer(self) -> FmtPointer<Self>
where Self: Pointer,

Causes self to use its Pointer implementation when Debug-formatted.
§

fn fmt_upper_exp(self) -> FmtUpperExp<Self>
where Self: UpperExp,

Causes self to use its UpperExp implementation when Debug-formatted.
§

fn fmt_upper_hex(self) -> FmtUpperHex<Self>
where Self: UpperHex,

Causes self to use its UpperHex implementation when Debug-formatted.
§

fn fmt_list(self) -> FmtList<Self>
where &'a Self: for<'a> IntoIterator,

Formats each item in a sequence. Read more
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

Source§

impl<T, U> Into<U> for T
where U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

That is, this conversion is whatever the implementation of From<T> for U chooses to do.

Source§

impl<T> IntoEither for T

Source§

fn into_either(self, into_left: bool) -> Either<Self, Self>

Converts self into a Left variant of Either<Self, Self> if into_left is true. Converts self into a Right variant of Either<Self, Self> otherwise. Read more
Source§

fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
where F: FnOnce(&Self) -> bool,

Converts self into a Left variant of Either<Self, Self> if into_left(&self) returns true. Converts self into a Right variant of Either<Self, Self> otherwise. Read more
§

impl<T> Pipe for T
where T: ?Sized,

§

fn pipe<R>(self, func: impl FnOnce(Self) -> R) -> R
where Self: Sized,

Pipes by value. This is generally the method you want to use. Read more
§

fn pipe_ref<'a, R>(&'a self, func: impl FnOnce(&'a Self) -> R) -> R
where R: 'a,

Borrows self and passes that borrow into the pipe function. Read more
§

fn pipe_ref_mut<'a, R>(&'a mut self, func: impl FnOnce(&'a mut Self) -> R) -> R
where R: 'a,

Mutably borrows self and passes that borrow into the pipe function. Read more
§

fn pipe_borrow<'a, B, R>(&'a self, func: impl FnOnce(&'a B) -> R) -> R
where Self: Borrow<B>, B: 'a + ?Sized, R: 'a,

Borrows self, then passes self.borrow() into the pipe function. Read more
§

fn pipe_borrow_mut<'a, B, R>( &'a mut self, func: impl FnOnce(&'a mut B) -> R, ) -> R
where Self: BorrowMut<B>, B: 'a + ?Sized, R: 'a,

Mutably borrows self, then passes self.borrow_mut() into the pipe function. Read more
§

fn pipe_as_ref<'a, U, R>(&'a self, func: impl FnOnce(&'a U) -> R) -> R
where Self: AsRef<U>, U: 'a + ?Sized, R: 'a,

Borrows self, then passes self.as_ref() into the pipe function.
§

fn pipe_as_mut<'a, U, R>(&'a mut self, func: impl FnOnce(&'a mut U) -> R) -> R
where Self: AsMut<U>, U: 'a + ?Sized, R: 'a,

Mutably borrows self, then passes self.as_mut() into the pipe function.
§

fn pipe_deref<'a, T, R>(&'a self, func: impl FnOnce(&'a T) -> R) -> R
where Self: Deref<Target = T>, T: 'a + ?Sized, R: 'a,

Borrows self, then passes self.deref() into the pipe function.
§

fn pipe_deref_mut<'a, T, R>( &'a mut self, func: impl FnOnce(&'a mut T) -> R, ) -> R
where Self: DerefMut<Target = T> + Deref, T: 'a + ?Sized, R: 'a,

Mutably borrows self, then passes self.deref_mut() into the pipe function.
Source§

impl<T> Same for T

Source§

type Output = T

Should always be Self
§

impl<T> Tap for T

§

fn tap(self, func: impl FnOnce(&Self)) -> Self

Immutable access to a value. Read more
§

fn tap_mut(self, func: impl FnOnce(&mut Self)) -> Self

Mutable access to a value. Read more
§

fn tap_borrow<B>(self, func: impl FnOnce(&B)) -> Self
where Self: Borrow<B>, B: ?Sized,

Immutable access to the Borrow<B> of a value. Read more
§

fn tap_borrow_mut<B>(self, func: impl FnOnce(&mut B)) -> Self
where Self: BorrowMut<B>, B: ?Sized,

Mutable access to the BorrowMut<B> of a value. Read more
§

fn tap_ref<R>(self, func: impl FnOnce(&R)) -> Self
where Self: AsRef<R>, R: ?Sized,

Immutable access to the AsRef<R> view of a value. Read more
§

fn tap_ref_mut<R>(self, func: impl FnOnce(&mut R)) -> Self
where Self: AsMut<R>, R: ?Sized,

Mutable access to the AsMut<R> view of a value. Read more
§

fn tap_deref<T>(self, func: impl FnOnce(&T)) -> Self
where Self: Deref<Target = T>, T: ?Sized,

Immutable access to the Deref::Target of a value. Read more
§

fn tap_deref_mut<T>(self, func: impl FnOnce(&mut T)) -> Self
where Self: DerefMut<Target = T> + Deref, T: ?Sized,

Mutable access to the Deref::Target of a value. Read more
§

fn tap_dbg(self, func: impl FnOnce(&Self)) -> Self

Calls .tap() only in debug builds, and is erased in release builds.
§

fn tap_mut_dbg(self, func: impl FnOnce(&mut Self)) -> Self

Calls .tap_mut() only in debug builds, and is erased in release builds.
§

fn tap_borrow_dbg<B>(self, func: impl FnOnce(&B)) -> Self
where Self: Borrow<B>, B: ?Sized,

Calls .tap_borrow() only in debug builds, and is erased in release builds.
§

fn tap_borrow_mut_dbg<B>(self, func: impl FnOnce(&mut B)) -> Self
where Self: BorrowMut<B>, B: ?Sized,

Calls .tap_borrow_mut() only in debug builds, and is erased in release builds.
§

fn tap_ref_dbg<R>(self, func: impl FnOnce(&R)) -> Self
where Self: AsRef<R>, R: ?Sized,

Calls .tap_ref() only in debug builds, and is erased in release builds.
§

fn tap_ref_mut_dbg<R>(self, func: impl FnOnce(&mut R)) -> Self
where Self: AsMut<R>, R: ?Sized,

Calls .tap_ref_mut() only in debug builds, and is erased in release builds.
§

fn tap_deref_dbg<T>(self, func: impl FnOnce(&T)) -> Self
where Self: Deref<Target = T>, T: ?Sized,

Calls .tap_deref() only in debug builds, and is erased in release builds.
§

fn tap_deref_mut_dbg<T>(self, func: impl FnOnce(&mut T)) -> Self
where Self: DerefMut<Target = T> + Deref, T: ?Sized,

Calls .tap_deref_mut() only in debug builds, and is erased in release builds.
Source§

impl<T> ToOwned for T
where T: Clone,

Source§

type Owned = T

The resulting type after obtaining ownership.
Source§

fn to_owned(&self) -> T

Creates owned data from borrowed data, usually by cloning. Read more
Source§

fn clone_into(&self, target: &mut T)

Uses borrowed data to replace owned data, usually by cloning. Read more
§

impl<T> TryConv for T

§

fn try_conv<T>(self) -> Result<T, Self::Error>
where Self: TryInto<T>,

Attempts to convert self into T using TryInto<T>. Read more
Source§

impl<T, U> TryFrom<U> for T
where U: Into<T>,

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
Source§

impl<T> DeserializeOwned for T
where T: for<'de> Deserialize<'de>,