Struct dharitri_wasm::types::ManagedVec
source · pub struct ManagedVec<M, T>where
M: ManagedTypeApi,
T: ManagedVecItem<M>,{ /* private fields */ }Expand description
A list of items that lives inside a managed buffer.
Items can be either stored there in full (e.g. u32),
or just via handle (e.g. BigUint<M>).
Implementations§
source§impl<M, T> ManagedVec<M, T>where
M: ManagedTypeApi,
T: ManagedVecItem<M>,
impl<M, T> ManagedVec<M, T>where
M: ManagedTypeApi,
T: ManagedVecItem<M>,
source§impl<M, T> ManagedVec<M, T>where
M: ManagedTypeApi,
T: ManagedVecItem<M>,
impl<M, T> ManagedVec<M, T>where
M: ManagedTypeApi,
T: ManagedVecItem<M>,
pub fn is_empty(&self) -> bool
sourcepub fn get(&self, index: usize) -> Option<T>
pub fn get(&self, index: usize) -> Option<T>
Retrieves element at index, if the index is valid. Warning! Ownership around this method is murky, managed items are copied without respecting ownership. TODO: Find a way to fix it by returning some kind of reference to the item, not the owned type.
pub fn slice(&self, start_index: usize, end_index: usize) -> Option<Self>
pub fn push(&mut self, item: T)
sourcepub fn from_single_item(api: M, item: T) -> Self
pub fn from_single_item(api: M, item: T) -> Self
New ManagedVec instance with 1 element in it.
pub fn overwrite_with_single_item(&mut self, item: T)
sourcepub fn append_vec(&mut self, item: ManagedVec<M, T>)
pub fn append_vec(&mut self, item: ManagedVec<M, T>)
Appends all the contents of another managed vec at the end of the current one. Consumes the other vec in the process.
pub fn into_vec(self) -> Vec<T>
sourcepub fn with_self_as_vec<F>(&mut self, f: F)
pub fn with_self_as_vec<F>(&mut self, f: F)
Temporarily converts self to a Vec<T>.
All operations performed on the temporary vector get saved back to the underlying buffer.
pub fn iter(&self) -> ManagedVecIterator<'_, M, T> ⓘ
Trait Implementations§
source§impl<M, T> Clone for ManagedVec<M, T>
impl<M, T> Clone for ManagedVec<M, T>
source§impl<M, T> Debug for ManagedVec<M, T>
impl<M, T> Debug for ManagedVec<M, T>
source§impl<M, T> From<&ManagedVec<M, T>> for ManagedMultiResultVec<M, T>
impl<M, T> From<&ManagedVec<M, T>> for ManagedMultiResultVec<M, T>
source§fn from(v: &ManagedVec<M, T>) -> Self
fn from(v: &ManagedVec<M, T>) -> Self
Converts to this type from the input type.
source§impl<M> From<ManagedVec<M, ManagedBuffer<M>>> for ManagedArgBuffer<M>where
M: ManagedTypeApi,
impl<M> From<ManagedVec<M, ManagedBuffer<M>>> for ManagedArgBuffer<M>where
M: ManagedTypeApi,
source§fn from(data: ManagedVec<M, ManagedBuffer<M>>) -> Self
fn from(data: ManagedVec<M, ManagedBuffer<M>>) -> Self
Converts to this type from the input type.
source§impl<M, T> From<ManagedVec<M, T>> for ManagedCountedMultiResultVec<M, T>where
M: ManagedTypeApi,
T: ManagedVecItem<M>,
impl<M, T> From<ManagedVec<M, T>> for ManagedCountedMultiResultVec<M, T>where
M: ManagedTypeApi,
T: ManagedVecItem<M>,
source§fn from(v: ManagedVec<M, T>) -> Self
fn from(v: ManagedVec<M, T>) -> Self
Converts to this type from the input type.
source§impl<M, T> From<ManagedVec<M, T>> for ManagedMultiResultVec<M, T>
impl<M, T> From<ManagedVec<M, T>> for ManagedMultiResultVec<M, T>
source§fn from(v: ManagedVec<M, T>) -> Self
fn from(v: ManagedVec<M, T>) -> Self
Converts to this type from the input type.
source§impl<M, T> From<ManagedVec<M, T>> for ManagedMultiResultVecEager<M, T>where
M: ManagedTypeApi,
T: ManagedVecItem<M>,
impl<M, T> From<ManagedVec<M, T>> for ManagedMultiResultVecEager<M, T>where
M: ManagedTypeApi,
T: ManagedVecItem<M>,
source§fn from(managed_vec: ManagedVec<M, T>) -> Self
fn from(managed_vec: ManagedVec<M, T>) -> Self
Converts to this type from the input type.
source§impl<'a, M, T> IntoIterator for &'a ManagedVec<M, T>where
M: ManagedTypeApi,
T: ManagedVecItem<M>,
impl<'a, M, T> IntoIterator for &'a ManagedVec<M, T>where
M: ManagedTypeApi,
T: ManagedVecItem<M>,
source§impl<M, T> ManagedDefault<M> for ManagedVec<M, T>where
M: ManagedTypeApi,
T: ManagedVecItem<M>,
impl<M, T> ManagedDefault<M> for ManagedVec<M, T>where
M: ManagedTypeApi,
T: ManagedVecItem<M>,
fn managed_default(api: M) -> Self
source§impl<M, T, I> ManagedFrom<M, Vec<I>> for ManagedVec<M, T>
impl<M, T, I> ManagedFrom<M, Vec<I>> for ManagedVec<M, T>
fn managed_from(api: M, v: Vec<I>) -> Self
source§impl<M, T> ManagedType<M> for ManagedVec<M, T>where
M: ManagedTypeApi,
T: ManagedVecItem<M>,
impl<M, T> ManagedType<M> for ManagedVec<M, T>where
M: ManagedTypeApi,
T: ManagedVecItem<M>,
fn type_manager(&self) -> M
source§impl<M, T> ManagedVecItem<M> for ManagedVec<M, T>where
M: ManagedTypeApi,
T: ManagedVecItem<M>,
impl<M, T> ManagedVecItem<M> for ManagedVec<M, T>where
M: ManagedTypeApi,
T: ManagedVecItem<M>,
source§const PAYLOAD_SIZE: usize = 4usize
const PAYLOAD_SIZE: usize = 4usize
Size of the data stored in the underlying
ManagedBuffer.source§const SKIPS_RESERIALIZATION: bool = false
const SKIPS_RESERIALIZATION: bool = false
If true, then the encoding of the item is identical to the payload,
and no further conversion is necessary
(the underlying buffer can be used as-is during serialization).
False for all managed types, but true for basic types (like
u32).fn from_byte_reader<Reader: FnMut(&mut [u8])>(api: M, reader: Reader) -> Self
fn to_byte_writer<R, Writer: FnMut(&[u8]) -> R>(&self, writer: Writer) -> R
source§impl<M, T> NestedDecode for ManagedVec<M, T>
impl<M, T> NestedDecode for ManagedVec<M, T>
source§fn dep_decode<I: NestedDecodeInput>(input: &mut I) -> Result<Self, DecodeError>
fn dep_decode<I: NestedDecodeInput>(input: &mut I) -> Result<Self, DecodeError>
Attempt to deserialise the value from input,
using the format of an object nested inside another structure.
In case of success returns the deserialized value and the number of bytes consumed during the operation.
source§fn dep_decode_or_exit<I, ExitCtx>(
input: &mut I,
c: ExitCtx,
exit: fn(_: ExitCtx, _: DecodeError) -> !
) -> Selfwhere
I: NestedDecodeInput,
ExitCtx: Clone,
fn dep_decode_or_exit<I, ExitCtx>(
input: &mut I,
c: ExitCtx,
exit: fn(_: ExitCtx, _: DecodeError) -> !
) -> Selfwhere
I: NestedDecodeInput,
ExitCtx: Clone,
Version of
top_decode that exits quickly in case of error.
Its purpose is to create smaller implementations
in cases where the application is supposed to exit directly on decode error.source§impl<M, T> NestedEncode for ManagedVec<M, T>
impl<M, T> NestedEncode for ManagedVec<M, T>
source§fn dep_encode<O: NestedEncodeOutput>(
&self,
dest: &mut O
) -> Result<(), EncodeError>
fn dep_encode<O: NestedEncodeOutput>( &self, dest: &mut O ) -> Result<(), EncodeError>
NestedEncode to output, using the format of an object nested inside another structure.
Does not provide compact version.
source§fn dep_encode_or_exit<O, ExitCtx>(
&self,
dest: &mut O,
c: ExitCtx,
exit: fn(_: ExitCtx, _: EncodeError) -> !
)where
O: NestedEncodeOutput,
ExitCtx: Clone,
fn dep_encode_or_exit<O, ExitCtx>(
&self,
dest: &mut O,
c: ExitCtx,
exit: fn(_: ExitCtx, _: EncodeError) -> !
)where
O: NestedEncodeOutput,
ExitCtx: Clone,
Version of
top_decode that exits quickly in case of error.
Its purpose is to create smaller implementations
in cases where the application is supposed to exit directly on decode error.source§impl<M, T> PartialEq for ManagedVec<M, T>
impl<M, T> PartialEq for ManagedVec<M, T>
source§impl<M, T> TopDecode for ManagedVec<M, T>
impl<M, T> TopDecode for ManagedVec<M, T>
source§fn top_decode<I: TopDecodeInput>(input: I) -> Result<Self, DecodeError>
fn top_decode<I: TopDecodeInput>(input: I) -> Result<Self, DecodeError>
Attempt to deserialize the value from input.
source§fn top_decode_or_exit<I, ExitCtx>(
input: I,
c: ExitCtx,
exit: fn(_: ExitCtx, _: DecodeError) -> !
) -> Selfwhere
I: TopDecodeInput,
ExitCtx: Clone,
fn top_decode_or_exit<I, ExitCtx>(
input: I,
c: ExitCtx,
exit: fn(_: ExitCtx, _: DecodeError) -> !
) -> Selfwhere
I: TopDecodeInput,
ExitCtx: Clone,
Version of
top_decode that exits quickly in case of error.
Its purpose is to create smaller implementations
in cases where the application is supposed to exit directly on decode error.source§impl<M, T> TopEncode for ManagedVec<M, T>
impl<M, T> TopEncode for ManagedVec<M, T>
source§fn top_encode<O: TopEncodeOutput>(&self, output: O) -> Result<(), EncodeError>
fn top_encode<O: TopEncodeOutput>(&self, output: O) -> Result<(), EncodeError>
Attempt to serialize the value to ouput.
source§fn top_encode_or_exit<O, ExitCtx>(
&self,
output: O,
c: ExitCtx,
exit: fn(_: ExitCtx, _: EncodeError) -> !
)where
O: TopEncodeOutput,
ExitCtx: Clone,
fn top_encode_or_exit<O, ExitCtx>(
&self,
output: O,
c: ExitCtx,
exit: fn(_: ExitCtx, _: EncodeError) -> !
)where
O: TopEncodeOutput,
ExitCtx: Clone,
Version of
top_decode that exits quickly in case of error.
Its purpose is to create smaller bytecode implementations
in cases where the application is supposed to exit directly on decode error.source§impl<M, T> TypeAbi for ManagedVec<M, T>
impl<M, T> TypeAbi for ManagedVec<M, T>
source§fn provide_type_descriptions<TDC: TypeDescriptionContainer>(
accumulator: &mut TDC
)
fn provide_type_descriptions<TDC: TypeDescriptionContainer>( accumulator: &mut TDC )
A type can provide more than its own description.
For instance, a struct can also provide the descriptions of the type of its fields.
TypeAbi doesn’t care for the exact accumulator type,
which is abstracted by the TypeDescriptionContainer trait.
impl<M, T> Eq for ManagedVec<M, T>
Auto Trait Implementations§
impl<M, T> RefUnwindSafe for ManagedVec<M, T>where
M: RefUnwindSafe,
T: RefUnwindSafe,
impl<M, T> Send for ManagedVec<M, T>
impl<M, T> Sync for ManagedVec<M, T>
impl<M, T> Unpin for ManagedVec<M, T>
impl<M, T> UnwindSafe for ManagedVec<M, T>where
M: UnwindSafe,
T: UnwindSafe,
Blanket Implementations§
source§impl<M, T> AsManagedRef<M, T> for Twhere
M: ManagedTypeApi,
T: ManagedType<M>,
impl<M, T> AsManagedRef<M, T> for Twhere
M: ManagedTypeApi,
T: ManagedType<M>,
fn as_managed_ref(&self) -> ManagedRef<M, T>
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