Procházet zdrojové kódy

Okay enough for one day.

Ugh, I'm tired.
AvariceLHubris před 1 rokem
rodič
revize
7277cd0c82
1 změnil soubory, kde provedl 24 přidání a 7 odebrání
  1. 24 7
      src/storage.rs

+ 24 - 7
src/storage.rs

@@ -4,27 +4,42 @@ use bit_vec::BitVec;
 use std::io::Read;
 use std::io::Write;
 
-pub fn store_tree<F: Write>(tree: CanonicalHufftree, writer: &mut F) -> Result<(), String> {
+pub fn store_tree_and_text<F: Write>(tree: CanonicalHufftree, writer: &mut F, text: &String) -> Result<(), String> {
     let mut buff = BitVec::new();
     let mut character_buff: [u8; 4] = [0; 4];
+    let mut bit_length: u32 = 0;
 
     for (character, code) in tree.get_character_codes() {
         let code_length: u32 = code.len().try_into().unwrap();
-        let mut code_length_vec = convert_no_to_bit_vec(code_length);
-        buff.append(&mut code_length_vec);
+        let code_length = code_length.to_be_bytes();
+        buff.append(&mut BitVec::from_bytes(&code_length));
+        bit_length += 32;
+
         buff.append(&mut BitVec::from_elem(8, false));
+        bit_length += 8;
+
         character.encode_utf8(&mut character_buff);
         buff.append(&mut BitVec::from_bytes(&character_buff));
+        bit_length += 32;
 
         character_buff.fill(0);
     }
 
+    let encoded_text = tree.encode_text(&text);
+
+    let text_bits:u32 = encoded_text.len().try_into().unwrap();
+
+    println!("Bit length: {}, Text bits: {}.", bit_length, text_bits);
+    bit_length += text_bits;
+
     let buff = buff.to_bytes();
-    let buff_len: u32 = buff.len().try_into().unwrap();
+    println!("Buffer when in bytes:{:?}", buff);
+    // let buff_len: u32 = TryInto::<u32>::try_into(buff.len()).unwrap() * 8;
 
-    writer.write_all(&buff_len.to_be_bytes()).unwrap();
+    let encoded_text = encoded_text.to_bytes();
+    writer.write_all(&bit_length.to_be_bytes()).unwrap();
     writer.write_all(&buff).unwrap();
-
+    writer.write_all(&encoded_text).unwrap();
     Ok(())
 }
 
@@ -45,8 +60,10 @@ mod test {
         let huff = Hufftree::new(chars_and_freq);
         let canonical = CanonicalHufftree::from_tree(huff);
 
+        let input_text = String::from("aaabacacaaaabbbbbbbccccccccccccaacc");
+
         let mut virtual_buffer = Vec::new();
-        store_tree(canonical, &mut virtual_buffer).unwrap();
+        store_tree_and_text(canonical, &mut virtual_buffer, &input_text).unwrap();
 
         println!("Buffer:{:?}", virtual_buffer);