OSDN Git Service

Now that I look at it, is_stopword() is broken and always has been.
authorTom Lane <tgl@sss.pgh.pa.us>
Tue, 4 Jul 2000 06:29:27 +0000 (06:29 +0000)
committerTom Lane <tgl@sss.pgh.pa.us>
Tue, 4 Jul 2000 06:29:27 +0000 (06:29 +0000)
Doesn't anyone remember how to program a binary search??

contrib/fulltextindex/fti.c

index be45223..a98fcd4 100644 (file)
@@ -351,10 +351,9 @@ is_stopword(char *text)
        StopLow = &StopWords[0];        /* initialize stuff for binary search */
        StopHigh = endof(StopWords);
 
-       if (lengthof(StopWords) == 0)
-               return false;
+       /* Loop invariant: *StopLow <= text < *StopHigh */
 
-       while (StopLow <= StopHigh)
+       while (StopLow < StopHigh)
        {
                StopMiddle = StopLow + (StopHigh - StopLow) / 2;
                difference = strcmp(*StopMiddle, text);
@@ -363,7 +362,7 @@ is_stopword(char *text)
                else if (difference < 0)
                        StopLow = StopMiddle + 1;
                else
-                       StopHigh = StopMiddle - 1;
+                       StopHigh = StopMiddle;
        }
 
        return (false);