1 extern crate yada;
2
3 use std::fs::File;
4 use std::io::{Read, Write};
5 use yada::builder::DoubleArrayBuilder;
6 use yada::DoubleArray;
7
main() -> Result<(), Box<dyn std::error::Error>>8 fn main() -> Result<(), Box<dyn std::error::Error>> {
9 // filename to save and load
10 let filename = "load_from_file_example.da";
11
12 // make a keyset which have key-value pairs
13 let keyset = &[
14 ("a".as_bytes(), 0),
15 ("aa".as_bytes(), 1),
16 ("aaa".as_bytes(), 2),
17 ("b".as_bytes(), 3),
18 ("bcd".as_bytes(), 4),
19 ];
20
21 // build a double-array trie binary
22 let da_bytes = DoubleArrayBuilder::build(keyset);
23 assert!(da_bytes.is_some());
24
25 // create a double-array trie instance
26 let da = DoubleArray::new(da_bytes.unwrap());
27
28 // save to file
29 let mut file = File::create(filename)?;
30 file.write_all(da.0.as_slice())?;
31 file.flush()?;
32
33 // load from file
34 let mut file = File::open(filename)?;
35 let mut buf = Vec::new();
36 let _ = file.read_to_end(&mut buf)?;
37 let da = DoubleArray::new(buf);
38
39 // test search
40 for (key, value) in keyset.iter() {
41 let v = da.exact_match_search(key).unwrap();
42 assert_eq!(v, *value);
43 }
44 assert_eq!(
45 da.common_prefix_search(&"aaaa").collect::<Vec<_>>(),
46 vec![(0, 1), (1, 2), (2, 3)]
47 );
48 assert_eq!(
49 da.common_prefix_search(&"bcde").collect::<Vec<_>>(),
50 vec![(3, 1), (4, 3)]
51 );
52
53 Ok(())
54 }
55