]> granicus.if.org Git - python/commitdiff
Special case endpoint access for speed.
authorRaymond Hettinger <python@rcn.com>
Thu, 4 Mar 2004 08:00:54 +0000 (08:00 +0000)
committerRaymond Hettinger <python@rcn.com>
Thu, 4 Mar 2004 08:00:54 +0000 (08:00 +0000)
Modules/collectionsmodule.c

index f7fb91ff78a302097378eef7e2fb26bf4fb8cc9d..ddc6f88461b60ce9c5bda48e844a9ce9e586b13f 100644 (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);