summaryrefslogtreecommitdiff
path: root/src/disk/bitmap.rs
diff options
context:
space:
mode:
authorChuyan Zhang <me@zcy.moe>2023-11-30 02:15:06 -0800
committerChuyan Zhang <me@zcy.moe>2023-11-30 02:15:06 -0800
commit1eac97eea4ec0bcef0be061a2cba93a584355283 (patch)
treed98fb1f6e3811286a0733c9df21e467590635ad2 /src/disk/bitmap.rs
parentb3db8a5a710aa0890c80241ffb3fd9792bf1cbe7 (diff)
downloadmyfs-1eac97eea4ec0bcef0be061a2cba93a584355283.tar.gz
myfs-1eac97eea4ec0bcef0be061a2cba93a584355283.zip
Add real disk i/o, add mkfs.aya (not yet implemented)
Diffstat (limited to 'src/disk/bitmap.rs')
-rw-r--r--src/disk/bitmap.rs48
1 files changed, 0 insertions, 48 deletions
diff --git a/src/disk/bitmap.rs b/src/disk/bitmap.rs
deleted file mode 100644
index b68c341..0000000
--- a/src/disk/bitmap.rs
+++ /dev/null
@@ -1,48 +0,0 @@
-use crate::block_device::{BlockDevice, BLOCK_SIZE};
-use std::sync::Arc;
-
-pub struct Bitmap {
- pub starting_block: usize,
- pub length: usize,
- pub device: Arc<dyn BlockDevice>,
- pub data: Vec<u8>,
-}
-
-impl Bitmap {
- pub(crate) fn new(starting_block: usize, length: usize, device: Arc<dyn BlockDevice>) -> Self {
- Self {
- starting_block,
- length,
- device,
- data: vec![0u8; length * BLOCK_SIZE],
- }
- }
- pub(crate) fn allocate(&mut self) -> Option<usize> {
- for (i, byte) in self.data.iter_mut().enumerate() {
- let leading_ones = byte.leading_ones();
- if leading_ones != 8 {
- *byte |= (1 << (7 - leading_ones)) as u8;
- return Some(i * 8 + leading_ones as usize);
- }
- }
- None
- }
-
- pub(crate) fn query(&self, index: usize) -> bool {
- if index == 0 {
- false
- } else {
- self.data[index / 8] & ((1 << (7 - index % 8)) as u8) != 0
- }
- }
-
- pub(crate) fn deallocate(&mut self, index: usize) -> bool {
- if self.query(index) {
- let mask = !(1u8 << (7 - index % 8));
- self.data[index / 8] &= mask;
- true
- } else {
- false
- }
- }
-}