add buffering to the map
This commit is contained in:
@@ -16,6 +16,7 @@ class Int2IntMapLike():
|
||||
def __init__(self, file):
|
||||
self._file = file
|
||||
self._handle = open(file, "w+t")
|
||||
self._buffer = ""
|
||||
|
||||
def close(self):
|
||||
if not self._handle.closed:
|
||||
@@ -27,13 +28,22 @@ class Int2IntMapLike():
|
||||
def add(self, start: int, length: int, val: int):
|
||||
line = "%d,%d,%d\n" % (start, length, val)
|
||||
length = len(line)
|
||||
offset = self._handle.tell()
|
||||
offset = self._handle.tell() + len(self._buffer)
|
||||
if offset % self.blocksize + length > self.blocksize:
|
||||
# end of block: fill block
|
||||
fill_bytes = self.blocksize - offset % self.blocksize
|
||||
self._handle.write("\n" * fill_bytes)
|
||||
self._handle.write(line)
|
||||
self._buffer = self._buffer + ("\n" * fill_bytes)
|
||||
else:
|
||||
self._buffer = self._buffer + line
|
||||
|
||||
def _flush_buffer(self):
|
||||
self._handle.write(self._buffer)
|
||||
self._buffer = ""
|
||||
self._handle.flush()
|
||||
|
||||
def find(self, key: int) -> Optional[int]:
|
||||
if (len(self._buffer)) > 0:
|
||||
self._flush_buffer()
|
||||
size = os.stat(self._file).st_size
|
||||
if size == 0:
|
||||
return None
|
||||
|
||||
Reference in New Issue
Block a user