stuff
This commit is contained in:
parent
025ecdb71d
commit
520268efc1
@ -57,6 +57,13 @@ class DiskMap:
|
|||||||
|
|
||||||
return None
|
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:
|
def findFreeBlockOfBestFit(self, size: int) -> int | None:
|
||||||
for i, block in enumerate(self.blocks):
|
for i, block in enumerate(self.blocks):
|
||||||
if type(block) == FreeBlock and block.size >= size:
|
if type(block) == FreeBlock and block.size >= size:
|
||||||
@ -64,6 +71,13 @@ class DiskMap:
|
|||||||
|
|
||||||
return None
|
return None
|
||||||
|
|
||||||
|
def moveFile(self, file: FileBlock, dest: FreeBlock) -> bool:
|
||||||
|
if dest.size > file.size:
|
||||||
|
return False
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
def compact(self) -> None:
|
def compact(self) -> None:
|
||||||
while True:
|
while True:
|
||||||
free_index = self.findFreeBlock()
|
free_index = self.findFreeBlock()
|
||||||
@ -93,6 +107,20 @@ class DiskMap:
|
|||||||
if remaining_file_size:
|
if remaining_file_size:
|
||||||
self.blocks.insert(file_index, FileBlock(remaining_file_size, file_id))
|
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:
|
def __str__(self) -> str:
|
||||||
s = ''
|
s = ''
|
||||||
for block in self.blocks:
|
for block in self.blocks:
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user