HashIndex

Struct HashIndex 

pub struct HashIndex<'a> { /* private fields */ }
Expand description

A unique hash index over a borrowed slice of Values.

Keys are extracted from each value using a set of Projections. The key is the composite of the projected field values. Only equality lookup is supported.

Both construction and lookup are O(1) amortized (hash map operations).

§Uniqueness

The index assumes each extracted key is unique across the source slice. A debug_assert! fires on duplicate keys at build time.

§Cloning

Key fields are cloned into owned Values for use as map keys. Full records are never cloned — the map values are &'a Value references into the source slice.

Implementations§

§

impl<'a> HashIndex<'a>

pub fn new(values: &'a [Value], projections: &[Projection]) -> HashIndex<'a>

Build an index over values, keyed by the fields selected by projections.

Each projection navigates into a value to extract one key component. Multiple projections produce a composite key compared lexicographically.

pub fn find(&self, key: &[Value]) -> Option<&'a Value>

Look up the value whose key equals key.

key must be a slice of values with one entry per projection used at build time. Returns None if no value matches.

Auto Trait Implementations§

§

impl<'a> Freeze for HashIndex<'a>

§

impl<'a> RefUnwindSafe for HashIndex<'a>

§

impl<'a> Send for HashIndex<'a>

§

impl<'a> Sync for HashIndex<'a>

§

impl<'a> Unpin for HashIndex<'a>

§

impl<'a> UnwindSafe for HashIndex<'a>

Blanket Implementations§

Source§

impl<T> Any for T
where T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

Source§

impl<T, U> Into<U> for T
where U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

That is, this conversion is whatever the implementation of From<T> for U chooses to do.

Source§

impl<T> Same for T

Source§

type Output = T

Should always be Self
Source§

impl<T, U> TryFrom<U> for T
where U: Into<T>,

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
§

impl<V, T> VZip<V> for T
where V: MultiLane<T>,

§

fn vzip(self) -> V