pub struct Static<T: Indexable> { /* private fields */ }Expand description
A multi-level recursive PGM-Index.
This index builds multiple levels of linear models for efficient lookups. It does not own the data; the keys must be stored separately and passed to query methods.
§Type Parameters
T: The value type that implementsIndexable. The index internally stores segments ofT::Keyfor the linear models.
§Example
use pgm_extra::index::external::Static;
let keys: Vec<u64> = (0..10000).collect();
let index = Static::new(&keys, 64, 4).unwrap();
assert!(index.contains(&keys, &5000));
assert_eq!(index.lower_bound(&keys, &5000), 5000);Implementations§
Source§impl<T: Indexable> Static<T>
impl<T: Indexable> Static<T>
pub fn new_parallel( data: &[T], epsilon: usize, epsilon_recursive: usize, ) -> Result<Self, Error>
Sourcepub fn search_by_key(&self, key: &T::Key) -> ApproxPos
pub fn search_by_key(&self, key: &T::Key) -> ApproxPos
Get an approximate position for the given key.
Sourcepub fn lower_bound(&self, data: &[T], value: &T) -> usizewhere
T: Ord,
pub fn lower_bound(&self, data: &[T], value: &T) -> usizewhere
T: Ord,
Find the first position where data[pos] >= value.
Sourcepub fn upper_bound(&self, data: &[T], value: &T) -> usizewhere
T: Ord,
pub fn upper_bound(&self, data: &[T], value: &T) -> usizewhere
T: Ord,
Find the first position where data[pos] > value.
Sourcepub fn contains(&self, data: &[T], value: &T) -> boolwhere
T: Ord,
pub fn contains(&self, data: &[T], value: &T) -> boolwhere
T: Ord,
Check if the value exists in the data.
pub fn is_empty(&self) -> bool
Sourcepub fn segments_count(&self) -> usize
pub fn segments_count(&self) -> usize
Number of segments across all levels.
pub fn epsilon(&self) -> usize
pub fn epsilon_recursive(&self) -> usize
Sourcepub fn size_in_bytes(&self) -> usize
pub fn size_in_bytes(&self) -> usize
Approximate memory usage in bytes.
Sourcepub fn range_indices<R>(&self, data: &[T], range: R) -> (usize, usize)where
T: Ord,
R: RangeBounds<T>,
pub fn range_indices<R>(&self, data: &[T], range: R) -> (usize, usize)where
T: Ord,
R: RangeBounds<T>,
Returns the (start, end) indices for iterating over data in the given range.
Sourcepub fn range<'a, R>(
&self,
data: &'a [T],
range: R,
) -> impl DoubleEndedIterator<Item = &'a T>where
T: Ord,
R: RangeBounds<T>,
pub fn range<'a, R>(
&self,
data: &'a [T],
range: R,
) -> impl DoubleEndedIterator<Item = &'a T>where
T: Ord,
R: RangeBounds<T>,
Returns an iterator over data in the given range.
Trait Implementations§
Source§impl<'de, T: Indexable> Deserialize<'de> for Static<T>
impl<'de, T: Indexable> Deserialize<'de> for Static<T>
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>,
Deserialize this value from the given Serde deserializer. Read more
Source§impl<T: Indexable> External<T> for Static<T>
impl<T: Indexable> External<T> for Static<T>
Source§fn lower_bound(&self, data: &[T], value: &T) -> usizewhere
T: Ord,
fn lower_bound(&self, data: &[T], value: &T) -> usizewhere
T: Ord,
Find the first position where
data[pos] >= value.Source§fn upper_bound(&self, data: &[T], value: &T) -> usizewhere
T: Ord,
fn upper_bound(&self, data: &[T], value: &T) -> usizewhere
T: Ord,
Find the first position where
data[pos] > value.Source§fn contains(&self, data: &[T], value: &T) -> boolwhere
T: Ord,
fn contains(&self, data: &[T], value: &T) -> boolwhere
T: Ord,
Check if the value exists in the sorted slice.
Source§fn segments_count(&self) -> usize
fn segments_count(&self) -> usize
Number of segments in the index.
Source§fn size_in_bytes(&self) -> usize
fn size_in_bytes(&self) -> usize
Approximate memory usage in bytes.
Auto Trait Implementations§
impl<T> Freeze for Static<T>
impl<T> RefUnwindSafe for Static<T>
impl<T> Send for Static<T>
impl<T> Sync for Static<T>
impl<T> Unpin for Static<T>
impl<T> UnwindSafe for Static<T>
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> CloneToUninit for Twhere
T: Clone,
impl<T> CloneToUninit for Twhere
T: Clone,
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