summaryrefslogtreecommitdiff
path: root/src/disk/data_block.rs
diff options
context:
space:
mode:
authorChuyan Zhang <me@zcy.moe>2023-11-19 01:03:19 -0800
committerChuyan Zhang <me@zcy.moe>2023-11-19 01:03:19 -0800
commit8a45cd95353ae9fe1286dbc4fcd36faaa66c9f82 (patch)
treeaf7687f74197ec338f57dc0cd174f1c32bb60af2 /src/disk/data_block.rs
parent886df6daf6bb6b922276157dba1cc099e897a9ea (diff)
downloadmyfs-8a45cd95353ae9fe1286dbc4fcd36faaa66c9f82.tar.gz
myfs-8a45cd95353ae9fe1286dbc4fcd36faaa66c9f82.zip
Layer 1 test not passing
Diffstat (limited to 'src/disk/data_block.rs')
-rw-r--r--src/disk/data_block.rs168
1 files changed, 0 insertions, 168 deletions
diff --git a/src/disk/data_block.rs b/src/disk/data_block.rs
deleted file mode 100644
index d287ee6..0000000
--- a/src/disk/data_block.rs
+++ /dev/null
@@ -1,168 +0,0 @@
-use crate::disk::inode::Inode;
-
-pub trait Block: Default + Clone {}
-
-#[derive(Clone)]
-pub struct DataBlock(pub(crate) [u8; 4096]);
-
-impl Default for DataBlock {
- fn default() -> Self {
- Self([0; 4096])
- }
-}
-
-impl Block for DataBlock {}
-
-#[derive(Clone)]
-pub struct InodeBlock {
- pub(crate) inodes: [Inode; 16],
-}
-
-impl Default for InodeBlock {
- fn default() -> Self {
- Self {
- inodes: [
- Inode::empty(),
- Inode::empty(),
- Inode::empty(),
- Inode::empty(),
- Inode::empty(),
- Inode::empty(),
- Inode::empty(),
- Inode::empty(),
- Inode::empty(),
- Inode::empty(),
- Inode::empty(),
- Inode::empty(),
- Inode::empty(),
- Inode::empty(),
- Inode::empty(),
- Inode::empty(),
- ],
- }
- }
-}
-
-impl Block for InodeBlock {}
-
-const FULL_MAP: u32 = 0b111_111_111_111_111;
-
-#[derive(Clone)]
-pub struct DirectoryBlock {
- entries: [[u8; 256]; 15],
- inode_ids: [usize; 15],
- occupancy_map: u32,
- reserved: [u8; 132],
-}
-
-impl Default for DirectoryBlock {
- fn default() -> Self {
- Self {
- entries: [[0; 256]; 15],
- inode_ids: [0; 15],
- occupancy_map: 0,
- reserved: [0xFF; 132],
- }
- }
-}
-
-impl Block for DirectoryBlock {}
-
-impl DirectoryBlock {
- fn vacant(&self) -> bool {
- self.occupancy_map & FULL_MAP != FULL_MAP
- }
-
- fn first_free(&self) -> Option<usize> {
- todo!()
- }
-
- fn mark_busy(&mut self, entry_id: usize) {
- todo!()
- }
-
- /// 需要判断 entry_name.len() <= 255
- pub fn write_entry(&mut self, entry_name: &[u8], entry_inode_id: usize) -> Option<usize> {
- if let Some(entry_id) = self.first_free() {
- self.mark_busy(entry_id);
- self.entries[entry_id].copy_from_slice(entry_name);
- self.inode_ids[entry_id] = entry_inode_id;
- Some(entry_id)
- } else {
- None
- }
- }
-}
-
-#[derive(Clone)]
-pub struct IndirectBlock {
- pub entries: [u32; 1024],
-}
-
-impl Default for IndirectBlock {
- fn default() -> Self {
- Self { entries: [0; 1024] }
- }
-}
-
-impl Block for IndirectBlock {}
-
-impl IndirectBlock {
- pub fn full(&self) -> bool {
- todo!()
- }
-
- pub fn allocate(&mut self) -> Option<usize> {
- todo!()
- }
-}
-
-#[derive(Clone)]
-pub struct DoubleIndirectBlock {
- pub indirect: [u32; 1024],
-}
-
-impl Default for DoubleIndirectBlock {
- fn default() -> Self {
- Self {
- indirect: [0; 1024],
- }
- }
-}
-
-impl Block for DoubleIndirectBlock {}
-
-impl DoubleIndirectBlock {
- pub fn full(&self) -> bool {
- todo!()
- }
-
- pub fn allocate(&mut self) -> Option<usize> {
- todo!()
- }
-}
-
-#[derive(Clone)]
-pub struct TripleIndirectBlock {
- pub double_indirect: [u32; 1024],
-}
-
-impl Default for TripleIndirectBlock {
- fn default() -> Self {
- Self {
- double_indirect: [0; 1024],
- }
- }
-}
-
-impl Block for TripleIndirectBlock {}
-
-impl TripleIndirectBlock {
- pub fn full(&self) -> bool {
- todo!()
- }
-
- pub fn allocate(&mut self) -> Option<usize> {
- todo!()
- }
-}