The trie (i.e., from "retrieval") data structure was invented by Edward Fredkin (it is a form of radix sort). The implementation stores string suffixes as a list because it is a PATRICIA trie (PATRICIA - Practical Algorithm to Retrieve Information Coded in Alphanumeric, D.R.Morrison (1968)).
This Erlang trie implementation uses string (list of integers) keys and is able to get performance close to the process dictionary when doing key lookups (find or fetch, see http://okeuday.livejournal.com/16941.html).Copyright © 2010-2022 Michael Truog
Version: 2.0.5 Jun 20 2023 17:49:46 ------------------------------------------------------------------------
Authors: Michael Truog (mjtruog at protonmail dot com).
The trie (i.e., from "retrieval") data structure was invented by Edward Fredkin (it is a form of radix sort). The implementation stores string suffixes as a list because it is a PATRICIA trie (PATRICIA - Practical Algorithm to Retrieve Information Coded in Alphanumeric, D.R.Morrison (1968)).
This Erlang trie implementation uses string (list of integers) keys and is able to get performance close to the process dictionary when doing key lookups (find or fetch, see http://okeuday.livejournal.com/16941.html). Utilizing this trie, it is possible to avoid generating dynamic atoms in various contexts. Also, an added benefit to using this trie is that the traversals preserve alphabetical ordering.empty_trie() = []
nonempty_trie() = {integer(), integer(), tuple()}
trie() = nonempty_trie() | empty_trie()
append(Key::nonempty_string(), Value::any(), Node::trie()) -> nonempty_trie()
append_list(Key::nonempty_string(), ValueList::list(), Node::trie()) -> nonempty_trie()
erase_similar(Similar::nonempty_string(), Node::trie()) -> [nonempty_string()]
fetch(T::nonempty_string(), Node::nonempty_trie()) -> any()
fetch_keys(Node::trie()) -> [nonempty_string()]
fetch_keys_similar(Similar::nonempty_string(), Node::trie()) -> [nonempty_string()]
find(T::nonempty_string(), Node::trie()) -> {ok, any()} | error
find_match(Match::string(), Node::trie()) -> {ok, any(), any()} | error
find_match2(Match::string(), Node::trie()) -> {ok, any(), any()} | error
find_prefix(T::nonempty_string(), X2::trie()) -> {ok, any()} | prefix | error
find_prefix_longest(Match::nonempty_string(), Node::trie()) -> {ok, nonempty_string(), any()} | error
find_prefixes(Match::nonempty_string(), Node::trie()) -> [{nonempty_string(), any()}]
find_similar(Similar::string(), Node::trie()) -> {ok, string(), any()} | error
fold(F::fun((nonempty_string(), any(), any()) -> any()), A::any(), Node::trie()) -> any()
fold_match(Match::string(), F::fun((string(), any(), any()) -> any()), A::any(), Node::trie()) -> any()
fold_similar(Similar::nonempty_string(), F::fun((nonempty_string(), any(), any()) -> any()), A::any(), Node::trie()) -> any()
foldl(F::fun((nonempty_string(), any(), any()) -> any()), A::any(), Node::trie()) -> any()
foldl_similar(Similar::nonempty_string(), F::fun((nonempty_string(), any(), any()) -> any()), A::any(), Node::trie()) -> any()
foldr(F::fun((nonempty_string(), any(), any()) -> any()), A::any(), Node::trie()) -> any()
foldr_similar(Similar::nonempty_string(), F::fun((nonempty_string(), any(), any()) -> any()), A::any(), Node::trie()) -> any()
foreach(F::fun((nonempty_string(), any()) -> any()), Node::trie()) -> any()
from_list(L::[nonempty_string() | tuple()]) -> trie()
is_bytestring(L::[byte()]) -> true | false
is_bytestring_nonempty(L::[byte(), ...]) -> true | false
is_key(T::nonempty_string(), Node::trie()) -> boolean()
is_pattern(Pattern::string()) -> true | false
is_pattern2(Pattern::string()) -> true | false
is_pattern2_bytes(Pattern::[byte()]) -> true | false
is_pattern_bytes(Pattern::[byte()]) -> true | false
is_prefix(T::string(), X2::trie()) -> true | false
is_prefixed(T::string(), X2::trie()) -> true | false
is_prefixed(Key::string(), Exclude::string(), Node::trie()) -> true | false
iter(F::fun((string(), any(), fun(() -> any())) -> any()), Node::trie()) -> ok
itera(F::fun((string(), any(), any(), fun((any()) -> any())) -> any()), A::any(), Node::trie()) -> any()
new() -> empty_trie()
new(L::[nonempty_string() | tuple()]) -> trie()
pattern2_fill(FillPattern::string(), Parameters::[string()]) -> {ok, string()} | {error, parameters_ignored | parameter_missing}
pattern2_fill(FillPattern::string(), Parameters::[string()], ParametersSelected::[pos_integer()], ParametersStrictMatching::boolean()) -> {ok, string()} | {error, parameters_ignored | parameter_missing | parameters_selected_empty | {parameters_selected_ignored, [pos_integer()]} | {parameters_selected_missing, pos_integer()}}
pattern2_parse(Pattern::string(), L::string()) -> [string()] | error
pattern2_parse(Pattern::string(), L::string(), Option::default | with_suffix | expanded) -> [string()] | {[string()], string()} | [string() | {exact, string()}] | error
pattern2_suffix(Pattern::string(), L::string()) -> string() | error
pattern_fill(FillPattern::string(), Parameters::[string()]) -> {ok, string()} | {error, parameters_ignored | parameter_missing}
pattern_fill(FillPattern::string(), Parameters::[string()], ParametersSelected::[pos_integer()], ParametersStrictMatching::boolean()) -> {ok, string()} | {error, parameters_ignored | parameter_missing | parameters_selected_empty | {parameters_selected_ignored, [pos_integer()]} | {parameters_selected_missing, pos_integer()}}
pattern_parse(Pattern::string(), L::string()) -> [string()] | error
pattern_parse(Pattern::string(), L::string(), Option::default | with_suffix | expanded) -> [string()] | {[string()], string()} | [string() | {exact, string()}] | error
pattern_suffix(Pattern::string(), L::string()) -> string() | error
prefix(Key::nonempty_string(), Value::any(), Node::trie()) -> nonempty_trie()
size(Node::trie()) -> non_neg_integer()
store(Key::nonempty_string(), Node::trie()) -> nonempty_trie()
store(Key::nonempty_string(), NewValue::any(), Node::trie()) -> nonempty_trie()
to_list(Node::trie()) -> [{nonempty_string(), any()}]
to_list_similar(Similar::nonempty_string(), Node::trie()) -> [{nonempty_string(), any()}]
update(T::nonempty_string(), F::fun((any()) -> any()), Node::nonempty_trie()) -> nonempty_trie()
update(Key::nonempty_string(), F::fun((any()) -> any()), Initial::any(), Node::trie()) -> nonempty_trie()
update_counter(Key::nonempty_string(), Increment::number(), Node::trie()) -> nonempty_trie()
Generated by EDoc