Struct zerovec::maps::ZeroMap2dBorrowed
source · pub struct ZeroMap2dBorrowed<'a, K0, K1, V>{ /* private fields */ }
Expand description
A borrowed-only version of ZeroMap2d
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 ZeroMap2dBorrowed
instance.
§Examples
use zerovec::maps::ZeroMap2dBorrowed;
// Example byte buffer representing the map { 1: {2: "three" } }
let BINCODE_BYTES: &[u8; 47] = &[
2, 0, 0, 0, 0, 0, 0, 0, 1, 0, 4, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 2, 0,
0, 0, 0, 0, 0, 0, 2, 0, 7, 0, 0, 0, 0, 0, 0, 0, 1, 0, 116, 104,
114, 101, 101
];
// Deserializing to ZeroMap2d requires no heap allocations.
let zero_map: ZeroMap2dBorrowed<u16, u16, str> =
bincode::deserialize(BINCODE_BYTES)
.expect("Should deserialize successfully");
assert_eq!(zero_map.get_2d(&1, &2), Some("three"));
This can be obtained from a ZeroMap2d
via ZeroMap2d::as_borrowed
Implementations§
source§impl<'a, K0, K1, V> ZeroMap2dBorrowed<'a, K0, K1, V>
impl<'a, K0, K1, V> ZeroMap2dBorrowed<'a, K0, K1, V>
sourcepub fn new() -> Self
pub fn new() -> Self
Creates a new, empty ZeroMap2dBorrowed<K0, K1, V>
.
Note: Since ZeroMap2dBorrowed
is not mutable, the return value will be a stub unless
converted into a ZeroMap2d
.
§Examples
use zerovec::maps::ZeroMap2dBorrowed;
let zm: ZeroMap2dBorrowed<u16, u16, str> = ZeroMap2dBorrowed::new();
assert!(zm.is_empty());
source§impl<'a, K0, K1, V> ZeroMap2dBorrowed<'a, K0, K1, V>
impl<'a, K0, K1, V> ZeroMap2dBorrowed<'a, K0, K1, V>
sourcepub fn len(&self) -> usize
pub fn len(&self) -> usize
The number of elements in the ZeroMap2dBorrowed
sourcepub fn is_empty(&self) -> bool
pub fn is_empty(&self) -> bool
Whether the ZeroMap2dBorrowed
is empty
source§impl<'a, K0, K1, V> ZeroMap2dBorrowed<'a, K0, K1, V>
impl<'a, K0, K1, V> ZeroMap2dBorrowed<'a, K0, K1, V>
sourcepub fn get_2d(&self, key0: &K0, key1: &K1) -> Option<&'a V::GetType>
pub fn get_2d(&self, key0: &K0, key1: &K1) -> Option<&'a V::GetType>
Get the value associated with key0
and key1
, 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 ZeroMap2dBorrowed
over ZeroMap2d
.
use zerovec::ZeroMap2d;
let mut map = ZeroMap2d::new();
map.insert(&1, "one", "foo");
map.insert(&2, "one", "bar");
map.insert(&2, "two", "baz");
let borrowed = map.as_borrowed();
assert_eq!(borrowed.get_2d(&1, "one"), Some("foo"));
assert_eq!(borrowed.get_2d(&1, "two"), None);
assert_eq!(borrowed.get_2d(&2, "one"), Some("bar"));
assert_eq!(borrowed.get_2d(&2, "two"), Some("baz"));
assert_eq!(borrowed.get_2d(&3, "three"), None);
source§impl<'a, K0, K1, V> ZeroMap2dBorrowed<'a, K0, K1, V>
impl<'a, K0, K1, V> ZeroMap2dBorrowed<'a, K0, K1, V>
sourcepub fn get0<'l>(
&'l self,
key0: &K0,
) -> Option<ZeroMap2dCursor<'a, 'a, K0, K1, V>>
pub fn get0<'l>( &'l self, key0: &K0, ) -> Option<ZeroMap2dCursor<'a, 'a, K0, K1, V>>
Gets a cursor for key0
. If None
, then key0
is not in the map. If Some
,
then key0
is in the map, and key1
can be queried.
use zerovec::ZeroMap2d;
let mut map = ZeroMap2d::new();
map.insert(&1, "one", "foo");
map.insert(&2, "two", "bar");
let borrowed = map.as_borrowed();
assert!(matches!(borrowed.get0(&1), Some(_)));
assert!(matches!(borrowed.get0(&3), None));
sourcepub fn get0_by<'l>(
&'l self,
predicate: impl FnMut(&K0) -> Ordering,
) -> Option<ZeroMap2dCursor<'a, 'a, K0, K1, V>>
pub fn get0_by<'l>( &'l self, predicate: impl FnMut(&K0) -> Ordering, ) -> Option<ZeroMap2dCursor<'a, 'a, K0, K1, V>>
Binary search the map for key0
, returning a cursor.
use zerovec::ZeroMap2d;
let mut map = ZeroMap2d::new();
map.insert(&1, "one", "foo");
map.insert(&2, "two", "bar");
let borrowed = map.as_borrowed();
assert!(matches!(borrowed.get0_by(|probe| probe.cmp(&1)), Some(_)));
assert!(matches!(borrowed.get0_by(|probe| probe.cmp(&3)), None));
sourcepub fn contains_key0(&self, key0: &K0) -> bool
pub fn contains_key0(&self, key0: &K0) -> bool
Returns whether key0
is contained in this map
use zerovec::ZeroMap2d;
let mut map = ZeroMap2d::new();
map.insert(&1, "one", "foo");
map.insert(&2, "two", "bar");
let borrowed = map.as_borrowed();
assert!(borrowed.contains_key0(&1));
assert!(!borrowed.contains_key0(&3));
source§impl<'a, K0, K1, V> ZeroMap2dBorrowed<'a, K0, K1, V>
impl<'a, K0, K1, V> ZeroMap2dBorrowed<'a, K0, K1, V>
sourcepub fn iter0<'l>(
&'l self,
) -> impl Iterator<Item = ZeroMap2dCursor<'a, 'a, K0, K1, V>> + 'l
pub fn iter0<'l>( &'l self, ) -> impl Iterator<Item = ZeroMap2dCursor<'a, 'a, K0, K1, V>> + 'l
Produce an ordered iterator over keys0
source§impl<'a, K0, K1, V> ZeroMap2dBorrowed<'a, K0, K1, V>
impl<'a, K0, K1, V> ZeroMap2dBorrowed<'a, K0, K1, V>
sourcepub fn get_copied_2d(&self, key0: &K0, key1: &K1) -> Option<V>
pub fn get_copied_2d(&self, key0: &K0, key1: &K1) -> Option<V>
For cases when V
is fixed-size, obtain a direct copy of V
instead of V::ULE
Trait Implementations§
source§impl<'a, K0, K1, V> Bake for ZeroMap2dBorrowed<'a, K0, K1, V>
impl<'a, K0, K1, V> Bake for ZeroMap2dBorrowed<'a, K0, K1, V>
source§fn bake(&self, env: &CrateEnv) -> TokenStream
fn bake(&self, env: &CrateEnv) -> TokenStream
source§impl<'a, K0, K1, V> BakeSize for ZeroMap2dBorrowed<'a, K0, K1, V>
impl<'a, K0, K1, V> BakeSize for ZeroMap2dBorrowed<'a, K0, K1, V>
source§fn borrows_size(&self) -> usize
fn borrows_size(&self) -> usize
source§impl<'a, K0, K1, V> Clone for ZeroMap2dBorrowed<'a, K0, K1, V>
impl<'a, K0, K1, V> Clone for ZeroMap2dBorrowed<'a, K0, K1, V>
source§impl<'a, K0, K1, V> Debug for ZeroMap2dBorrowed<'a, K0, K1, V>
impl<'a, K0, K1, V> Debug for ZeroMap2dBorrowed<'a, K0, K1, V>
source§impl<'a, K0, K1, V> Default for ZeroMap2dBorrowed<'a, K0, K1, V>
impl<'a, K0, K1, V> Default for ZeroMap2dBorrowed<'a, K0, K1, V>
source§impl<'de, 'a, K0, K1, V> Deserialize<'de> for ZeroMap2dBorrowed<'a, K0, K1, V>where
K0: ZeroMapKV<'a> + Ord + ?Sized,
K1: ZeroMapKV<'a> + Ord + ?Sized,
V: ZeroMapKV<'a> + ?Sized,
K0::Container: Deserialize<'de>,
K1::Container: Deserialize<'de>,
V::Container: Deserialize<'de>,
K0::OwnedType: Deserialize<'de>,
K1::OwnedType: Deserialize<'de>,
V::OwnedType: Deserialize<'de>,
'de: 'a,
impl<'de, 'a, K0, K1, V> Deserialize<'de> for ZeroMap2dBorrowed<'a, K0, K1, V>where
K0: ZeroMapKV<'a> + Ord + ?Sized,
K1: ZeroMapKV<'a> + Ord + ?Sized,
V: ZeroMapKV<'a> + ?Sized,
K0::Container: Deserialize<'de>,
K1::Container: Deserialize<'de>,
V::Container: Deserialize<'de>,
K0::OwnedType: Deserialize<'de>,
K1::OwnedType: Deserialize<'de>,
V::OwnedType: Deserialize<'de>,
'de: 'a,
This impl requires enabling the optional serde
Cargo feature of the zerovec
crate
source§fn deserialize<D>(deserializer: D) -> Result<Self, D::Error>where
D: Deserializer<'de>,
fn deserialize<D>(deserializer: D) -> Result<Self, D::Error>where
D: Deserializer<'de>,
source§impl<'a, K0, K1, V> From<ZeroMap2dBorrowed<'a, K0, K1, V>> for ZeroMap2d<'a, K0, K1, V>
impl<'a, K0, K1, V> From<ZeroMap2dBorrowed<'a, K0, K1, V>> for ZeroMap2d<'a, K0, K1, V>
source§fn from(other: ZeroMap2dBorrowed<'a, K0, K1, V>) -> Self
fn from(other: ZeroMap2dBorrowed<'a, K0, K1, V>) -> Self
source§impl<'a, 'b, K0, K1, V> PartialEq<ZeroMap2dBorrowed<'b, K0, K1, V>> for ZeroMap2dBorrowed<'a, K0, K1, V>where
K0: for<'c> ZeroMapKV<'c> + ?Sized,
K1: for<'c> ZeroMapKV<'c> + ?Sized,
V: for<'c> ZeroMapKV<'c> + ?Sized,
<K0 as ZeroMapKV<'a>>::Slice: PartialEq<<K0 as ZeroMapKV<'b>>::Slice>,
<K1 as ZeroMapKV<'a>>::Slice: PartialEq<<K1 as ZeroMapKV<'b>>::Slice>,
<V as ZeroMapKV<'a>>::Slice: PartialEq<<V as ZeroMapKV<'b>>::Slice>,
impl<'a, 'b, K0, K1, V> PartialEq<ZeroMap2dBorrowed<'b, K0, K1, V>> for ZeroMap2dBorrowed<'a, K0, K1, V>where
K0: for<'c> ZeroMapKV<'c> + ?Sized,
K1: for<'c> ZeroMapKV<'c> + ?Sized,
V: for<'c> ZeroMapKV<'c> + ?Sized,
<K0 as ZeroMapKV<'a>>::Slice: PartialEq<<K0 as ZeroMapKV<'b>>::Slice>,
<K1 as ZeroMapKV<'a>>::Slice: PartialEq<<K1 as ZeroMapKV<'b>>::Slice>,
<V as ZeroMapKV<'a>>::Slice: PartialEq<<V as ZeroMapKV<'b>>::Slice>,
source§fn eq(&self, other: &ZeroMap2dBorrowed<'b, K0, K1, V>) -> bool
fn eq(&self, other: &ZeroMap2dBorrowed<'b, K0, K1, V>) -> bool
self
and other
values to be equal, and is used by ==
.source§impl<'a, K0, K1, V> Serialize for ZeroMap2dBorrowed<'a, K0, K1, V>
impl<'a, K0, K1, V> Serialize for ZeroMap2dBorrowed<'a, K0, K1, V>
This impl requires enabling the optional serde
Cargo feature of the zerovec
crate
source§impl<'a, K0, K1, V> Yokeable<'a> for ZeroMap2dBorrowed<'static, K0, K1, V>where
K0: 'static + for<'b> ZeroMapKV<'b> + ?Sized,
K1: 'static + for<'b> ZeroMapKV<'b> + ?Sized,
V: 'static + for<'b> ZeroMapKV<'b> + ?Sized,
&'static <K0 as ZeroMapKV<'static>>::Slice: for<'b> Yokeable<'b>,
&'static <K1 as ZeroMapKV<'static>>::Slice: for<'b> Yokeable<'b>,
&'static <V as ZeroMapKV<'static>>::Slice: for<'b> Yokeable<'b>,
impl<'a, K0, K1, V> Yokeable<'a> for ZeroMap2dBorrowed<'static, K0, K1, V>where
K0: 'static + for<'b> ZeroMapKV<'b> + ?Sized,
K1: 'static + for<'b> ZeroMapKV<'b> + ?Sized,
V: 'static + for<'b> ZeroMapKV<'b> + ?Sized,
&'static <K0 as ZeroMapKV<'static>>::Slice: for<'b> Yokeable<'b>,
&'static <K1 as ZeroMapKV<'static>>::Slice: for<'b> Yokeable<'b>,
&'static <V as ZeroMapKV<'static>>::Slice: for<'b> Yokeable<'b>,
This impl requires enabling the optional yoke
Cargo feature of the zerovec
crate
source§type Output = ZeroMap2dBorrowed<'a, K0, K1, V>
type Output = ZeroMap2dBorrowed<'a, K0, K1, 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
source§unsafe fn make(from: Self::Output) -> Self
unsafe fn make(from: Self::Output) -> Self
Self<'a>
’s lifetime. Read moresource§fn transform_mut<F>(&'a mut self, f: F)where
F: 'static + for<'b> FnOnce(&'b mut Self::Output),
fn transform_mut<F>(&'a mut self, f: F)where
F: 'static + for<'b> FnOnce(&'b mut Self::Output),
self
between &'a mut Self<'static>
and &'a mut Self<'a>
,
and pass it to f
. Read moreimpl<'a, K0, K1, V> Copy for ZeroMap2dBorrowed<'a, K0, K1, V>
Auto Trait Implementations§
impl<'a, K0, K1, V> Freeze for ZeroMap2dBorrowed<'a, K0, K1, V>
impl<'a, K0, K1, V> RefUnwindSafe for ZeroMap2dBorrowed<'a, K0, K1, V>where
<K0 as ZeroMapKV<'a>>::Slice: RefUnwindSafe,
<K1 as ZeroMapKV<'a>>::Slice: RefUnwindSafe,
<V as ZeroMapKV<'a>>::Slice: RefUnwindSafe,
K0: ?Sized,
K1: ?Sized,
V: ?Sized,
impl<'a, K0, K1, V> Send for ZeroMap2dBorrowed<'a, K0, K1, V>
impl<'a, K0, K1, V> Sync for ZeroMap2dBorrowed<'a, K0, K1, V>
impl<'a, K0, K1, V> Unpin for ZeroMap2dBorrowed<'a, K0, K1, V>
impl<'a, K0, K1, V> UnwindSafe for ZeroMap2dBorrowed<'a, K0, K1, V>where
<K0 as ZeroMapKV<'a>>::Slice: RefUnwindSafe,
<K1 as ZeroMapKV<'a>>::Slice: RefUnwindSafe,
<V as ZeroMapKV<'a>>::Slice: RefUnwindSafe,
K0: ?Sized,
K1: ?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: Clone,
impl<T> CloneToUninit for Twhere
T: Clone,
source§unsafe fn clone_to_uninit(&self, dst: *mut T)
unsafe fn clone_to_uninit(&self, dst: *mut T)
clone_to_uninit
)