From aa3f585408af0ee6235305a156303a6df5b4463a Mon Sep 17 00:00:00 2001 From: Charles Date: Fri, 26 Jun 2020 15:35:43 +0200 Subject: WIP: Added deserialize, Testing BitSet --- src/main.rs | 53 +++++++++++++++++++++++++++++++++++++++++++++++++++-- 1 file changed, 51 insertions(+), 2 deletions(-) (limited to 'src/main.rs') diff --git a/src/main.rs b/src/main.rs index a54a3bd..b5062f6 100644 --- a/src/main.rs +++ b/src/main.rs @@ -9,14 +9,63 @@ pub mod bits; pub mod conversion; use tree::Tree; +use bits::BitSet; fn main() { if let Some(s) = env::args().nth(1) { if s != "d" { return } - // let data: Vec = io::stdin().bytes().map(|x| x.unwrap()).collect(); - // deserialize + let data: Vec = io::stdin().bytes().map(|x| x.unwrap()).collect(); + + let mut iter = data.iter(); + + let mut size: u32 = 0; + for i in 0..4 { + size |= (*iter.next().unwrap() as u32) << ((3 - i) * 8); + } + // println!("{}", size); + + let mut header_iter = iter.clone().take(size as usize).cloned(); + let mut table = conversion::Table::new(); + loop { + let test = header_iter.next(); + if test == None { + break; + } + // FIXME not working with lorem + let key = test.unwrap(); + let bits_len: usize = header_iter.next().unwrap().into(); + let value: Vec = header_iter.clone().take(bits_len / 8 + + if bits_len % 8 != 0 {1} else {0}).collect(); + for _ in 0..(bits_len / 8 + 1) { + header_iter.next(); + } + + table.0.insert(key, BitSet { data: value, len: bits_len }); + } + // println!("{:?}", table); + + let data: Vec = iter.skip(size as usize).cloned().collect(); + let mut bitset = BitSet { len: data.len() * 8, data: data }; + + // TODO: store bit size in serialized, cause wrong matches due to padding + let mut found = true; + let mut content = Vec::new(); + while found { + println!("{:?}", bitset); + found = false; + for (k, v) in &table.0 { + if bitset.start_with(&v) { + content.push(k); + bitset <<= v.len; + found = true; + } + } + } + for x in content { + print!("{}", *x as char); + } } else { // let f = fs::File::open(file_path).unwrap(); -- cgit