Author: toad
Date: 2008-05-22 22:45:16 +0000 (Thu, 22 May 2008)
New Revision: 20051

Modified:
   branches/db4o/freenet/src/freenet/keys/Key.java
   branches/db4o/freenet/src/freenet/keys/NodeCHK.java
   branches/db4o/freenet/src/freenet/keys/NodeSSK.java
Log:
Make Key's implement Comparable so that db4o can put them in a btree and thus 
index fields which contain keys.

Modified: branches/db4o/freenet/src/freenet/keys/Key.java
===================================================================
--- branches/db4o/freenet/src/freenet/keys/Key.java     2008-05-22 22:41:15 UTC 
(rev 20050)
+++ branches/db4o/freenet/src/freenet/keys/Key.java     2008-05-22 22:45:16 UTC 
(rev 20051)
@@ -29,7 +29,7 @@
  * 
  * Base class for node keys.
  */
-public abstract class Key implements WritableToDataOutputStream {
+public abstract class Key implements WritableToDataOutputStream, Comparable {

     final int hash;
     double cachedNormalizedDouble;

Modified: branches/db4o/freenet/src/freenet/keys/NodeCHK.java
===================================================================
--- branches/db4o/freenet/src/freenet/keys/NodeCHK.java 2008-05-22 22:41:15 UTC 
(rev 20050)
+++ branches/db4o/freenet/src/freenet/keys/NodeCHK.java 2008-05-22 22:45:16 UTC 
(rev 20051)
@@ -8,6 +8,7 @@
 import java.io.DataOutputStream;
 import java.io.IOException;
 import freenet.support.Base64;
+import freenet.support.Fields;
 import freenet.support.Logger;

 /**
@@ -107,4 +108,10 @@
                System.arraycopy(keyBuf, 2, out, 0, KEY_LENGTH);
                return out;
        }
+
+       public int compareTo(Object arg0) {
+               if(arg0 instanceof NodeSSK) return 1;
+               NodeCHK key = (NodeCHK) arg0;
+               return Fields.compareBytes(routingKey, key.routingKey);
+       }
 }

Modified: branches/db4o/freenet/src/freenet/keys/NodeSSK.java
===================================================================
--- branches/db4o/freenet/src/freenet/keys/NodeSSK.java 2008-05-22 22:41:15 UTC 
(rev 20050)
+++ branches/db4o/freenet/src/freenet/keys/NodeSSK.java 2008-05-22 22:45:16 UTC 
(rev 20051)
@@ -204,5 +204,13 @@
                System.arraycopy(keyBuf, 2+E_H_DOCNAME_SIZE, pubKeyHash, 0, 
PUBKEY_HASH_SIZE);
                return makeRoutingKey(pubKeyHash, encryptedHashedDocname);
        }
+
+       public int compareTo(Object arg0) {
+               if(arg0 instanceof NodeCHK) return -1;
+               NodeSSK key = (NodeSSK) arg0;
+               int result = Fields.compareBytes(encryptedHashedDocname, 
key.encryptedHashedDocname);
+               if(result != 0) return result;
+               return Fields.compareBytes(pubKeyHash, key.pubKeyHash);
+       }

 }


Reply via email to