stuff
This commit is contained in:
parent
025ecdb71d
commit
520268efc1
@ -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:
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user