]> granicus.if.org Git - python/commitdiff
Micro-optimization for list_contains. Factored double if test
authorRaymond Hettinger <python@rcn.com>
Thu, 5 Sep 2002 14:23:49 +0000 (14:23 +0000)
committerRaymond Hettinger <python@rcn.com>
Thu, 5 Sep 2002 14:23:49 +0000 (14:23 +0000)
out of the loop.

Objects/listobject.c

index cea8597f2311982a30193ea754aad2a0ab921893..229d64cfbd3bb3395ed545a199b671f6cfb6b305 100644 (file)
@@ -320,16 +320,15 @@ list_length(PyListObject *a)
 static int
 list_contains(PyListObject *a, PyObject *el)
 {
-       int i;
+       int i, cmp;
 
-       for (i = 0; i < a->ob_size; ++i) {
-               int cmp = PyObject_RichCompareBool(el, PyList_GET_ITEM(a, i),
+       for (i = 0, cmp = 0 ; cmp == 0 && i < a->ob_size; ++i)
+               cmp = PyObject_RichCompareBool(el, PyList_GET_ITEM(a, i),
                                                   Py_EQ);
-               if (cmp > 0)
-                       return 1;
-               else if (cmp < 0)
-                       return -1;
-       }
+       if (cmp > 0)
+               return 1;
+       if (cmp < 0)
+               return -1;
        return 0;
 }