|
From: <sv...@va...> - 2011-03-07 19:13:41
|
Author: sewardj
Date: 2011-03-07 19:13:33 +0000 (Mon, 07 Mar 2011)
New Revision: 11609
Log:
Replace the structural equality function for WordVecs with a more
efficient one. n-i-bz.
(Philippe Waroquiers, phi...@sk...).
Modified:
trunk/helgrind/hg_wordset.c
Modified: trunk/helgrind/hg_wordset.c
===================================================================
--- trunk/helgrind/hg_wordset.c 2011-03-07 18:28:38 UTC (rev 11608)
+++ trunk/helgrind/hg_wordset.c 2011-03-07 19:13:33 UTC (rev 11609)
@@ -205,8 +205,17 @@
UWord i;
WordVec* wv1 = (WordVec*)wv1W;
WordVec* wv2 = (WordVec*)wv2W;
- UWord common = wv1->size < wv2->size ? wv1->size : wv2->size;
- for (i = 0; i < common; i++) {
+
+ // WordVecs with smaller size are smaller.
+ if (wv1->size < wv2->size) {
+ return -1;
+ }
+ if (wv1->size > wv2->size) {
+ return 1;
+ }
+
+ // Sizes are equal => order based on content.
+ for (i = 0; i < wv1->size; i++) {
if (wv1->words[i] == wv2->words[i])
continue;
if (wv1->words[i] < wv2->words[i])
@@ -215,19 +224,6 @@
return 1;
tl_assert(0);
}
- /* Ok, the common sections are identical. So now consider the
- tails. Both sets are considered to finish in an implied
- sequence of -infinity. */
- if (wv1->size < wv2->size) {
- tl_assert(common == wv1->size);
- return -1; /* impliedly, wv1 contains some -infinitys in places
- where wv2 doesn't. */
- }
- if (wv1->size > wv2->size) {
- tl_assert(common == wv2->size);
- return 1;
- }
- tl_assert(common == wv1->size);
return 0; /* identical */
}
|