icu_collections/char16trie/mod.rs
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
// 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 ).
//! This module provides a data structure for a space-efficient and time-efficient lookup of
//! sequences of 16-bit units (commonly but not necessarily UTF-16 code units)
//! which map to integer values.
//!
//! It is an implementation of the existing [ICU4C UCharsTrie](https://unicode-org.github.io/icu-docs/apidoc/released/icu4c/classicu_1_1UCharsTrie.html)
//! / [ICU4J CharsTrie](https://unicode-org.github.io/icu-docs/apidoc/released/icu4j/com/ibm/icu/util/CharsTrie.html) API.
//!
//! ## Architecture
//!
//! ICU4X [`Char16Trie`] is designed to provide a read-only view of `UCharsTrie` data that is exported from ICU4C.
//!
//! ## Examples
//!
//! ### Querying a `Char16Trie`
//!
//! ```rust
//! use icu::collections::char16trie::{Char16Trie, TrieResult};
//! use zerovec::ZeroVec;
//!
//! // A Char16Trie containing the ASCII characters mapping 'a' to 1 and 'ab'
//! // to 100.
//! let trie_data = [48, 97, 176, 98, 32868];
//! let trie = Char16Trie::new(ZeroVec::from_slice_or_alloc(&trie_data));
//!
//! let mut iter = trie.iter();
//! let res = iter.next('a');
//! assert_eq!(res, TrieResult::Intermediate(1));
//! let res = iter.next('b');
//! assert_eq!(res, TrieResult::FinalValue(100));
//! let res = iter.next('c');
//! assert_eq!(res, TrieResult::NoMatch);
//! ```
//!
//! [`ICU4X`]: ../icu/index.html
mod trie;
pub use trie::Char16Trie;
pub use trie::Char16TrieIterator;
pub use trie::TrieResult;