Author: j16sdiz
Date: 2008-04-15 01:20:23 +0000 (Tue, 15 Apr 2008)
New Revision: 19340

Modified:
   trunk/freenet/src/freenet/support/Fields.java
   trunk/freenet/src/freenet/support/SortedLongSet.java
Log:
fix and use Fields.binarySearch


Modified: trunk/freenet/src/freenet/support/Fields.java
===================================================================
--- trunk/freenet/src/freenet/support/Fields.java       2008-04-14 21:58:13 UTC 
(rev 19339)
+++ trunk/freenet/src/freenet/support/Fields.java       2008-04-15 01:20:23 UTC 
(rev 19340)
@@ -729,19 +729,17 @@
                int begin = origBegin;
                int end = origEnd;
                while(true) {
+                       if(end < begin) // so we can use origEnd=length-1 
without worrying length=0
+                               return -begin-1;
+
                        int middle = (begin + end) >>> 1;
                        if(values[middle] == key)
                                return middle;

                        if(values[middle] > key) {
-                               end = middle;
-                               if(end - begin <= 1) {
-                                       return -middle-1;
-                               }
+                               end = middle - 1;
                        } else if(values[middle] < key) {
-                               begin = middle;
-                               if(end - begin <= 1)
-                                       return -end-1;
+                               begin = middle + 1;
                        }
                }
        }

Modified: trunk/freenet/src/freenet/support/SortedLongSet.java
===================================================================
--- trunk/freenet/src/freenet/support/SortedLongSet.java        2008-04-14 
21:58:13 UTC (rev 19339)
+++ trunk/freenet/src/freenet/support/SortedLongSet.java        2008-04-15 
01:20:23 UTC (rev 19340)
@@ -178,20 +178,6 @@
        }

        private int binarySearch(long key) {
-               int low = 0;
-               int high = length - 1;
-
-               while (low <= high) {
-                       int mid = (low + high) >>> 1;
-                       long midVal = data[mid];
-
-                       if (midVal < key)
-                               low = mid + 1;
-                       else if (midVal > key)
-                               high = mid - 1;
-                       else
-                               return mid; // key found
-               }
-               return -(low + 1); // key not found.
+               return Fields.binarySearch(data, key, 0, length-1);
        }
 }


Reply via email to