Author: toad
Date: 2008-03-21 23:06:52 +0000 (Fri, 21 Mar 2008)
New Revision: 18707
Modified:
trunk/freenet/src/freenet/client/async/OfferedKeysList.java
Log:
Optimise the common case.
Modified: trunk/freenet/src/freenet/client/async/OfferedKeysList.java
===================================================================
--- trunk/freenet/src/freenet/client/async/OfferedKeysList.java 2008-03-21
23:04:59 UTC (rev 18706)
+++ trunk/freenet/src/freenet/client/async/OfferedKeysList.java 2008-03-21
23:06:52 UTC (rev 18707)
@@ -75,6 +75,14 @@
public synchronized Object chooseKey(KeysFetchingLocally fetching) {
assert(keysList.size() == keys.size());
+ if(keys.size() == 1) {
+ // Shortcut the common case
+ Key k = (Key) keysList.get(0);
+ if(fetching.hasKey(k)) return null;
+ keys.remove(k);
+ keysList.setSize(0);
+ return k;
+ }
for(int i=0;i<10;i++) {
// Pick a random key
if(keysList.isEmpty()) return null;
@@ -91,8 +99,14 @@
return null;
}
- public synchronized boolean hasValidKeys(RequestStarter starter) {
+ public synchronized boolean hasValidKeys(RequestStarter fetching) {
assert(keysList.size() == keys.size());
+ if(keys.size() == 1) {
+ // Shortcut the common case
+ Key k = (Key) keysList.get(0);
+ if(fetching.hasKey(k)) return false;
+ return true;
+ }
for(int i=0;i<10;i++) {
// Pick a random key
if(keysList.isEmpty()) return false;