[Python-checkins] python/dist/src/Objects listobject.c,2.125,2.126
tim_one@users.sourceforge.net
tim_one@users.sourceforge.net
Thu, 18 Jul 2002 23:12:35 -0700
Update of /cvsroot/python/python/dist/src/Objects
In directory usw-pr-cvs1:/tmp/cvs-serv31227/python/Objects
Modified Files:
listobject.c
Log Message:
binarysort() cleanup: Documented the key invariants, explained why they
imply this is a stable sort, and added some asserts.
Index: listobject.c
===================================================================
RCS file: /cvsroot/python/python/dist/src/Objects/listobject.c,v
retrieving revision 2.125
retrieving revision 2.126
diff -C2 -d -r2.125 -r2.126
*** listobject.c 19 Jul 2002 04:04:16 -0000 2.125
--- listobject.c 19 Jul 2002 06:12:32 -0000 2.126
***************
*** 872,875 ****
--- 872,881 ----
r = start;
pivot = *r;
+ /* Invariants:
+ * pivot >= all in [lo, l).
+ * pivot < all in [r, start).
+ * The second is vacuously true at the start.
+ */
+ assert(l < r);
do {
p = l + ((r - l) >> 1);
***************
*** 877,883 ****
r = p;
else
! l = p + 1;
} while (l < r);
! /* Pivot should go at l -- slide over to make room.
Caution: using memmove is much slower under MSVC 5;
we're not usually moving many slots. */
--- 883,894 ----
r = p;
else
! l = p+1;
} while (l < r);
! assert(l == r);
! /* The invariants still hold, so pivot >= all in [lo, l) and
! pivot < all in [l, start), so pivot belongs at l. Note
! that if there are elements equal to pivot, l points to the
! first slot after them -- that's why this sort is stable.
! Slide over to make room.
Caution: using memmove is much slower under MSVC 5;
we're not usually moving many slots. */