From: Raymond Hettinger Date: Thu, 4 Mar 2004 08:00:54 +0000 (+0000) Subject: Special case endpoint access for speed. X-Git-Tag: v2.4a1~746 X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=6c79a518e70ea8e45e3287573d99c648ae3cb21b;p=python Special case endpoint access for speed. --- diff --git a/Modules/collectionsmodule.c b/Modules/collectionsmodule.c index f7fb91ff78..ddc6f88461 100644 --- a/Modules/collectionsmodule.c +++ b/Modules/collectionsmodule.c @@ -326,18 +326,26 @@ deque_item(dequeobject *deque, int i) return NULL; } - i += deque->leftindex; - n = i / BLOCKLEN; - i %= BLOCKLEN; - if (i < (deque->len >> 1)) { + if (i == 0) { + i = deque->leftindex; b = deque->leftblock; - while (n--) - b = b->rightlink; - } else { - n = (deque->leftindex + deque->len - 1) / BLOCKLEN - n; + } else if (i == deque->len - 1) { + i = deque->rightindex; b = deque->rightblock; - while (n--) - b = b->leftlink; + } else { + i += deque->leftindex; + n = i / BLOCKLEN; + i %= BLOCKLEN; + if (i < (deque->len >> 1)) { + b = deque->leftblock; + while (n--) + b = b->rightlink; + } else { + n = (deque->leftindex + deque->len - 1) / BLOCKLEN - n; + b = deque->rightblock; + while (n--) + b = b->leftlink; + } } item = b->data[i]; Py_INCREF(item);