On Friday 23 May 2008 15:20, [EMAIL PROTECTED] wrote:
> Author: j16sdiz
> Date: 2008-05-23 14:20:09 +0000 (Fri, 23 May 2008)
> New Revision: 20059
>
> Added:
> branches/saltedhashstore/freenet/src/freenet/support/BloomFilter.java
> Log:
> bloom filter
>
>
> Added: branches/saltedhashstore/freenet/src/freenet/support/BloomFilter.java
> ===================================================================
> --- branches/saltedhashstore/freenet/src/freenet/support/BloomFilter.java
>
(rev 0)
> +++ branches/saltedhashstore/freenet/src/freenet/support/BloomFilter.java
2008-05-23 14:20:09 UTC (rev 20059)
> +
> + private int[] getHashes(byte[] key) {
> + int[] hashes = new int[k];
> +
> + MessageDigest md = SHA256.getMessageDigest();
> + try {
> + for (int i = 0; i < k; i++) {
> + md.update(key);
> + md.update((byte) i);
> + hashes[i] = (int)
> ((Fields.bytesToLong(md.digest()) & Long.MAX_VALUE) %
length);Unnecessary. Just extract them all from a single SHA256 invocation at different points along the output. Otherwise, a nice simple implementation. Although it will need to be regenerated periodically because it's non-counting so doesn't support deletions. If it was counting, it could efficiently support deletions, and therefore need regenerating only after an unclean shutdown (or maybe several unclean shutdowns)... or when there was an overflow, which as long as the same key isn't added twice (unclean shutdowns again!), should be relatively rare... Some implementations apparently use an exception table, but I don't see any efficient way to do this on-disk (unless it's really small, would it be?).
pgpTtqpAVoa4W.pgp
Description: PGP signature
_______________________________________________ Devl mailing list [email protected] http://emu.freenetproject.org/cgi-bin/mailman/listinfo/devl
