• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 // This file is part of ICU4X. For terms of use, please see the file
2 // called LICENSE at the top level of the ICU4X source tree
3 // (online at: https://github.com/unicode-org/icu4x/blob/main/LICENSE ).
4 
5 //! This module provides a data structure for a space-efficient and time-efficient lookup of
6 //! sequences of 16-bit units (commonly but not necessarily UTF-16 code units)
7 //! which map to integer values.
8 //!
9 //! It is an implementation of the existing [ICU4C UCharsTrie](https://unicode-org.github.io/icu-docs/apidoc/released/icu4c/classicu_1_1UCharsTrie.html)
10 //! / [ICU4J CharsTrie](https://unicode-org.github.io/icu-docs/apidoc/released/icu4j/com/ibm/icu/util/CharsTrie.html) API.
11 //!
12 //! ## Architecture
13 //!
14 //! ICU4X [`Char16Trie`] is designed to provide a read-only view of `UCharsTrie` data that is exported from ICU4C.
15 //!
16 //! ## Examples
17 //!
18 //! ### Querying a `Char16Trie`
19 //!
20 //! ```rust
21 //! use icu::collections::char16trie::{Char16Trie, TrieResult};
22 //! use zerovec::ZeroVec;
23 //!
24 //! // A Char16Trie containing the ASCII characters mapping 'a' to 1 and 'ab'
25 //! // to 100.
26 //! let trie_data = [48, 97, 176, 98, 32868];
27 //! let trie = Char16Trie::new(ZeroVec::from_slice_or_alloc(&trie_data));
28 //!
29 //! let mut iter = trie.iter();
30 //! let res = iter.next('a');
31 //! assert_eq!(res, TrieResult::Intermediate(1));
32 //! let res = iter.next('b');
33 //! assert_eq!(res, TrieResult::FinalValue(100));
34 //! let res = iter.next('c');
35 //! assert_eq!(res, TrieResult::NoMatch);
36 //! ```
37 //!
38 //! [`ICU4X`]: ../icu/index.html
39 
40 mod trie;
41 
42 pub use trie::Char16Trie;
43 pub use trie::Char16TrieIterator;
44 pub use trie::TrieResult;
45