Commit d4ff741e authored by Raymond Hettinger's avatar Raymond Hettinger

Revert last change. Found an application that was worse off with resize

exact turned on.  The tiny space savings wasn't worth the additional time
and code.
parent 0bc3d985
...@@ -9,7 +9,7 @@ ...@@ -9,7 +9,7 @@
#endif #endif
static int static int
list_resize(PyListObject *self, int newsize, int exact) list_resize(PyListObject *self, int newsize)
{ {
PyObject **items; PyObject **items;
size_t _new_size; size_t _new_size;
...@@ -33,10 +33,7 @@ list_resize(PyListObject *self, int newsize, int exact) ...@@ -33,10 +33,7 @@ list_resize(PyListObject *self, int newsize, int exact)
* system realloc(). * system realloc().
* The growth pattern is: 0, 4, 8, 16, 25, 35, 46, 58, 72, 88, ... * The growth pattern is: 0, 4, 8, 16, 25, 35, 46, 58, 72, 88, ...
*/ */
if (exact) _new_size = (newsize >> 3) + (self->ob_size < 8 ? 3 : 6) + newsize;
_new_size = newsize;
else
_new_size = (newsize>>3) + (self->ob_size < 8 ? 3 : 6) + newsize;
items = self->ob_item; items = self->ob_item;
if (_new_size <= ((~(size_t)0) / sizeof(PyObject *))) if (_new_size <= ((~(size_t)0) / sizeof(PyObject *)))
PyMem_RESIZE(items, PyObject *, _new_size); PyMem_RESIZE(items, PyObject *, _new_size);
...@@ -155,7 +152,7 @@ ins1(PyListObject *self, int where, PyObject *v) ...@@ -155,7 +152,7 @@ ins1(PyListObject *self, int where, PyObject *v)
return -1; return -1;
} }
if (list_resize(self, n+1, 0) == -1) if (list_resize(self, n+1) == -1)
return -1; return -1;
if (where < 0) { if (where < 0) {
...@@ -521,13 +518,13 @@ list_ass_slice(PyListObject *a, int ilow, int ihigh, PyObject *v) ...@@ -521,13 +518,13 @@ list_ass_slice(PyListObject *a, int ilow, int ihigh, PyObject *v)
if (d < 0) { if (d < 0) {
memmove(&item[ihigh+d], &item[ihigh], memmove(&item[ihigh+d], &item[ihigh],
(a->ob_size - ihigh)*sizeof(PyObject *)); (a->ob_size - ihigh)*sizeof(PyObject *));
list_resize(a, a->ob_size + d, 1); list_resize(a, a->ob_size + d);
item = a->ob_item; item = a->ob_item;
} }
} }
else { /* Insert d items; recycle ihigh-ilow items */ else { /* Insert d items; recycle ihigh-ilow items */
s = a->ob_size; s = a->ob_size;
if (list_resize(a, s+d, 1) == -1) { if (list_resize(a, s+d) == -1) {
if (recycle != NULL) if (recycle != NULL)
PyMem_DEL(recycle); PyMem_DEL(recycle);
return -1; return -1;
...@@ -591,7 +588,7 @@ list_inplace_repeat(PyListObject *self, int n) ...@@ -591,7 +588,7 @@ list_inplace_repeat(PyListObject *self, int n)
return (PyObject *)self; return (PyObject *)self;
} }
if (list_resize(self, size*n, 1) == -1) if (list_resize(self, size*n) == -1)
return NULL; return NULL;
p = size; p = size;
...@@ -683,7 +680,7 @@ listextend_internal(PyListObject *self, PyObject *b) ...@@ -683,7 +680,7 @@ listextend_internal(PyListObject *self, PyObject *b)
} }
} }
if (list_resize(self, selflen + blen, 0) == -1) { if (list_resize(self, selflen + blen) == -1) {
Py_DECREF(b); Py_DECREF(b);
return -1; return -1;
} }
...@@ -736,7 +733,7 @@ listextend(PyListObject *self, PyObject *b) ...@@ -736,7 +733,7 @@ listextend(PyListObject *self, PyObject *b)
} }
m = self->ob_size; m = self->ob_size;
mn = m + n; mn = m + n;
if (list_resize(self, mn, 0) == -1) if (list_resize(self, mn) == -1)
goto error; goto error;
memset(&(self->ob_item[m]), 0, sizeof(*self->ob_item) * n); memset(&(self->ob_item[m]), 0, sizeof(*self->ob_item) * n);
...@@ -821,7 +818,7 @@ listpop(PyListObject *self, PyObject *args) ...@@ -821,7 +818,7 @@ listpop(PyListObject *self, PyObject *args)
} }
v = self->ob_item[i]; v = self->ob_item[i];
if (i == self->ob_size - 1) { if (i == self->ob_size - 1) {
if (list_resize(self, self->ob_size - 1, 0) == -1) if (list_resize(self, self->ob_size - 1) == -1)
return NULL; return NULL;
return v; return v;
} }
...@@ -2520,7 +2517,7 @@ list_ass_subscript(PyListObject* self, PyObject* item, PyObject* value) ...@@ -2520,7 +2517,7 @@ list_ass_subscript(PyListObject* self, PyObject* item, PyObject* value)
} }
self->ob_size -= slicelength; self->ob_size -= slicelength;
list_resize(self, self->ob_size, 1); list_resize(self, self->ob_size);
for (i = 0; i < slicelength; i++) { for (i = 0; i < slicelength; i++) {
Py_DECREF(garbage[i]); Py_DECREF(garbage[i]);
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment