https://github.com/whiredplanck/darts-clone-rs
A Rust binding of s-yata/darts-clone
https://github.com/whiredplanck/darts-clone-rs
binding bindings double-array-trie rust trie
Last synced: 5 months ago
JSON representation
A Rust binding of s-yata/darts-clone
- Host: GitHub
- URL: https://github.com/whiredplanck/darts-clone-rs
- Owner: WhiredPlanck
- License: bsd-3-clause
- Created: 2024-03-16T05:24:38.000Z (over 2 years ago)
- Default Branch: master
- Last Pushed: 2025-12-12T02:52:12.000Z (7 months ago)
- Last Synced: 2025-12-13T09:50:18.568Z (7 months ago)
- Topics: binding, bindings, double-array-trie, rust, trie
- Language: Rust
- Homepage: https://docs.rs/darts-clone-rs
- Size: 48.8 KB
- Stars: 1
- Watchers: 1
- Forks: 0
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
- License: LICENSE
Awesome Lists containing this project
README
# darts-clone-rs
Rust binding of [Darts-clone](https://github.com/s-yata/darts-clone) - a clone of Darts (Double-ARray Trie System)
## Installation
```toml
[dependencies]
darts-clone-rs = "0.2"
```
## Example
### Build trie
```rust
use darts::DartsArrayTrie;
let dic = DartsArrayTrie::new();
let keys: Vec = todo!() // get keys somehow
let values: Vec = todo!() // get values somehow
let lengths: Vec = todo!() // get lengths somehow
let result = dic.build(keys.len, &keys, None /* Some(&values) */, None /* Some(&lengths) */, None);
assert_eq!(Ok(()), result);
```
### Save and open
```rust
use darts::DartsArrayTrie;
let dic = DartsArrayTrie::new();
// build ...
let dic_copy = DartsArrayTrie::new();
assert_eq!(Ok(), dic.save("path/to/dict", "wb", 0));
assert_eq!(Ok(), dic_copy.open("path/to/dict", "rb", 0, 0));
```
### Search
#### Exact match search
```rust
use darts::DartsArrayTrie;
let dic = DartArrayTrie::new();
// build ...
let value = dic.extra_match_search(key, 0, 0);
assert_eq!(value, /* expected value */);
let result = dic.extra_match_search_pair(key, 0, 0);
assert_eq!(result.value, /* expected value */);
assert_eq!(result.length, /* expected length */);
```
#### Common prefix search
```rust
use darts::DartsArrayTrie;
const MAX_RESULT_NUM: usize = 16;
let dic = DartsArrayTrie::new();
// build ...
let results = dic.common_prefix_search(key, MAX_RESULT_NUM, 0, 0);
assert_eq!(results, /* expected results */);
```
#### Common longest prefix search
```rust
use darts::DartsArrayTrie;
let dic = DartArrayTrie::new();
// build ...
let value = dic.common_longest_prefix_search(key, 0, 0);
assert_eq!(value, /* expected value */);
let result = dic.common_longest_prefix_search_pair(key, 0, 0);
assert_eq!(result.value, /* expected value */);
assert_eq!(result.length, /* expected length */);
```
### Traverse
```rust
use darts::DartsArrayTrie;
let dic = DartsArrayTrie::new();
// build ...
let mut id = 0usize;
let mut key_pos = 0usize;
for i in 0..key.len() {
let result = dic.traverse(key, &mut id, &mut key_pos, i + 1);
assert_ne!(result, -2);
}
```