modification of the bitmap::fetch_from et bitmap::write_back
This commit is contained in:
parent
4d2f27b3b2
commit
d6ed2f1d75
@ -4,6 +4,8 @@ pub const BITS_IN_WORD: usize = 32;
|
||||
use std::fs::File;
|
||||
use std::io::{Cursor, Write, Read};
|
||||
|
||||
use crate::drivers::drv_disk::{self, DrvDisk};
|
||||
use crate::filesys::openfile::OpenFile;
|
||||
use crate::simulator::disk::SECTOR_SIZE;
|
||||
|
||||
pub struct BitMap {
|
||||
@ -21,11 +23,10 @@ impl BitMap {
|
||||
/// - **nitems** is the number of bits in the bitmap.
|
||||
///----------------------------------------------------------------------
|
||||
pub fn init_bitmap(n_items: usize) -> BitMap {
|
||||
let mut tmp: Vec<u32>;
|
||||
BitMap{
|
||||
num_bits: n_items,
|
||||
num_words: (n_items + SECTOR_SIZE as usize -1) / SECTOR_SIZE as usize,
|
||||
map: tmp,
|
||||
map: vec![0,n_items as u32],
|
||||
}
|
||||
}
|
||||
|
||||
@ -100,13 +101,11 @@ impl BitMap {
|
||||
///
|
||||
/// ### Parameters
|
||||
/// - **file** is the place to read the bitmap from
|
||||
pub fn fetch_from(&mut self, file_path: &str) -> std::io::Result<&Vec<u32>> {
|
||||
// Ouvre le fichier en mode lecture seule
|
||||
let mut file = File::open(file_path)?;
|
||||
pub fn fetch_from(&mut self, file: &mut OpenFile, drv_disk: &mut DrvDisk) -> std::io::Result<&Vec<u32>> {
|
||||
let mut num_bytes = self.num_words * std::mem::size_of::<u32>();
|
||||
|
||||
// Lit les octets du fichier dans un buffer
|
||||
let mut buffer = vec![0; self.num_words * std::mem::size_of::<u32>()];
|
||||
file.read_exact(&mut buffer)?;
|
||||
OpenFile::read(drv_disk, file, &mut buffer, num_bytes as i32);
|
||||
|
||||
// Convertit les octets en vecteur de u32
|
||||
self.map = vec![0; self.num_words];
|
||||
@ -125,19 +124,17 @@ impl BitMap {
|
||||
///
|
||||
/// ### Paramenters
|
||||
/// - **file** is the place to write the bitmap to
|
||||
pub fn write_back(&mut self, file_path: &str) -> std::io::Result<()> {
|
||||
pub fn write_back(&mut self, file: &mut OpenFile, drv_disk: &mut DrvDisk) -> std::io::Result<()> {
|
||||
let mut num_bytes = self.num_words * std::mem::size_of::<u32>();
|
||||
|
||||
// Encapsule le vecteur dans un std::io::Cursor pour l'utiliser comme un std::io::Write
|
||||
let mut cursor = Cursor::new(Vec::<u8>::new());
|
||||
for u32_val in self.map.as_mut_slice() {
|
||||
cursor.write_all(&u32_val.to_le_bytes())?;
|
||||
}
|
||||
|
||||
// Ouvre le fichier en mode écriture
|
||||
let mut file = File::create(file_path)?;
|
||||
|
||||
OpenFile::read_at(drv_disk, file, &mut cursor.into_inner(), num_bytes as i32, 0);
|
||||
// Écrit les données dans le fichier
|
||||
file.write_all(&cursor.into_inner())?;
|
||||
|
||||
Ok(())
|
||||
}
|
||||
}
|
Loading…
x
Reference in New Issue
Block a user