Hashmap for file:signals pairs, signal_data file

This commit is contained in:
Misha Vicha
2025-10-13 08:20:42 +02:00
parent 81f768a12a
commit f9777b124b
3 changed files with 100 additions and 49 deletions

View File

@@ -1,9 +1,10 @@
use std::{env::{self}, io::Error, path::Path};
use std::{env::{self}, path::Path};
use std::fs;
use crate::headparse::Header;
pub mod headparse; // The HEAder parsing
pub mod signal_data;
pub mod headparse; // The HEAder parsing
use crate::{headparse::Header, signal_data::SignalData};
/// Use for handling possible formats of the WFDB data
#[derive(Debug, Clone, Copy)]
@@ -13,7 +14,7 @@ enum SignalFormat {
Unimpl = 0
}
fn main() -> Result<(), Error>{
fn main() -> Result<(), String>{
let args: Vec<String> = env::args().collect();
if args.len() <= 1 || args.contains(&"help".to_string()) {
@@ -30,18 +31,41 @@ fn main() -> Result<(), Error>{
println!("File provided is not a .hea file");
return Ok(());
}
// Parse the header information
let header: Header;
{
let hea_file_result = fs::read_to_string(filepath);
match hea_file_result {
Ok(file_data) => {
let header = headparse::parse_header(file_data.as_str());
dbg!(header);
match headparse::parse_header(file_data.as_str()) {
Ok(h) => {header = h}
Err(e) => {return Err(e.to_string())}
}
}
Err(e) => return Err(e)
Err(e) => {return Err("error: Provided file cannot be opened".to_string())}
}
}
let path_parent: String;
{
// This is cursed lol
match filepath.parent() {
Some(p) => {
match p.to_str() {
Some(str) => {
path_parent = str.to_string();
}
None => {path_parent = "".to_string()}
}
}
None => {path_parent = "".to_string()}
}
}
let parsed_signals = get_all_data(header, path_parent);
println!("Hello, world!");
Ok(())
}
@@ -51,43 +75,14 @@ fn help() {
println!("\nUse in the format \"wfdb_corrosion (.hea filename)\"")
}
/// Holds fully processed signal data already parsed from the .dat file, ready
/// to be outputted in a practical way
#[derive(Debug, Clone)]
struct SignalData {
name: String,
values: Vec<f64>,
unit: String
}
impl SignalData {
/// Creates a [`SignalData`](crate::SignalData) with a name and an empty
/// `values` vector and `unit` string.
///
/// The `values` vector is initialized with no capacity, which causes this
/// struct to be quite a bit slower. This method is thus not suggested, use
/// [`SignalData::with_name_and_capacity`](crate::SignalData::with_name_and_capacity)
/// when you know how much you want to allocate
///
/// # Arguments
/// * `name` - The name of the Signal
pub fn with_name(name: String) -> SignalData {
SignalData { name: name, values: vec![], unit: String::new() }
}
/// Creates a [`SignalData`](crate::SignalData) with a name and a
/// `values` vector of a certain capacity and an empty `unit` string.
///
/// # Arguments
///
/// * `name` - The name of the Signal
/// * `capacity` - The capacity with which the `values` vector will be
/// initialized
pub fn with_name_and_capacity(name: String, capacity: usize) -> SignalData {
SignalData { name: name, values: Vec::with_capacity(capacity), unit: String::new() }
}
}
fn get_signal_data() -> SignalData {
fn get_signal_data(spec: headparse::SignalSpec, offset: u64, data_length: usize) -> SignalData {
todo!()
}
fn get_all_data(header: Header, header_root: String) -> Vec<SignalData> {
let signal_counts = header.signals_per_file();
for (filename, sigcount) in signal_counts {
}
todo!()
}