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);
}
}