pub struct StorageArray<S: StorageType, const N: usize> { /* private fields */ }
Expand description
Accessor for a storage-backed array.
Implementations§
Source§impl<S: StorageType, const N: usize> StorageArray<S, N>
impl<S: StorageType, const N: usize> StorageArray<S, N>
Sourcepub const fn len(&self) -> usize
pub const fn len(&self) -> usize
Gets the number of elements stored.
Although this type will always have the same length, this method is still provided for
consistency with [StorageVec
].
Sourcepub fn getter(&self, index: impl TryInto<usize>) -> Option<StorageGuard<'_, S>>
pub fn getter(&self, index: impl TryInto<usize>) -> Option<StorageGuard<'_, S>>
Gets an accessor to the element at a given index, if it exists.
Note: the accessor is protected by a StorageGuard
, which restricts
its lifetime to that of &self
.
Sourcepub fn setter(
&mut self,
index: impl TryInto<usize>,
) -> Option<StorageGuardMut<'_, S>>
pub fn setter( &mut self, index: impl TryInto<usize>, ) -> Option<StorageGuardMut<'_, S>>
Gets a mutable accessor to the element at a given index, if it exists.
Note: the accessor is protected by a StorageGuardMut
, which restricts
its lifetime to that of &mut self
.
Trait Implementations§
Source§impl<S: StorageType, const N: usize> HostAccess for StorageArray<S, N>
impl<S: StorageType, const N: usize> HostAccess for StorageArray<S, N>
Source§impl<S: StorageType, const N: usize> StorageType for StorageArray<S, N>
impl<S: StorageType, const N: usize> StorageType for StorageArray<S, N>
Source§const REQUIRED_SLOTS: usize
const REQUIRED_SLOTS: usize
The number of words this type must fill. For primitives this is always 0.
For complex types requiring more than one inline word, set this to the total size.
Source§type Wraps<'a> = StorageGuard<'a, StorageArray<S, N>>
where
Self: 'a
type Wraps<'a> = StorageGuard<'a, StorageArray<S, N>> where Self: 'a
For primitive types, this is the type being stored.
For collections, this is the
StorageType
being collected.Source§type WrapsMut<'a> = StorageGuardMut<'a, StorageArray<S, N>>
where
Self: 'a
type WrapsMut<'a> = StorageGuardMut<'a, StorageArray<S, N>> where Self: 'a
Mutable accessor to the type being stored.
Source§unsafe fn new(slot: U256, offset: u8, host: VM) -> Self
unsafe fn new(slot: U256, offset: u8, host: VM) -> Self
Where in persistent storage the type should live. Although useful for framework designers
creating new storage types, most user programs shouldn’t call this.
Note: implementations will have to be
const
once generic_const_exprs
stabilizes. Read moreSource§fn load<'s>(self) -> Self::Wraps<'s>
fn load<'s>(self) -> Self::Wraps<'s>
Load the wrapped type, consuming the accessor.
Note: most types have a
get
and/or getter
, which don’t consume Self
.Source§fn load_mut<'s>(self) -> Self::WrapsMut<'s>
fn load_mut<'s>(self) -> Self::WrapsMut<'s>
Load the wrapped mutable type, consuming the accessor.
Note: most types have a
set
and/or setter
, which don’t consume Self
.Source§const SLOT_BYTES: usize = 32usize
const SLOT_BYTES: usize = 32usize
The number of bytes in a slot needed to represent the type. Must not exceed 32.
For types larger than 32 bytes that are stored inline with a struct’s fields,
set this to 32 and return the full size in
StorageType::new
. Read moreAuto Trait Implementations§
impl<S, const N: usize> Freeze for StorageArray<S, N>
impl<S, const N: usize> !RefUnwindSafe for StorageArray<S, N>
impl<S, const N: usize> !Send for StorageArray<S, N>
impl<S, const N: usize> !Sync for StorageArray<S, N>
impl<S, const N: usize> Unpin for StorageArray<S, N>where
S: Unpin,
impl<S, const N: usize> !UnwindSafe for StorageArray<S, N>
Blanket Implementations§
Source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
Source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
Mutably borrows from an owned value. Read more
Source§impl<T> Instrument for T
impl<T> Instrument for T
Source§fn instrument(self, span: Span) -> Instrumented<Self>
fn instrument(self, span: Span) -> Instrumented<Self>
Source§fn in_current_span(self) -> Instrumented<Self>
fn in_current_span(self) -> Instrumented<Self>
Source§impl<T> IntoEither for T
impl<T> IntoEither for T
Source§fn into_either(self, into_left: bool) -> Either<Self, Self>
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 moreSource§fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
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