[pypy-commit] pypy default: (arigo, fijal) make creations of arrays even better
fijal
noreply at buildbot.pypy.org
Tue Jul 3 17:51:06 CEST 2012
Author: Maciej Fijalkowski <fijall at gmail.com>
Branch:
Changeset: r55896:d951481e63b7
Date: 2012-07-03 17:50 +0200
http://bitbucket.org/pypy/pypy/changeset/d951481e63b7/
Log: (arigo, fijal) make creations of arrays even better
diff --git a/pypy/module/array/interp_array.py b/pypy/module/array/interp_array.py
--- a/pypy/module/array/interp_array.py
+++ b/pypy/module/array/interp_array.py
@@ -227,14 +227,17 @@
# length
self.setlen(0)
- def setlen(self, size, zero=False):
+ def setlen(self, size, zero=False, overallocate=True):
if size > 0:
if size > self.allocated or size < self.allocated / 2:
- if size < 9:
- some = 3
+ if overallocate:
+ if size < 9:
+ some = 3
+ else:
+ some = 6
+ some += size >> 3
else:
- some = 6
- some += size >> 3
+ some = 0
self.allocated = size + some
if zero:
new_buffer = lltype.malloc(mytype.arraytype,
@@ -352,7 +355,7 @@
def getitem__Array_Slice(space, self, w_slice):
start, stop, step, size = space.decode_index4(w_slice, self.len)
w_a = mytype.w_class(self.space)
- w_a.setlen(size)
+ w_a.setlen(size, overallocate=False)
assert step != 0
j = 0
for i in range(start, stop, step):
@@ -477,7 +480,7 @@
def add__Array_Array(space, self, other):
a = mytype.w_class(space)
- a.setlen(self.len + other.len)
+ a.setlen(self.len + other.len, overallocate=False)
for i in range(self.len):
a.buffer[i] = self.buffer[i]
for i in range(other.len):
@@ -523,15 +526,15 @@
# <a performance hack>
if oldlen == 1:
if self.buffer[0] == rffi.cast(mytype.itemtype, 0):
- a.setlen(newlen, zero=True)
+ a.setlen(newlen, zero=True, overallocate=False)
return a
- a.setlen(newlen)
+ a.setlen(newlen, overallocate=False)
item = self.buffer[0]
for r in range(start, repeat):
a.buffer[r] = item
return a
# </a performance hack>
- a.setlen(newlen)
+ a.setlen(newlen, overallocate=False)
for r in range(start, repeat):
for i in range(oldlen):
a.buffer[r * oldlen + i] = self.buffer[i]
@@ -658,7 +661,7 @@
def array_copy__Array(space, self):
w_a = mytype.w_class(self.space)
- w_a.setlen(self.len)
+ w_a.setlen(self.len, overallocate=False)
rffi.c_memcpy(
rffi.cast(rffi.VOIDP, w_a.buffer),
rffi.cast(rffi.VOIDP, self.buffer),
More information about the pypy-commit
mailing list