Struct parity_wasm::elements::IndexMap
source · pub struct IndexMap<T> { /* private fields */ }
Expand description
A map from non-contiguous u32
keys to values of type T
, which is
serialized and deserialized ascending order of the keys. Normally used for
relative dense maps with occasional “holes”, and stored as an array.
SECURITY WARNING: This code is currently subject to a denial of service
attack if you create a map containing the key u32::MAX
, which should never
happen in normal data. It would be pretty easy to provide a safe
deserializing mechanism which addressed this problem.
Implementations§
source§impl<T> IndexMap<T>
impl<T> IndexMap<T>
sourcepub fn with_capacity(capacity: usize) -> IndexMap<T>
pub fn with_capacity(capacity: usize) -> IndexMap<T>
Create an empty IndexMap
, preallocating enough space to store
capacity
entries without needing to reallocate the underlying memory.
sourcepub fn get(&self, idx: u32) -> Option<&T>
pub fn get(&self, idx: u32) -> Option<&T>
Return the name for the specified index, if it exists.
sourcepub fn contains_key(&self, idx: u32) -> bool
pub fn contains_key(&self, idx: u32) -> bool
Does the map contain an entry for the specified index?
sourcepub fn insert(&mut self, idx: u32, value: T) -> Option<T>
pub fn insert(&mut self, idx: u32, value: T) -> Option<T>
Insert a name into our map, returning the existing value if present.
Note: This API is designed for reasonably dense indices based on valid
data. Inserting a huge idx
will use up a lot of RAM, and this function
will not try to protect you against that.
sourcepub fn iter(&self) -> Iter<'_, T>
pub fn iter(&self) -> Iter<'_, T>
Create a non-consuming iterator over this IndexMap
’s keys and values.
sourcepub fn deserialize_with<R, F>(
max_entry_space: usize,
deserialize_value: &F,
rdr: &mut R,
) -> Result<IndexMap<T>, Error>
pub fn deserialize_with<R, F>( max_entry_space: usize, deserialize_value: &F, rdr: &mut R, ) -> Result<IndexMap<T>, Error>
Custom deserialization routine.
We will allocate an underlying array no larger than max_entry_space
to
hold the data, so the maximum index must be less than max_entry_space
.
This prevents mallicious *.wasm files from having a single entry with
the index u32::MAX
, which would consume far too much memory.
The deserialize_value
function will be passed the index of the value
being deserialized, and must deserialize the value.
source§impl<T> IndexMap<T>
impl<T> IndexMap<T>
sourcepub fn deserialize<R: Read>(
max_entry_space: usize,
rdr: &mut R,
) -> Result<Self, Error>
pub fn deserialize<R: Read>( max_entry_space: usize, rdr: &mut R, ) -> Result<Self, Error>
Deserialize a map containing simple values that support Deserialize
.
We will allocate an underlying array no larger than max_entry_space
to
hold the data, so the maximum index must be less than max_entry_space
.
Trait Implementations§
source§impl<T> FromIterator<(u32, T)> for IndexMap<T>
impl<T> FromIterator<(u32, T)> for IndexMap<T>
source§fn from_iter<I>(iter: I) -> Selfwhere
I: IntoIterator<Item = (u32, T)>,
fn from_iter<I>(iter: I) -> Selfwhere
I: IntoIterator<Item = (u32, T)>,
Create an IndexMap
from an iterator.
Note: This API is designed for reasonably dense indices based on valid
data. Inserting a huge idx
will use up a lot of RAM, and this function
will not try to protect you against that.
source§impl<'a, T: 'static> IntoIterator for &'a IndexMap<T>
impl<'a, T: 'static> IntoIterator for &'a IndexMap<T>
source§impl<T> IntoIterator for IndexMap<T>
impl<T> IntoIterator for IndexMap<T>
source§impl<T: PartialEq> PartialEq for IndexMap<T>
impl<T: PartialEq> PartialEq for IndexMap<T>
impl<T: Eq> Eq for IndexMap<T>
Auto Trait Implementations§
impl<T> Freeze for IndexMap<T>
impl<T> RefUnwindSafe for IndexMap<T>where
T: RefUnwindSafe,
impl<T> Send for IndexMap<T>where
T: Send,
impl<T> Sync for IndexMap<T>where
T: Sync,
impl<T> Unpin for IndexMap<T>where
T: Unpin,
impl<T> UnwindSafe for IndexMap<T>where
T: UnwindSafe,
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
source§impl<T> CloneToUninit for Twhere
T: Clone,
impl<T> CloneToUninit for Twhere
T: Clone,
source§default unsafe fn clone_to_uninit(&self, dst: *mut T)
default unsafe fn clone_to_uninit(&self, dst: *mut T)
clone_to_uninit
)