radix-tree

A [radix tree] implementation for router, path search.

Build Status Latest version Documentation License

Features

Usage

```rust use radix_tree::{Node, Vectorable};

let mut tree = Node::::new("", false);

tree.insert("alligator", true); tree.insert("alien", true); tree.insert("baloon", true); tree.insert("chromodynamic", true); tree.insert("romane", true); tree.insert("romanus", true); tree.insert("romulus", true); tree.insert("rubens", true); tree.insert("ruber", true); tree.insert("rubicon", true); tree.insert("rubicundus", true); tree.insert("all", true); tree.insert("rub", true); tree.insert("ba", true); tree.insert("你好,世界", true); tree.insert("你好", true); tree.insert("你", true);

let node = tree.find("all"); asserteq!(node.issome(), true); assert_eq!(node.unwrap().data.unwrap(), true);

let node = tree.find("dota2"); asserteq!(node.isnone(), true); ```

Tree:

`-(a) [l] --> [li] []=false `l-(i) [gator] --> [] []=true `ien-() [] --> [] []=true `-(b) [a] --> [l] []=true `loon-() [] --> [] []=true `-(c) [hromodynamic] --> [] []=true `-(r) [] --> [ou] []=false `om-(a) [n] --> [eu] []=false `e-() [] --> [] []=true `us-() [] --> [] []=true `om-(u) [lus] --> [] []=true `ub-(e) [] --> [nr] []=false `ns-() [] --> [] []=true `r-() [] --> [] []=true `ub-(i) [c] --> [ou] []=false `on-() [] --> [] []=true `undus-() [] --> [] []=true

Examples

```rust let node = Node::::new("Hello world!", "a"); asserteq!( node.path, vec![72, 101, 108, 108, 111, 32, 119, 111, 114, 108, 100, 33] ); asserteq!(node.data.unwrap(), "a");

let node = Node::::new("Hello 世界!", "a"); asserteq!( node.path, vec![72, 101, 108, 108, 111, 32, 228, 184, 150, 231, 149, 140, 239, 188, 129] ); asserteq!(node.data.unwrap(), "a");

let node = Node::::new("Hello 世界!", "a"); asserteq!( node.path, vec!['H', 'e', 'l', 'l', 'o', ' ', '世', '界', '!'] ); asserteq!(node.data.unwrap(), "a");

let node = Node::::new("你好,世界!", 0); asserteq!(node.path, vec!['你', '好', ',', '世', '界', '!']); asserteq!(node.data.unwrap(), 0);

let node = Node::::new("abcde", 1); asserteq!(node.path, vec![97, 98, 99, 100, 101]); asserteq!(node.data.unwrap(), 1);

let node = Node::new("abcde".asbytes().tovec(), 97); asserteq!(node.path, vec![97, 98, 99, 100, 101]); asserteq!(node.data.unwrap(), 97);

let node = Node::new("abcde".asbytes(), 97); asserteq!(node.path, vec![97, 98, 99, 100, 101]); assert_eq!(node.data.unwrap(), 97); ```

Acknowledgements

It is inspired by the:

License

This project is licensed under either of

at your option.