use std::io::BufReader;
use crate::format::MAX_SECTOR;
use crate::sector::Sector;
#[derive(Default, Debug)]
pub struct Track {
pub number_of_sector: u16,
pub sector_tbl: Vec<Sector>,
}
impl Track {
#[allow(clippy::result_unit_err)]
pub fn preset(
&mut self,
reader: &mut BufReader<std::fs::File>,
offset_: u64,
) -> Result<usize, ()> {
if offset_ == 0 {
return Err(());
}
let mut offset = offset_;
let mut sec_count: u16 = 0;
let mut track_size: usize = 0;
#[allow(unused_assignments)]
let mut number_of_sector: u16 = 0;
loop {
let mut sector = Sector::default();
if let Ok(sec_size) = sector.preset(reader, offset) {
track_size += sec_size as usize;
number_of_sector = sector.header.number_of_sec;
self.sector_tbl.push(sector);
sec_count += 1;
if (sec_count >= number_of_sector) || (sec_count >= MAX_SECTOR) {
break;
}
offset += sec_size;
} else {
return Err(());
}
}
self.number_of_sector = number_of_sector;
Ok(track_size)
}
pub fn sector_sort(&mut self) {
self.sector_tbl
.sort_by(|a: &Sector, b: &Sector| a.header.sector.cmp(&b.header.sector));
}
pub fn file_offset_sort(&mut self) {
self.sector_tbl
.sort_by(|a: &Sector, b: &Sector| a.offset.cmp(&b.offset));
}
}