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;


Reply via email to