pub struct Index<T: Translator, V: Eq + Send + Sync> { /* private fields */ }Expand description
A memory-efficient index that uses an ordered map internally to map translated keys to arbitrary values.
Implementations§
Trait Implementations§
Source§impl<T: Translator, V: Eq + Send + Sync> Ordered for Index<T, V>
impl<T: Translator, V: Eq + Send + Sync> Ordered for Index<T, V>
type Iterator<'a> = ImmutableCursor<'a, V> where Self: 'a
fn prev_translated_key<'a>(
&'a self,
key: &[u8],
) -> Option<(Self::Iterator<'a>, bool)>where
Self::Value: 'a,
Source§fn next_translated_key<'a>(
&'a self,
key: &[u8],
) -> Option<(Self::Iterator<'a>, bool)>where
Self::Value: 'a,
fn next_translated_key<'a>(
&'a self,
key: &[u8],
) -> Option<(Self::Iterator<'a>, bool)>where
Self::Value: 'a,
For example, if the translator is looking only at the first byte of a key, and the index
contains values for translated keys 0b, 1c, and 2d, then
get_next([0b, 01, 02, ...]) would
return the values associated with 1c, get_next([2a, 01, 02, ...]) would return the values
associated with 2d, and get_next([2d]) would “cycle around” to the values associated with
0b, returning true for the bool. Because values associated with the same translated key can
appear in any order, keys with the same first byte in this example would need to be ordered
by the caller if a full ordering over the untranslated keyspace is desired.fn first_translated_key<'a>(&'a self) -> Option<Self::Iterator<'a>>where
Self::Value: 'a,
fn last_translated_key<'a>(&'a self) -> Option<Self::Iterator<'a>>where
Self::Value: 'a,
Source§impl<T: Translator, V: Eq + Send + Sync> Unordered for Index<T, V>
impl<T: Translator, V: Eq + Send + Sync> Unordered for Index<T, V>
Source§type Cursor<'a> = Cursor<'a, <T as Translator>::Key, V>
where
Self: 'a
type Cursor<'a> = Cursor<'a, <T as Translator>::Key, V> where Self: 'a
The type of cursor returned by this index to iterate over values with conflicting keys.
Source§fn get<'a>(&'a self, key: &[u8]) -> impl Iterator<Item = &'a V> + 'awhere
V: 'a,
fn get<'a>(&'a self, key: &[u8]) -> impl Iterator<Item = &'a V> + 'awhere
V: 'a,
Returns an iterator over all values associated with a translated key.
Source§fn get_mut<'a>(&'a mut self, key: &[u8]) -> Option<Self::Cursor<'a>>
fn get_mut<'a>(&'a mut self, key: &[u8]) -> Option<Self::Cursor<'a>>
Provides mutable access to the values associated with a translated key, if the key exists.
Source§fn get_mut_or_insert<'a>(
&'a mut self,
key: &[u8],
value: V,
) -> Option<Self::Cursor<'a>>
fn get_mut_or_insert<'a>( &'a mut self, key: &[u8], value: V, ) -> Option<Self::Cursor<'a>>
Provides mutable access to the values associated with a translated key (if the key exists),
otherwise inserts a new value and returns
None.Source§fn insert_and_prune(
&mut self,
key: &[u8],
value: V,
predicate: impl Fn(&V) -> bool,
)
fn insert_and_prune( &mut self, key: &[u8], value: V, predicate: impl Fn(&V) -> bool, )
Insert a value at the given translated key, and prune any values that are no longer valid. Read more
Auto Trait Implementations§
impl<T, V> Freeze for Index<T, V>where
T: Freeze,
impl<T, V> RefUnwindSafe for Index<T, V>
impl<T, V> Send for Index<T, V>
impl<T, V> Sync for Index<T, V>
impl<T, V> Unpin for Index<T, V>where
T: Unpin,
impl<T, V> UnwindSafe for Index<T, V>
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
Mutably borrows from an owned value. Read more
Source§impl<T> FutureExt for T
impl<T> FutureExt for T
Source§fn with_context(self, otel_cx: Context) -> WithContext<Self>
fn with_context(self, otel_cx: Context) -> WithContext<Self>
Source§fn with_current_context(self) -> WithContext<Self>
fn with_current_context(self) -> WithContext<Self>
Source§impl<T> Instrument for T
impl<T> Instrument for T
Source§fn instrument(self, span: Span) -> Instrumented<Self>
fn instrument(self, span: Span) -> Instrumented<Self>
Source§fn in_current_span(self) -> Instrumented<Self>
fn in_current_span(self) -> Instrumented<Self>
Source§impl<T> IntoEither for T
impl<T> IntoEither for T
Source§fn into_either(self, into_left: bool) -> Either<Self, Self>
fn into_either(self, into_left: bool) -> Either<Self, Self>
Converts
self into a Left variant of Either<Self, Self>
if into_left is true.
Converts self into a Right variant of Either<Self, Self>
otherwise. Read moreSource§fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
Converts
self into a Left variant of Either<Self, Self>
if into_left(&self) returns true.
Converts self into a Right variant of Either<Self, Self>
otherwise. Read more