|
|
@@ -31,7 +31,7 @@ impl PartialOrd for CharTempCode {
|
|
|
|
|
|
impl PartialEq for CharTempCode {
|
|
|
fn eq(&self, other: &Self) -> bool {
|
|
|
- return self.code_length == other.code_length;
|
|
|
+ self.code_length == other.code_length
|
|
|
}
|
|
|
}
|
|
|
|
|
|
@@ -62,12 +62,10 @@ impl CanonicalHufftree {
|
|
|
let mut first = true;
|
|
|
let mut prev_length = 0;
|
|
|
let mut working_code: u32 = 0b0;
|
|
|
- while character_and_codes.len() > 0 {
|
|
|
- let temp_char = character_and_codes.pop().unwrap();
|
|
|
-
|
|
|
+ while let Some(temp_char) = character_and_codes.pop() {
|
|
|
// This will results in the vector being ordered with the most frequent
|
|
|
// character first, ordered by code length.
|
|
|
- storage_char_codes.push((temp_char.character.clone(), temp_char.code_length as u32));
|
|
|
+ storage_char_codes.push((temp_char.character, temp_char.code_length as u32));
|
|
|
|
|
|
let mut code = BitVec::new();
|
|
|
code.grow(temp_char.code_length, false);
|
|
|
@@ -82,15 +80,11 @@ impl CanonicalHufftree {
|
|
|
|
|
|
if temp_char.code_length > prev_length {
|
|
|
working_code += 1;
|
|
|
- working_code = working_code << (temp_char.code_length - prev_length);
|
|
|
-
|
|
|
+ working_code <<= temp_char.code_length - prev_length;
|
|
|
|
|
|
let code = convert_no_to_bit_vec_known_length(working_code, &mut code);
|
|
|
output_characters_and_codes
|
|
|
- .insert_no_overwrite(
|
|
|
- temp_char.character,
|
|
|
- code
|
|
|
- )
|
|
|
+ .insert_no_overwrite(temp_char.character, code)
|
|
|
.expect("There was already a character with that code.");
|
|
|
|
|
|
assert!(output_characters_and_codes.contains_left(&temp_char.character));
|
|
|
@@ -104,10 +98,7 @@ impl CanonicalHufftree {
|
|
|
let code = convert_no_to_bit_vec_known_length(working_code, &mut code);
|
|
|
|
|
|
output_characters_and_codes
|
|
|
- .insert_no_overwrite(
|
|
|
- temp_char.character,
|
|
|
- code
|
|
|
- )
|
|
|
+ .insert_no_overwrite(temp_char.character, code)
|
|
|
.expect("There was already a character with that code.");
|
|
|
}
|
|
|
|
|
|
@@ -131,8 +122,7 @@ impl CanonicalHufftree {
|
|
|
let mut first = true;
|
|
|
let mut prev_length = 0;
|
|
|
let mut working_code: u32 = 0b0;
|
|
|
- while temp_storage.len() > 0 {
|
|
|
- let (temp_char, code_length) = temp_storage.pop().unwrap();
|
|
|
+ while let Some((temp_char, code_length)) = temp_storage.pop() {
|
|
|
// This will result in the vector being ordered with the most frequent
|
|
|
// character first, ordered by code length.
|
|
|
//
|
|
|
@@ -149,13 +139,11 @@ impl CanonicalHufftree {
|
|
|
|
|
|
if code_length > prev_length {
|
|
|
working_code += 1;
|
|
|
- working_code = working_code << (code_length - prev_length);
|
|
|
+ working_code <<= code_length - prev_length;
|
|
|
|
|
|
let code = convert_no_to_bit_vec_known_length(working_code, &mut code);
|
|
|
- bi.insert_no_overwrite(
|
|
|
- temp_char,
|
|
|
- code,
|
|
|
- ).expect("There was already a character with that code.");
|
|
|
+ bi.insert_no_overwrite(temp_char, code)
|
|
|
+ .expect("There was already a character with that code.");
|
|
|
} else {
|
|
|
assert_eq!(
|
|
|
code_length, prev_length,
|
|
|
@@ -163,10 +151,8 @@ impl CanonicalHufftree {
|
|
|
);
|
|
|
working_code += 1;
|
|
|
let code = convert_no_to_bit_vec_known_length(working_code, &mut code);
|
|
|
- bi.insert_no_overwrite(
|
|
|
- temp_char,
|
|
|
- code,
|
|
|
- ).expect("There was already a character with that code.");
|
|
|
+ bi.insert_no_overwrite(temp_char, code)
|
|
|
+ .expect("There was already a character with that code.");
|
|
|
}
|
|
|
|
|
|
prev_length = code_length;
|
|
|
@@ -180,7 +166,7 @@ impl CanonicalHufftree {
|
|
|
}
|
|
|
|
|
|
// TODO: Optimise this (the vector copying is probably extremely inefficient)
|
|
|
- pub fn encode_text(&self, text: &String) -> BitVec {
|
|
|
+ pub fn encode_text(&self, text: &str) -> BitVec {
|
|
|
let mut converted_text = BitVec::new();
|
|
|
|
|
|
for character in text.chars() {
|
|
|
@@ -199,7 +185,7 @@ impl CanonicalHufftree {
|
|
|
let mut text: BitVec = text.iter().rev().collect();
|
|
|
let mut buffer = BitVec::new();
|
|
|
|
|
|
- while text.len() > 0 {
|
|
|
+ while !text.is_empty() {
|
|
|
buffer.push(text.pop().unwrap());
|
|
|
match self.characters_and_codes.get_by_right(&buffer) {
|
|
|
Some(character) => {
|
|
|
@@ -234,22 +220,22 @@ pub fn convert_no_to_bit_vec(mut numb: u32) -> BitVec {
|
|
|
} else {
|
|
|
output_vec.push(true);
|
|
|
}
|
|
|
- numb = numb / 2;
|
|
|
+ numb /= 2;
|
|
|
}
|
|
|
let output_vec = output_vec.iter().rev().collect();
|
|
|
output_vec
|
|
|
}
|
|
|
|
|
|
-pub fn convert_no_to_bit_vec_known_length(mut numb: u32, bits: &mut BitVec) -> BitVec {
|
|
|
+pub fn convert_no_to_bit_vec_known_length(mut numb: u32, bits: &mut BitVec) -> BitVec {
|
|
|
let mut counter = 0;
|
|
|
while numb > 0 {
|
|
|
if numb % 2 == 0 {
|
|
|
- bits.set(counter ,false);
|
|
|
+ bits.set(counter, false);
|
|
|
} else {
|
|
|
bits.set(counter, true);
|
|
|
}
|
|
|
|
|
|
- numb = numb / 2;
|
|
|
+ numb /= 2;
|
|
|
counter += 1;
|
|
|
}
|
|
|
|