[freenet-cvs] r19740 - branches/saltedhashstore/freenet/src/freenet/store
j16sdiz at freenetproject.org
j16sdiz at freenetproject.org
Sun May 4 13:14:19 UTC 2008
Author: j16sdiz
Date: 2008-05-04 13:14:19 +0000 (Sun, 04 May 2008)
New Revision: 19740
Modified:
branches/saltedhashstore/freenet/src/freenet/store/SaltedHashFreenetStore.java
Log:
no BigInteger for offset calcuation
Modified: branches/saltedhashstore/freenet/src/freenet/store/SaltedHashFreenetStore.java
===================================================================
--- branches/saltedhashstore/freenet/src/freenet/store/SaltedHashFreenetStore.java 2008-05-04 13:13:58 UTC (rev 19739)
+++ branches/saltedhashstore/freenet/src/freenet/store/SaltedHashFreenetStore.java 2008-05-04 13:14:19 UTC (rev 19740)
@@ -7,7 +7,6 @@
import java.io.File;
import java.io.IOException;
import java.io.RandomAccessFile;
-import java.math.BigInteger;
import java.nio.ByteBuffer;
import java.nio.channels.FileChannel;
import java.text.DecimalFormat;
@@ -312,8 +311,10 @@
}
public long getOffset() {
- BigInteger bi = new BigInteger(isEncrypted ? routingKey : getDigestedRoutingKey(routingKey));
- return bi.mod(BigInteger.valueOf(storeSize)).longValue();
+ if (isEncrypted)
+ return getOffsetFromDigestedKey(routingKey, storeSize);
+ else
+ return getOffsetFromPlainKey(routingKey, storeSize);
}
/**
@@ -841,16 +842,33 @@
/**
* Get offset in the hash table, given a plain routing key.
*
- * @param routingKey
+ * @param plainKey
* @param storeSize
* @return
*/
- public long getOffsetFromPlainKey(byte[] routingKey, long storeSize) {
- // Don't use NativeBigInteger, {@link net.i2p.util.NativeBigInteger#mod()} don't use native routine.
- BigInteger bi = new BigInteger(getDigestedRoutingKey(routingKey));
- return bi.mod(BigInteger.valueOf(storeSize)).longValue();
+ public long getOffsetFromPlainKey(byte[] plainKey, long storeSize) {
+ return getOffsetFromPlainKey(getDigestedRoutingKey(plainKey), storeSize);
}
+ /**
+ * Get offset in the hash table, given a digested routing key.
+ *
+ * @param digestedKey
+ * @param storeSize
+ * @return
+ */
+ public long getOffsetFromDigestedKey(byte[] digestedKey, long storeSize) {
+ long keyValue = (((long) (digestedKey[0]) << 0) + //
+ (((long) digestedKey[1]) << 8) + //
+ (((long) digestedKey[3]) << 16) + //
+ (((long) digestedKey[4]) << 24) + //
+ (((long) digestedKey[5]) << 32) + //
+ (((long) digestedKey[6]) << 40) + //
+ (((long) digestedKey[7]) << 48))
+ & Long.MAX_VALUE;
+ return keyValue % storeSize;
+ }
+
// ------------- Statistics (a.k.a. lies)
private final Object statLock = new Object();
private long hits;
More information about the cvs
mailing list