Commit b77debf7 authored by Robert Bradshaw's avatar Robert Bradshaw

Re-introduce shrinking and avoiding re-allocation for cython.array

This partially reverts 65d3b977,
but is more correct.

Closes #1492
parent 0101be0f
...@@ -121,7 +121,7 @@ static CYTHON_INLINE int resize(arrayobject *self, Py_ssize_t n) { ...@@ -121,7 +121,7 @@ static CYTHON_INLINE int resize(arrayobject *self, Py_ssize_t n) {
static CYTHON_INLINE int resize_smart(arrayobject *self, Py_ssize_t n) { static CYTHON_INLINE int resize_smart(arrayobject *self, Py_ssize_t n) {
void *items = (void*) self->data.ob_item; void *items = (void*) self->data.ob_item;
Py_ssize_t newsize; Py_ssize_t newsize;
if (n < self->ob_size) { if (n < self->allocated && n*4 > self->allocated) {
self->ob_size = n; self->ob_size = n;
return 0; return 0;
} }
...@@ -134,7 +134,7 @@ static CYTHON_INLINE int resize_smart(arrayobject *self, Py_ssize_t n) { ...@@ -134,7 +134,7 @@ static CYTHON_INLINE int resize_smart(arrayobject *self, Py_ssize_t n) {
if (items == NULL) { if (items == NULL) {
PyErr_NoMemory(); PyErr_NoMemory();
return -1; return -1;
} }
self->data.ob_item = (char*) items; self->data.ob_item = (char*) items;
self->ob_size = n; self->ob_size = n;
self->allocated = newsize; self->allocated = newsize;
......
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