From 7ab1f763f9b30d079dec74c210039924842b7419 Mon Sep 17 00:00:00 2001 From: dece Date: Mon, 18 May 2020 23:35:18 +0200 Subject: [PATCH] paramdef: move row size calc to Paramdef struct --- src/parsers/paramdef.rs | 17 ++++++++++++ src/unpackers/paramdef.rs | 54 +++++++++++++++++++-------------------- src/utils/str.rs | 10 +++++--- 3 files changed, 51 insertions(+), 30 deletions(-) diff --git a/src/parsers/paramdef.rs b/src/parsers/paramdef.rs index a0c9b2a..e91db7d 100644 --- a/src/parsers/paramdef.rs +++ b/src/parsers/paramdef.rs @@ -158,6 +158,23 @@ pub struct Paramdef { pub fields: Vec, } +impl Paramdef { + pub fn row_size(&self) -> usize { + let mut num_bits: usize = 0; + self.fields.iter().map(|field| { + match field.bit_size() { + 0 => field.byte_count as usize, + n => { + num_bits += n; + let num_bytes = num_bits / 8; + num_bits %= 8; + num_bytes + } + } + }).sum() + } +} + pub fn parse(i: &[u8]) -> IResult<&[u8], Paramdef> { let full_file = i; let (i, header) = parse_header(i)?; diff --git a/src/unpackers/paramdef.rs b/src/unpackers/paramdef.rs index 1c99035..7810a83 100644 --- a/src/unpackers/paramdef.rs +++ b/src/unpackers/paramdef.rs @@ -20,41 +20,41 @@ pub fn load_paramdef(paramdef_data: &[u8]) -> Result utils_str::n_plural(field.byte_count as i32, "byte", "bytes"), - x => utils_str::n_plural(x as i32, "bit", "bits") + let size_str = match field.bit_size() { + 0 => utils_str::n_bytes_pluralise(field.byte_count as i32), + x => utils_str::n_pluralise(x as i32, "bit", "bits") }; - - println!(" - [{}] {} ({}) {} ({}, {})", - field.sort_id, field.display_name, + println!( + " - [{}] {} ({}) {} ({}, {})", + field.sort_id, + field.display_name, field.internal_name.as_ref().unwrap_or(&String::from("")), - field.display_type, field.internal_type, size_str); - println!(" Values: default {}, range [{}, {}], inc {}", - field.default_value, field.min_value, field.max_value, field.increment); + field.display_type, + field.internal_type, + size_str + ); + println!( + " Values: default {}, range [{}, {}], inc {}", + field.default_value, + field.min_value, + field.max_value, + field.increment + ); if let Some(desc) = &field.description { println!(" Description: {}", desc); } - - if bit_size != 0 { - bit_count += bit_size; - while bit_count >= 8 { - bit_count -= 8; - row_size += 1; - } - } else { - row_size += field.byte_count; - } } - - println!("Size per row: {}", utils_str::n_plural(row_size as i32, "byte", "bytes")); } diff --git a/src/utils/str.rs b/src/utils/str.rs index 6c41d70..d76a67a 100644 --- a/src/utils/str.rs +++ b/src/utils/str.rs @@ -1,10 +1,14 @@ -pub fn plural<'a>(num: i32, singular_name: &'a str, plural_name: &'a str) -> &'a str { +pub fn pluralise<'a>(num: i32, singular_name: &'a str, plural_name: &'a str) -> &'a str { match num { 1 => singular_name, _ => plural_name, } } -pub fn n_plural<'a>(num: i32, singular_name: &'a str, plural_name: &'a str) -> String { - format!("{} {}", num, plural(num, singular_name, plural_name)) +pub fn n_pluralise<'a>(num: i32, singular_name: &'a str, plural_name: &'a str) -> String { + format!("{} {}", num, pluralise(num, singular_name, plural_name)) +} + +pub fn n_bytes_pluralise(num: i32) -> String { + n_pluralise(num, "byte", "bytes") }