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<T: Indexable> Archive for Static<T>
impl<T: Indexable> Archive for Static<T>
Source§type Resolver = StaticResolver<T>
type Resolver = StaticResolver<T>
The resolver for this type. It must contain all the additional
information from serializing needed to make the archived type from
the normal type.
Source§fn resolve(&self, resolver: Self::Resolver, out: Place<Self::Archived>)
fn resolve(&self, resolver: Self::Resolver, out: Place<Self::Archived>)
Creates the archived version of this value at the given position and
writes it to the given output. Read more
Source§const COPY_OPTIMIZATION: CopyOptimization<Self> = _
const COPY_OPTIMIZATION: CopyOptimization<Self> = _
An optimization flag that allows the bytes of this type to be copied
directly to a writer instead of calling
serialize. Read moreSource§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<__D: Fallible + ?Sized, T: Indexable> Deserialize<Static<T>, __D> for Archived<Static<T>>
impl<__D: Fallible + ?Sized, T: Indexable> Deserialize<Static<T>, __D> for Archived<Static<T>>
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.
impl<T: Indexable> StructuralPartialEq for Static<T>
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> ArchivePointee for T
impl<T> ArchivePointee for T
Source§type ArchivedMetadata = ()
type ArchivedMetadata = ()
The archived version of the pointer metadata for this type.
Source§fn pointer_metadata(
_: &<T as ArchivePointee>::ArchivedMetadata,
) -> <T as Pointee>::Metadata
fn pointer_metadata( _: &<T as ArchivePointee>::ArchivedMetadata, ) -> <T as Pointee>::Metadata
Converts some archived metadata to the pointer metadata for itself.
Source§impl<T> ArchiveUnsized for Twhere
T: Archive,
impl<T> ArchiveUnsized for Twhere
T: Archive,
Source§type Archived = <T as Archive>::Archived
type Archived = <T as Archive>::Archived
The archived counterpart of this type. Unlike
Archive, it may be
unsized. Read moreSource§fn archived_metadata(
&self,
) -> <<T as ArchiveUnsized>::Archived as ArchivePointee>::ArchivedMetadata
fn archived_metadata( &self, ) -> <<T as ArchiveUnsized>::Archived as ArchivePointee>::ArchivedMetadata
Creates the archived version of the metadata for this value.
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 moreSource§impl<T> LayoutRaw for T
impl<T> LayoutRaw for T
Source§fn layout_raw(_: <T as Pointee>::Metadata) -> Result<Layout, LayoutError>
fn layout_raw(_: <T as Pointee>::Metadata) -> Result<Layout, LayoutError>
Returns the layout of the type.
Source§impl<T, N1, N2> Niching<NichedOption<T, N1>> for N2
impl<T, N1, N2> Niching<NichedOption<T, N1>> for N2
Source§unsafe fn is_niched(niched: *const NichedOption<T, N1>) -> bool
unsafe fn is_niched(niched: *const NichedOption<T, N1>) -> bool
Returns whether the given value has been niched. Read more
Source§fn resolve_niched(out: Place<NichedOption<T, N1>>)
fn resolve_niched(out: Place<NichedOption<T, N1>>)
Writes data to
out indicating that a T is niched.