88 lines
2.5 KiB
Rust
88 lines
2.5 KiB
Rust
// This file is part of ICU4X. For terms of use, please see the file
|
|
// called LICENSE at the top level of the ICU4X source tree
|
|
// (online at: https://github.com/unicode-org/icu4x/blob/main/LICENSE ).
|
|
|
|
//! A data structure offering zero-copy storage and retrieval of byte strings, with a focus
|
|
//! on the efficient storage of ASCII strings. Strings are mapped to `usize` values.
|
|
//!
|
|
//! [`ZeroTrie`] does not support mutation because doing so would require recomputing the entire
|
|
//! data structure. Instead, it supports conversion to and from [`LiteMap`] and [`BTreeMap`].
|
|
//!
|
|
//! There are multiple variants of [`ZeroTrie`] optimized for different use cases.
|
|
//!
|
|
//! # Examples
|
|
//!
|
|
//! ```
|
|
//! use zerotrie::ZeroTrie;
|
|
//!
|
|
//! let data: &[(&str, usize)] = &[("abc", 11), ("xyz", 22), ("axyb", 33)];
|
|
//!
|
|
//! let trie: ZeroTrie<Vec<u8>> = data.iter().copied().collect();
|
|
//!
|
|
//! assert_eq!(trie.get("axyb"), Some(33));
|
|
//! assert_eq!(trie.byte_len(), 18);
|
|
//! ```
|
|
//!
|
|
//! # Internal Structure
|
|
//!
|
|
//! To read about the internal structure of [`ZeroTrie`], build the docs with private modules:
|
|
//!
|
|
//! ```bash
|
|
//! cargo doc --document-private-items --all-features --no-deps --open
|
|
//! ```
|
|
//!
|
|
//! [`LiteMap`]: litemap::LiteMap
|
|
//! [`BTreeMap`]: alloc::collections::BTreeMap
|
|
|
|
// https://github.com/unicode-org/icu4x/blob/main/documents/process/boilerplate.md#library-annotations
|
|
#![cfg_attr(not(any(test, doc)), no_std)]
|
|
#![cfg_attr(
|
|
not(test),
|
|
deny(
|
|
clippy::indexing_slicing,
|
|
clippy::unwrap_used,
|
|
clippy::expect_used,
|
|
clippy::panic,
|
|
clippy::exhaustive_structs,
|
|
clippy::exhaustive_enums,
|
|
clippy::trivially_copy_pass_by_ref,
|
|
missing_debug_implementations,
|
|
)
|
|
)]
|
|
#![warn(missing_docs)]
|
|
|
|
#[cfg(feature = "alloc")]
|
|
extern crate alloc;
|
|
|
|
mod builder;
|
|
mod byte_phf;
|
|
pub mod cursor;
|
|
mod error;
|
|
#[macro_use]
|
|
mod helpers;
|
|
mod options;
|
|
mod reader;
|
|
#[cfg(feature = "serde")]
|
|
mod serde;
|
|
mod varint;
|
|
mod zerotrie;
|
|
|
|
pub use crate::zerotrie::ZeroAsciiIgnoreCaseTrie;
|
|
pub use crate::zerotrie::ZeroTrie;
|
|
pub use crate::zerotrie::ZeroTrieExtendedCapacity;
|
|
pub use crate::zerotrie::ZeroTriePerfectHash;
|
|
pub use crate::zerotrie::ZeroTrieSimpleAscii;
|
|
pub use error::ZeroTrieBuildError;
|
|
|
|
#[cfg(feature = "alloc")]
|
|
pub use crate::zerotrie::ZeroTrieStringIterator;
|
|
#[cfg(feature = "alloc")]
|
|
pub use reader::ZeroTrieIterator;
|
|
|
|
#[doc(hidden)]
|
|
pub mod _internal {
|
|
pub use crate::byte_phf::f1;
|
|
pub use crate::byte_phf::f2;
|
|
pub use crate::byte_phf::PerfectByteHashMap;
|
|
}
|