[Python-checkins] cpython: Hoist the deque->maxlen lookup out of the inner-loop.

raymond.hettinger python-checkins at python.org
Sun Oct 11 12:43:55 EDT 2015


https://hg.python.org/cpython/rev/0c8a9cafb24c
changeset: 98690:0c8a9cafb24c
user: Raymond Hettinger <python at rcn.com>
date: Sun Oct 11 09:43:50 2015 -0700
summary:
 Hoist the deque->maxlen lookup out of the inner-loop.
files:
 Modules/_collectionsmodule.c | 16 ++++++++++------
 1 files changed, 10 insertions(+), 6 deletions(-)
diff --git a/Modules/_collectionsmodule.c b/Modules/_collectionsmodule.c
--- a/Modules/_collectionsmodule.c
+++ b/Modules/_collectionsmodule.c
@@ -385,7 +385,7 @@
 {
 PyObject *it, *item;
 PyObject *(*iternext)(PyObject *);
- int trim = (deque->maxlen >= 0);
+ Py_ssize_t maxlen = deque->maxlen;
 
 /* Handle case where id(deque) == id(iterable) */
 if ((PyObject *)deque == iterable) {
@@ -433,8 +433,10 @@
 Py_SIZE(deque)++;
 deque->rightindex++;
 deque->rightblock->data[deque->rightindex] = item;
- if (trim)
- deque_trim_left(deque);
+ if (maxlen >= 0 && Py_SIZE(deque) > maxlen) {
+ PyObject *rv = deque_popleft(deque, NULL);
+ Py_DECREF(rv);
+ }
 }
 return finalize_iterator(it);
 }
@@ -447,7 +449,7 @@
 {
 PyObject *it, *item;
 PyObject *(*iternext)(PyObject *);
- int trim = (deque->maxlen >= 0);
+ Py_ssize_t maxlen = deque->maxlen;
 
 /* Handle case where id(deque) == id(iterable) */
 if ((PyObject *)deque == iterable) {
@@ -495,8 +497,10 @@
 Py_SIZE(deque)++;
 deque->leftindex--;
 deque->leftblock->data[deque->leftindex] = item;
- if (trim)
- deque_trim_right(deque);
+ if (maxlen >= 0 && Py_SIZE(deque) > maxlen) {
+ PyObject *rv = deque_pop(deque, NULL);
+ Py_DECREF(rv);
+ }
 }
 return finalize_iterator(it);
 }
-- 
Repository URL: https://hg.python.org/cpython


More information about the Python-checkins mailing list

AltStyle によって変換されたページ (->オリジナル) /