Trait zerovec::maps::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) -> boolwhere 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) -> Orderingwhere 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) -> Orderingwhere T: Ord,

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

Object Safety§

This trait is not object safe.

Implementors§

source§

impl ZeroVecLike<usize> for FlexZeroSlice

source§

impl<'a> ZeroVecLike<usize> for FlexZeroVec<'a>

source§

impl<'a, T> ZeroVecLike<T> for ZeroVec<'a, T>where T: 'a + AsULE + Copy,

§

type GetType = <T as AsULE>::ULE

§

type SliceVariant = ZeroSlice<T>

source§

impl<'a, T, F> ZeroVecLike<T> for VarZeroVec<'a, T, F>where T: VarULE + ?Sized, F: VarZeroVecFormat,

source§

impl<T> ZeroVecLike<T> for ZeroSlice<T>where T: AsULE + Copy,

§

type GetType = <T as AsULE>::ULE

§

type SliceVariant = ZeroSlice<T>

source§

impl<T, F> ZeroVecLike<T> for VarZeroSlice<T, F>where T: VarULE + ?Sized, F: VarZeroVecFormat,