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