# rust-cedar
Efficiently-updatable double-array trie in Rust (ported from cedar). This library is still in alpha, feedbacks are welcomed.
[![Build Status](https://travis-ci.com/MnO2/rust-cedar.svg?branch=master)](https://travis-ci.org/MnO2/rust-cedar)
[![codecov](https://codecov.io/gh/MnO2/rust-cedar/branch/master/graph/badge.svg)](https://codecov.io/gh/MnO2/rust-cedar)
## Installation
Add it to your `Cargo.toml`:
```toml
[dependencies]
cedar = "0.1"
```
then you are good to go. If you are using Rust 2015 you have to `extern crate darts` to your crate root as well.
## Example
```rust
let dict = vec![
"a",
"ab",
"abc",
"アルゴリズム",
"データ",
"構造",
"网",
"网球",
"网球拍",
"中",
"中华",
"中华人民",
"中华人民共和国",
];
cedar.build(&key_values);
let result: Vec<i32> = cedar
.common_prefix_search("网球拍卖会")
.iter()
.map(|x| x.0)
.collect();
assert_eq!(vec![6, 7, 8], result);
let result: Vec<i32> = cedar
.common_prefix_search("中华人民共和国")
.iter()
.map(|x| x.0)
.collect();
assert_eq!(vec![9, 10, 11, 12], result);
let result: Vec<i32> = cedar
.common_prefix_search("データ構造とアルゴリズム")
.iter()
.map(|x| x.0)
.collect();
assert_eq!(vec![4], result);
```
## To run benchmark tests
```bash
cargo bench
```
## License
This work is released under the BSD-2 license, following the original license of C++ cedar. A copy of the license is provided in the LICENSE file.
## Reference
* [cedar - C++ implementation of efficiently-updatable double-array trie](http://www.tkl.iis.u-tokyo.ac.jp/~ynaga/cedar/)