Expand description
icu_codepointtrie_builder is a utility crate of the ICU4X project.
This crate exposes functionality to build a CodePointTrie from values provided at runtime.
Because it is normally expected for CodePointTrie data to be pre-compiled, this crate is not
optimized for speed; it should be used during a build phase.
Under the hood, this crate uses the CodePointTrie builder code from ICU4C, UMutableCPTrie.
For more context, see https://github.com/unicode-org/icu4x/issues/1837.
Unlike most of ICU4X, due in large part to the native dependency, this crate is not guaranteed to be panic-free.
§Build configuration
This crate has two primary modes it can be used in: "wasm" and "icu4c", exposed as
Cargo features. If both are enabled, the code will internally use the wasm codepath.
The "wasm" mode uses a Wasm module packaged into this Rust crate that contains
pre-compiled ICU4C CodePointTrie builder code. It evaluates the Wasm module using
the Wasmer runtime, which “just works”, but it requires a large number of
Rust/Cargo dependencies.
The "icu4c" mode reduces the number of Rust dependencies, but it requires having a local copy
of ICU4C available. To configure "icu4c" mode in Cargo, set the following environment variables:
- Set
ICU4C_LIB_PATHto a directory full of ICU4C static or shared libraries. - Set
ICU4C_LINK_STATICALLYto any value to use the static libraries. - Set
ICU4C_RENAME_VERSIONto the integer ICU4C version if ICU4C has renaming enabled. By default, we attempt to link non-renamed symbols.
If using dynamic linking, at runtime, you may need to set [DY]LD_LIBRARY_PATH
to the ICU4C_LIB_PATH.
If not using Cargo, make sure to pass ICU4C_LIB_PATH to the linker via -L, link against
icuuc, icui18n and icudata via -l flags, and set --cfg icu4c_enable_renaming if you need
renamed ICU4C symbols.
§Examples
use icu::collections::codepointtrie::TrieType;
use icu_codepointtrie_builder::CodePointTrieBuilder;
let default_value = 1u8;
let error_value = 2;
let mut builder =
CodePointTrieBuilder::new(default_value, error_value, TrieType::Small);
builder.set_value(0, 3);
builder.set_value(1, 4);
builder.set_value(2, 5);
builder.set_value(3, 6);
let cpt = builder.build();
assert_eq!(cpt.get32(0), 3);
assert_eq!(cpt.get32(1), 4);
assert_eq!(cpt.get32(2), 5);
assert_eq!(cpt.get32(3), 6);
assert_eq!(cpt.get32(4), 1); // default value
assert_eq!(cpt.get32(u32::MAX), 2); // error valueStructs§
- Code
Point Trie Builder - Builder for a
CodePointTrie.