Skip to content

Commit 7da8ca0

Browse files
perf: faster reading of bytes,bytearray,np.ndarray,mmap index
1 parent 4c1f8b3 commit 7da8ca0

File tree

2 files changed

+28
-6
lines changed

2 files changed

+28
-6
lines changed

mapbuffer/intmap.py

Lines changed: 14 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -67,9 +67,20 @@ def index(self):
6767
return self._index
6868

6969
N = len(self)
70-
index_length = 2 * N * 8
71-
index = self.buffer[self.HEADER_LENGTH:index_length+self.HEADER_LENGTH]
72-
self._index = np.frombuffer(index, dtype=np.uint64).reshape((N,2))
70+
index_length = 2 * N
71+
72+
if isinstance(self.buffer, (bytes,bytearray,np.ndarray,mmap.mmap)):
73+
self._index = np.frombuffer(
74+
self.buffer,
75+
offset=self.HEADER_LENGTH,
76+
count=index_length,
77+
dtype=np.uint64,
78+
).reshape((N,2))
79+
else:
80+
index_length *= 8
81+
index = self.buffer[self.HEADER_LENGTH:index_length+self.HEADER_LENGTH]
82+
self._index = np.frombuffer(index, dtype=np.uint64).reshape((N,2))
83+
7384
return self._index
7485

7586
def keys(self):

mapbuffer/mapbuffer.py

Lines changed: 14 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -105,9 +105,20 @@ def index(self):
105105
return self._index
106106

107107
N = len(self)
108-
index_length = 2 * N * 8
109-
index = self.buffer[HEADER_LENGTH:index_length+HEADER_LENGTH]
110-
self._index = np.frombuffer(index, dtype=np.uint64).reshape((N,2))
108+
index_length = 2 * N
109+
110+
if isinstance(self.buffer, (bytes,bytearray,np.ndarray,mmap.mmap)):
111+
self._index = np.frombuffer(
112+
self.buffer,
113+
offset=HEADER_LENGTH,
114+
count=index_length,
115+
dtype=np.uint64,
116+
).reshape((N,2))
117+
else:
118+
index_length *= 8
119+
index = self.buffer[HEADER_LENGTH:index_length+HEADER_LENGTH]
120+
self._index = np.frombuffer(index, dtype=np.uint64).reshape((N,2))
121+
111122
return self._index
112123

113124
def keys(self):

0 commit comments

Comments
 (0)