trie_rs/
map.rs

1//! A trie that maps sequence of `Label`s to a `Value`.
2use crate::internal_data_structure::naive_trie::NaiveTrie;
3use louds_rs::Louds;
4
5mod trie;
6mod trie_builder;
7
8#[cfg(feature = "mem_dbg")]
9use mem_dbg::MemDbg;
10
11#[derive(Debug, Clone)]
12#[cfg_attr(feature = "mem_dbg", derive(mem_dbg::MemDbg, mem_dbg::MemSize))]
13#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
14/// A trie for sequences of the type `Label`; each sequence has an associated `Value`.
15pub struct Trie<Label, Value> {
16    louds: Louds,
17
18    /// (LoudsNodeNum - 2) -> TrieLabel
19    trie_labels: Vec<TrieLabel<Label, Value>>,
20}
21
22#[derive(Debug, Clone)]
23#[cfg_attr(feature = "mem_dbg", derive(mem_dbg::MemDbg, mem_dbg::MemSize))]
24#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
25/// A trie builder for [Trie].
26pub struct TrieBuilder<Label, Value> {
27    naive_trie: NaiveTrie<Label, Value>,
28}
29
30#[derive(Debug, Clone)]
31#[cfg_attr(feature = "mem_dbg", derive(mem_dbg::MemDbg, mem_dbg::MemSize))]
32#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
33struct TrieLabel<Label, Value> {
34    label: Label,
35    value: Option<Value>,
36}