zerovec::maps

Trait ZeroVecLike

Source
pub trait ZeroVecLike<T: ?Sized> {
    type GetType: ?Sized + 'static;
    type SliceVariant: ZeroVecLike<T, GetType = Self::GetType> + ?Sized;

Show 13 methods // Required methods fn zvl_new_borrowed() -> &'static Self::SliceVariant; fn zvl_binary_search(&self, k: &T) -> Result<usize, usize> where T: Ord; fn zvl_binary_search_in_range( &self, k: &T, range: Range<usize>, ) -> Option<Result<usize, usize>> where T: Ord; fn zvl_binary_search_by( &self, predicate: impl FnMut(&T) -> Ordering, ) -> Result<usize, usize>; fn zvl_binary_search_in_range_by( &self, predicate: impl FnMut(&T) -> Ordering, range: Range<usize>, ) -> Option<Result<usize, usize>>; fn zvl_get(&self, index: usize) -> Option<&Self::GetType>; fn zvl_len(&self) -> usize; fn zvl_as_borrowed(&self) -> &Self::SliceVariant; fn zvl_get_as_t<R>(g: &Self::GetType, f: impl FnOnce(&T) -> R) -> R; // Provided methods fn zvl_is_ascending(&self) -> bool where T: Ord { ... } fn zvl_is_empty(&self) -> bool { ... } fn t_cmp_get(t: &T, g: &Self::GetType) -> Ordering where T: Ord { ... } fn get_cmp_get(a: &Self::GetType, b: &Self::GetType) -> Ordering where T: Ord { ... }
}
Expand description

Trait abstracting over ZeroVec and VarZeroVec, for use in ZeroMap. You should not be implementing or calling this trait directly.

The T type is the type received by Self::zvl_binary_search(), as well as the one used for human-readable serialization.

Methods are prefixed with zvl_* to avoid clashes with methods on the types themselves

Required Associated Types§

Source

type GetType: ?Sized + 'static

The type returned by Self::get()

Source

type SliceVariant: ZeroVecLike<T, GetType = Self::GetType> + ?Sized

A fully borrowed version of this

Required Methods§

Source

fn zvl_new_borrowed() -> &'static Self::SliceVariant

Create a new, empty borrowed variant

Search for a key in a sorted vector, returns Ok(index) if found, returns Err(insert_index) if not found, where insert_index is the index where it should be inserted to maintain sort order.

Source

fn zvl_binary_search_in_range( &self, k: &T, range: Range<usize>, ) -> Option<Result<usize, usize>>
where T: Ord,

Search for a key within a certain range in a sorted vector. Returns None if the range is out of bounds, and Ok or Err in the same way as zvl_binary_search. Indices are returned relative to the start of the range.

Source

fn zvl_binary_search_by( &self, predicate: impl FnMut(&T) -> Ordering, ) -> Result<usize, usize>

Search for a key in a sorted vector by a predicate, returns Ok(index) if found, returns Err(insert_index) if not found, where insert_index is the index where it should be inserted to maintain sort order.

Source

fn zvl_binary_search_in_range_by( &self, predicate: impl FnMut(&T) -> Ordering, range: Range<usize>, ) -> Option<Result<usize, usize>>

Search for a key within a certain range in a sorted vector by a predicate. Returns None if the range is out of bounds, and Ok or Err in the same way as zvl_binary_search. Indices are returned relative to the start of the range.

Source

fn zvl_get(&self, index: usize) -> Option<&Self::GetType>

Get element at index

Source

fn zvl_len(&self) -> usize

The length of this vector

Source

fn zvl_as_borrowed(&self) -> &Self::SliceVariant

Construct a borrowed variant by borrowing from &self.

This function behaves like &'b self -> Self::SliceVariant<'b>, where 'b is the lifetime of the reference to this object.

Note: We rely on the compiler recognizing 'a and 'b as covariant and casting &'b Self<'a> to &'b Self<'b> when this gets called, which works out for ZeroVec and VarZeroVec containers just fine.

Source

fn zvl_get_as_t<R>(g: &Self::GetType, f: impl FnOnce(&T) -> R) -> R

Obtain a reference to T, passed to a closure

This uses a callback because it’s not possible to return owned-or-borrowed types without GATs

Impls should guarantee that the callback function is be called exactly once.

Provided Methods§

Source

fn zvl_is_ascending(&self) -> bool
where T: Ord,

Check if this vector is in ascending order according to Ts Ord impl

Source

fn zvl_is_empty(&self) -> bool

Check if this vector is empty

Source

fn t_cmp_get(t: &T, g: &Self::GetType) -> Ordering
where T: Ord,

Compare this type with a Self::GetType. This must produce the same result as if g were converted to Self

Source

fn get_cmp_get(a: &Self::GetType, b: &Self::GetType) -> Ordering
where T: Ord,

Compare two values of Self::GetType. This must produce the same result as if both a and b were converted to Self

Dyn Compatibility§

This trait is not dyn compatible.

In older versions of Rust, dyn compatibility was called "object safety", so this trait is not object safe.

Implementors§