Skip to content

Commit 71515d4

Browse files
liutecZhen
authored andcommitted
Non-recursive MessageFrame.read
1 parent 8ba2e76 commit 71515d4

File tree

1 file changed

+19
-15
lines changed

1 file changed

+19
-15
lines changed

neo4j/bolt/io.py

Lines changed: 19 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -67,24 +67,28 @@ def read_int(self):
6767
def read(self, n):
6868
if n == 0 or self._current_pane == -1:
6969
return _empty_view
70-
p, q = self._panes[self._current_pane]
71-
size = q - p
72-
remaining = size - self._current_offset
73-
if n <= remaining:
70+
value = None
71+
while n > 0 and self._current_pane >= 0:
72+
p, q = self._panes[self._current_pane]
73+
size = q - p
74+
remaining = size - self._current_offset
7475
start = p + self._current_offset
75-
end = start + n
76-
if n < remaining:
77-
self._current_offset += n
76+
if n <= remaining:
77+
end = start + n
78+
if n < remaining:
79+
self._current_offset += n
80+
else:
81+
self._next_pane()
7882
else:
83+
end = q
7984
self._next_pane()
80-
return memoryview(self._view[start:end])
81-
start = p + self._current_offset
82-
end = q
83-
value = bytearray(self._view[start:end])
84-
self._next_pane()
85-
if len(value) < n and self._current_pane >= 0:
86-
value.extend(self.read(n - (end - start)))
87-
return value
85+
if value:
86+
value.extend(self._view[start:end])
87+
else:
88+
value = bytearray(self._view[start:end])
89+
n -= end - start
90+
continue
91+
return memoryview(value)
8892

8993
def close(self):
9094
self._view = None

0 commit comments

Comments
 (0)