AvariceLHubris vor 1 Jahr
Ursprung
Commit
746f62f781
2 geänderte Dateien mit 11 neuen und 3 gelöschten Zeilen
  1. 2 2
      src/hufftree/base.rs
  2. 9 1
      src/main.rs

+ 2 - 2
src/hufftree/base.rs

@@ -69,7 +69,7 @@ impl Hufftree {
     }
 }
 
-pub fn get_char_frequencies(text: String) -> HashMap<char, i32> {
+pub fn get_char_frequencies(text: &String) -> HashMap<char, i32> {
     let mut map = HashMap::new();
 
     for character in text.chars() {
@@ -122,7 +122,7 @@ mod test {
     #[test]
     fn get_charcter_freq() {
         let text = String::from("aaaaaabb cc");
-        let freq = get_char_frequencies(text);
+        let freq = get_char_frequencies(&text);
 
         assert_eq!(freq.get(&'a').unwrap(), &6);
         assert_eq!(freq.get(&'b').unwrap(), &2);

+ 9 - 1
src/main.rs

@@ -1,5 +1,5 @@
 use clap::Parser;
-use huffman::cli;
+use huffman::{cli, hufftree, storage};
 
 fn main() -> Result<(), std::io::Error> {
     let args = cli::Args::parse();
@@ -11,8 +11,16 @@ fn main() -> Result<(), std::io::Error> {
     let inputf = working_directory.join(inputf);
 
     let inputf = std::fs::read_to_string(inputf)?;
+    let char_f = huffman::hufftree::base::get_char_frequencies(&inputf);
 
     println!("Creating Huffman Tree...");
+    let base_tree = huffman::hufftree::base::Hufftree::new(char_f);
+    let canonical_tree = hufftree::canonical::CanonicalHufftree::from_tree(base_tree);
+
+    let outputf = working_directory.join(outputf);
+    let mut outputf = std::fs::File::create(outputf)?;
+
+    storage::store_tree_and_text(canonical_tree, &mut outputf, &inputf).expect("Could not store the tree and text.");
 
     Ok(())
 }