1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
/*
* SPDX-FileCopyrightText: 2023 Inria
* SPDX-FileCopyrightText: 2023 Sebastiano Vigna
*
* SPDX-License-Identifier: Apache-2.0 OR LGPL-2.1-or-later
*/
//! (Indexed) dictionaries.
//!
//! # Membership structures
//!
//! - [`VFilter`]: Static filters (approximate membership structures) based on
//! hash comparison. Use the `Box<[W]>` backend for full-width hashes, or the
//! `BitFieldVec` backend with an explicit `filter_bits` parameter for
//! space/false-positive tradeoffs.
//!
//! # Indexed dictionaries
//!
//! An indexed dictionary maps [integer indices to values], possibly
//! supporting [lookups] and [predecessor]/[successor] queries. The main
//! structures are:
//!
//! - [`EliasFano`]: A compact representation of monotone integer sequences,
//! supporting efficient access, successor, and predecessor queries.
//! - [`RearCodedListStr`] / [`RearCodedListSliceU8`]: Prefix-compressed
//! immutable lists of strings or byte sequences with random access.
//! - [`MappedRearCodedListStr`] / [`MappedRearCodedListSliceU8`]: Rear-coded
//! lists with element reordering for better compression.
//! - [`SignedFunc`]: [Functions] verified by hash signatures.
//! - [`SliceSeq`]: Adapters exposing slice references as indexed sequences.
//!
//! Most structures implement the [`TryIntoUnaligned`] trait, allowing them
//! to be converted into (usually faster) structures using unaligned access.
//!
//! [integer indices to values]: crate::traits::IndexedSeq
//! [lookups]: crate::traits::IndexedDict
//! [predecessor]: crate::traits::Pred
//! [successor]: crate::traits::Succ
//! [`SignedFunc`]: crate::func::signed::SignedFunc
//! [Functions]: crate::func
//! [`TryIntoUnaligned`]: crate::traits::TryIntoUnaligned
pub use ;
pub use ;
pub use ;
pub use SliceSeq;
pub use VFilter;