From 523d134d785e8ee242fab8e3152b533fceed7636 Mon Sep 17 00:00:00 2001 From: angie Date: Fri, 29 Sep 2023 19:34:34 -0300 Subject: [PATCH] ProgressStats --- src/mapfile_parser/mapfile_parser.pyi | 17 +++++++++ src/rs/lib.rs | 2 ++ src/rs/mapfile.rs | 16 +++++---- src/rs/progress_stats.rs | 52 +++++++++++++++++++++++++++ 4 files changed, 81 insertions(+), 6 deletions(-) create mode 100644 src/rs/progress_stats.rs diff --git a/src/mapfile_parser/mapfile_parser.pyi b/src/mapfile_parser/mapfile_parser.pyi index ed23abb..e1cf8e1 100644 --- a/src/mapfile_parser/mapfile_parser.pyi +++ b/src/mapfile_parser/mapfile_parser.pyi @@ -38,6 +38,23 @@ class MapsComparisonInfo: def __init__(self): ... +class ProgressStats: + undecompedSize: int + decompedSize: int + + def __init__(self): ... + + @property + def total(self) -> int: ... + + def getAsFrogressEntry(self, name: str) -> dict[str, int]: ... + + @staticmethod + def printHeader() -> None: ... + + def print(self, category: str, totalStats: ProgressStats) -> None: ... + + class Symbol: name: str vram: int diff --git a/src/rs/lib.rs b/src/rs/lib.rs index 63ff579..5d9e2c7 100644 --- a/src/rs/lib.rs +++ b/src/rs/lib.rs @@ -8,6 +8,7 @@ mod symbol; mod found_symbol_info; mod symbol_comparison_info; mod maps_comparison_info; +mod progress_stats; pub mod utils; pub use mapfile::MapFile; @@ -17,6 +18,7 @@ pub use symbol::Symbol; pub use found_symbol_info::FoundSymbolInfo; pub use symbol_comparison_info::SymbolComparisonInfo; pub use maps_comparison_info::MapsComparisonInfo; +pub use progress_stats::ProgressStats; #[pyo3::prelude::pymodule] fn mapfile_parser(_py: pyo3::prelude::Python<'_>, m: &pyo3::prelude::PyModule) -> pyo3::prelude::PyResult<()> { diff --git a/src/rs/mapfile.rs b/src/rs/mapfile.rs index a91102b..28801c1 100644 --- a/src/rs/mapfile.rs +++ b/src/rs/mapfile.rs @@ -455,7 +455,7 @@ impl MapFile { } #[pyo3(name = "toCsvSymbols")] - pub fn to_ssv_symbols(&self) -> String { + pub fn to_csv_symbols(&self) -> String { let mut ret = String::new(); write!(ret, "File,{}\n", symbol::Symbol::to_csv_header()).unwrap(); @@ -468,13 +468,17 @@ impl MapFile { } - /* - def printAsCsv(self, printVram: bool=True, skipWithoutSymbols: bool=True): - print(self.toCsv(printVram=printVram, skipWithoutSymbols=skipWithoutSymbols), end="") + #[pyo3(name = "printAsCsv", signature=(print_vram=true, skip_without_symbols=true))] + pub fn print_as_csv(&self, print_vram: bool, skip_without_symbols: bool) { + print!("{}", self.to_csv(print_vram, skip_without_symbols)); + } - def printSymbolsCsv(self): - print(self.toCsvSymbols(), end="") + #[pyo3(name = "printSymbolsCsv")] + pub fn print_symbols_csv(&self) { + print!("{}", self.to_csv_symbols()); + } + /* def toJson(self, humanReadable: bool=True) -> dict[str, Any]: segmentsList = [] for segment in self._segmentsList: diff --git a/src/rs/progress_stats.rs b/src/rs/progress_stats.rs new file mode 100644 index 0000000..adbe2cb --- /dev/null +++ b/src/rs/progress_stats.rs @@ -0,0 +1,52 @@ +/* SPDX-FileCopyrightText: © 2023 Decompollaborate */ +/* SPDX-License-Identifier: MIT */ + +use std::collections::HashMap; + +use pyo3::prelude::*; + +#[derive(Debug, Clone)] +#[pyclass(module = "mapfile_parser", unsendable, sequence)] +pub struct ProgressStats { + #[pyo3(get, set, name = "undecompedSize")] + pub undecomped_size: u32, + + #[pyo3(get, set, name = "decompedSize")] + pub decomped_size: u32, +} + +#[pymethods] +impl ProgressStats { + #[new] + pub fn new() -> Self { + Self { + undecomped_size: 0, + decomped_size: 0, + } + } + + #[getter] + pub fn total(&self) -> u32 { + self.undecomped_size + self.decomped_size + } + + #[pyo3(name = "getAsFrogressEntry")] + pub fn get_as_frogress_entry(&self, name: &str) -> HashMap { + let mut categories: HashMap = HashMap::new(); + + categories.insert(name.to_string(), self.decomped_size); + categories.insert(format!("{}/total", name), self.total()); + + categories + } + + #[staticmethod] + #[pyo3(name = "printHeader")] + pub fn print_header() { + println!("{:<28}: {:>12} / {:>8} {:>10}% ({:>20}%)", "Category", "DecompedSize", "Total", "OfFolder", "OfTotal"); + } + + pub fn print(&self, category: &str, totalStats: &ProgressStats) { + println!("{:<28}: {:>12} / {:>8} {:>10.4}% ({:>8.4}% / {:>8.4}%)", category, self.decomped_size, self.total(), self.decomped_size / self.total() * 100, self.decomped_size / totalStats.total() * 100, self.total() / totalStats.total() * 100); + } +}