Struct zerovec::maps::ZeroMapBorrowed
source · pub struct ZeroMapBorrowed<'a, K, V>{ /* private fields */ }
Expand description
A borrowed-only version of ZeroMap
This is useful for fully-zero-copy deserialization from non-human-readable
serialization formats. It also has the advantage that it can return references that live for
the lifetime of the backing buffer as opposed to that of the ZeroMapBorrowed
instance.
§Examples
use zerovec::maps::ZeroMapBorrowed;
// Example byte buffer representing the map { 1: "one" }
let BINCODE_BYTES: &[u8; 29] = &[
4, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0,
0, 0, 111, 110, 101,
];
// Deserializing to ZeroMap requires no heap allocations.
let zero_map: ZeroMapBorrowed<u32, str> =
bincode::deserialize(BINCODE_BYTES)
.expect("Should deserialize successfully");
assert_eq!(zero_map.get(&1), Some("one"));
This can be obtained from a ZeroMap
via ZeroMap::as_borrowed
Implementations§
source§impl<'a, K, V> ZeroMapBorrowed<'a, K, V>
impl<'a, K, V> ZeroMapBorrowed<'a, K, V>
sourcepub fn new() -> Self
pub fn new() -> Self
Creates a new, empty ZeroMapBorrowed<K, V>
.
Note: Since ZeroMapBorrowed
is not mutable, the return value will be a stub unless
converted into a ZeroMap
.
§Examples
use zerovec::maps::ZeroMapBorrowed;
let zm: ZeroMapBorrowed<u16, str> = ZeroMapBorrowed::new();
assert!(zm.is_empty());
source§impl<'a, K, V> ZeroMapBorrowed<'a, K, V>
impl<'a, K, V> ZeroMapBorrowed<'a, K, V>
sourcepub fn len(&self) -> usize
pub fn len(&self) -> usize
The number of elements in the ZeroMapBorrowed
sourcepub fn is_empty(&self) -> bool
pub fn is_empty(&self) -> bool
Whether the ZeroMapBorrowed
is empty
source§impl<'a, K, V> ZeroMapBorrowed<'a, K, V>
impl<'a, K, V> ZeroMapBorrowed<'a, K, V>
sourcepub fn get(&self, key: &K) -> Option<&'a V::GetType>
pub fn get(&self, key: &K) -> Option<&'a V::GetType>
Get the value associated with key
, if it exists.
This is able to return values that live longer than the map itself
since they borrow directly from the backing buffer. This is the
primary advantage of using ZeroMapBorrowed
over ZeroMap
.
use zerovec::ZeroMap;
let mut map = ZeroMap::new();
map.insert(&1, "one");
map.insert(&2, "two");
let borrowed = map.as_borrowed();
assert_eq!(borrowed.get(&1), Some("one"));
assert_eq!(borrowed.get(&3), None);
sourcepub fn get_by(
&self,
predicate: impl FnMut(&K) -> Ordering,
) -> Option<&'a V::GetType>
pub fn get_by( &self, predicate: impl FnMut(&K) -> Ordering, ) -> Option<&'a V::GetType>
Binary search the map with predicate
to find a key, returning the value.
This is able to return values that live longer than the map itself
since they borrow directly from the backing buffer. This is the
primary advantage of using ZeroMapBorrowed
over ZeroMap
.
use zerovec::ZeroMap;
let mut map = ZeroMap::new();
map.insert(&1, "one");
map.insert(&2, "two");
let borrowed = map.as_borrowed();
assert_eq!(borrowed.get_by(|probe| probe.cmp(&1)), Some("one"));
assert_eq!(borrowed.get_by(|probe| probe.cmp(&3)), None);
sourcepub fn contains_key(&self, key: &K) -> bool
pub fn contains_key(&self, key: &K) -> bool
Returns whether key
is contained in this map
use zerovec::ZeroMap;
let mut map = ZeroMap::new();
map.insert(&1, "one");
map.insert(&2, "two");
let borrowed = map.as_borrowed();
assert!(borrowed.contains_key(&1));
assert!(!borrowed.contains_key(&3));
source§impl<'a, K, V> ZeroMapBorrowed<'a, K, V>
impl<'a, K, V> ZeroMapBorrowed<'a, K, V>
sourcepub fn iter<'b>(
&'b self,
) -> impl Iterator<Item = (&'a <K as ZeroMapKV<'a>>::GetType, &'a <V as ZeroMapKV<'a>>::GetType)> + 'b
pub fn iter<'b>( &'b self, ) -> impl Iterator<Item = (&'a <K as ZeroMapKV<'a>>::GetType, &'a <V as ZeroMapKV<'a>>::GetType)> + 'b
Produce an ordered iterator over key-value pairs
sourcepub fn iter_keys<'b>(
&'b self,
) -> impl Iterator<Item = &'a <K as ZeroMapKV<'a>>::GetType> + 'b
pub fn iter_keys<'b>( &'b self, ) -> impl Iterator<Item = &'a <K as ZeroMapKV<'a>>::GetType> + 'b
Produce an ordered iterator over keys
sourcepub fn iter_values<'b>(
&'b self,
) -> impl Iterator<Item = &'a <V as ZeroMapKV<'a>>::GetType> + 'b
pub fn iter_values<'b>( &'b self, ) -> impl Iterator<Item = &'a <V as ZeroMapKV<'a>>::GetType> + 'b
Produce an iterator over values, ordered by keys
source§impl<'a, K, V> ZeroMapBorrowed<'a, K, V>
impl<'a, K, V> ZeroMapBorrowed<'a, K, V>
sourcepub fn get_copied(&self, key: &K) -> Option<V>
pub fn get_copied(&self, key: &K) -> Option<V>
For cases when V
is fixed-size, obtain a direct copy of V
instead of V::ULE
sourcepub fn get_copied_by(&self, predicate: impl FnMut(&K) -> Ordering) -> Option<V>
pub fn get_copied_by(&self, predicate: impl FnMut(&K) -> Ordering) -> Option<V>
For cases when V
is fixed-size, obtain a direct copy of V
instead of V::ULE
sourcepub fn iter_copied_values<'b>(
&'b self,
) -> impl Iterator<Item = (&'b <K as ZeroMapKV<'a>>::GetType, V)>
pub fn iter_copied_values<'b>( &'b self, ) -> impl Iterator<Item = (&'b <K as ZeroMapKV<'a>>::GetType, V)>
Similar to Self::iter()
except it returns a direct copy of the values instead of references
to V::ULE
, in cases when V
is fixed-size
source§impl<'a, K, V> ZeroMapBorrowed<'a, K, V>
impl<'a, K, V> ZeroMapBorrowed<'a, K, V>
sourcepub fn iter_copied<'b: 'a>(&'b self) -> impl Iterator<Item = (K, V)> + 'b
pub fn iter_copied<'b: 'a>(&'b self) -> impl Iterator<Item = (K, V)> + 'b
Similar to Self::iter()
except it returns a direct copy of the keys values instead of references
to K::ULE
and V::ULE
, in cases when K
and V
are fixed-size
Trait Implementations§
source§impl<'a, K, V> Clone for ZeroMapBorrowed<'a, K, V>
impl<'a, K, V> Clone for ZeroMapBorrowed<'a, K, V>
source§impl<'a, K, V> Debug for ZeroMapBorrowed<'a, K, V>
impl<'a, K, V> Debug for ZeroMapBorrowed<'a, K, V>
source§impl<'a, K, V> Default for ZeroMapBorrowed<'a, K, V>
impl<'a, K, V> Default for ZeroMapBorrowed<'a, K, V>
source§impl<'a, K, V> From<ZeroMapBorrowed<'a, K, V>> for ZeroMap<'a, K, V>
impl<'a, K, V> From<ZeroMapBorrowed<'a, K, V>> for ZeroMap<'a, K, V>
source§fn from(other: ZeroMapBorrowed<'a, K, V>) -> Self
fn from(other: ZeroMapBorrowed<'a, K, V>) -> Self
source§impl<'a, 'b, K, V> PartialEq<ZeroMapBorrowed<'b, K, V>> for ZeroMapBorrowed<'a, K, V>
impl<'a, 'b, K, V> PartialEq<ZeroMapBorrowed<'b, K, V>> for ZeroMapBorrowed<'a, K, V>
source§fn eq(&self, other: &ZeroMapBorrowed<'b, K, V>) -> bool
fn eq(&self, other: &ZeroMapBorrowed<'b, K, V>) -> bool
self
and other
values to be equal, and is used
by ==
.source§impl<'a, K, V> Yokeable<'a> for ZeroMapBorrowed<'static, K, V>
impl<'a, K, V> Yokeable<'a> for ZeroMapBorrowed<'static, K, V>
This impl requires enabling the optional yoke
Cargo feature of the zerovec
crate
§type Output = ZeroMapBorrowed<'a, K, V>
type Output = ZeroMapBorrowed<'a, K, V>
Self
with the 'static
replaced with 'a
, i.e. Self<'a>
source§fn transform_owned(self) -> Self::Output
fn transform_owned(self) -> Self::Output
impl<'a, K, V> Copy for ZeroMapBorrowed<'a, K, V>
Auto Trait Implementations§
impl<'a, K, V> Freeze for ZeroMapBorrowed<'a, K, V>
impl<'a, K, V> RefUnwindSafe for ZeroMapBorrowed<'a, K, V>where
<K as ZeroMapKV<'a>>::Slice: RefUnwindSafe,
<V as ZeroMapKV<'a>>::Slice: RefUnwindSafe,
K: ?Sized,
V: ?Sized,
impl<'a, K, V> Send for ZeroMapBorrowed<'a, K, V>
impl<'a, K, V> Sync for ZeroMapBorrowed<'a, K, V>
impl<'a, K, V> Unpin for ZeroMapBorrowed<'a, K, V>
impl<'a, K, V> UnwindSafe for ZeroMapBorrowed<'a, K, V>where
<K as ZeroMapKV<'a>>::Slice: RefUnwindSafe,
<V as ZeroMapKV<'a>>::Slice: RefUnwindSafe,
K: ?Sized,
V: ?Sized,
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: Copy,
impl<T> CloneToUninit for Twhere
T: Copy,
source§unsafe fn clone_to_uninit(&self, dst: *mut T)
unsafe fn clone_to_uninit(&self, dst: *mut T)
clone_to_uninit
)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
)