liujingx 11 месяцев назад
Родитель
Сommit
9ef1b45c7c
2 измененных файлов с 34 добавлено и 0 удалено
  1. 33 0
      src/ext4/bitmap.rs
  2. 1 0
      src/ext4/mod.rs

+ 33 - 0
src/ext4/bitmap.rs

@@ -0,0 +1,33 @@
+pub struct Bitmap<'a>(&'a mut [u8]);
+
+impl<'a> Bitmap<'a> {
+    pub fn new(bmap: &'a mut [u8]) -> Self {
+        Self(bmap)
+    }
+
+    pub fn is_bit_clear(&self, bit: usize) -> bool {
+        self.0[bit / 8] & (1 << (bit % 8)) == 0
+    }
+
+    pub fn is_bit_set(&self, bit: usize) -> bool {
+        !self.is_bit_clear(bit)
+    }
+
+    pub fn set_bit(&mut self, bit: usize) {
+        self.0[bit / 8] |= 1 << (bit % 8);
+    }
+
+    pub fn clear_bit(&mut self, bit: usize) {
+        self.0[bit / 8] &= !(1 << (bit % 8));
+    }
+
+    /// Find the first clear bit in the range `[start, end)``
+    pub fn find_clear(&self, start: usize, end: usize) -> Option<usize> {
+        for i in start..end {
+            if self.is_bit_clear(i) {
+                return Some(i);
+            }
+        }
+        None
+    }
+}

+ 1 - 0
src/ext4/mod.rs

@@ -8,6 +8,7 @@ mod extent;
 mod file;
 mod journal;
 mod link;
+mod bitmap;
 mod utils;
 
 #[derive(Debug)]