This commit is contained in:
JISAUAY 2024-12-11 16:28:40 -06:00
parent 025ecdb71d
commit 520268efc1

View File

@ -57,6 +57,13 @@ class DiskMap:
return None
def findOffsetLastFile(self, offset: int) -> int | None:
for i, block in reversed(list(enumerate(self.blocks)))[offset:]:
if type(block) == FileBlock:
return i
return None
def findFreeBlockOfBestFit(self, size: int) -> int | None:
for i, block in enumerate(self.blocks):
if type(block) == FreeBlock and block.size >= size:
@ -64,6 +71,13 @@ class DiskMap:
return None
def moveFile(self, file: FileBlock, dest: FreeBlock) -> bool:
if dest.size > file.size:
return False
def compact(self) -> None:
while True:
free_index = self.findFreeBlock()
@ -93,6 +107,20 @@ class DiskMap:
if remaining_file_size:
self.blocks.insert(file_index, FileBlock(remaining_file_size, file_id))
def compact2(self) -> None:
offset = 0
while True:
file_index: int = self.findOffsetLastFile(offset)
file_size: int = self.blocks[file_index].size
free_index: int = self.findFreeBlockOfBestFit(file_size)
free_size: int = self.blocks[free_index].size
if file_index == None:
break
offset = len(self.blocks) - file_index
def __str__(self) -> str:
s = ''
for block in self.blocks: