Special case endpoint access for speed.

This commit is contained in:
Raymond Hettinger 2004-03-04 08:00:54 +00:00
parent 30e97dbe96
commit 6c79a518e7

View file

@ -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);