Changing the Bloom filter hashing so that it's independent of

CompositeHash.

We do this by hashing values added to a BloomFilter another time more
with a stable hash seeded only by either the filter's name or the
global_hash_seed (or Bro's random() seed if neither is defined).

I'm also adding a new bif bloomfilter_internal_state() that returns a
string representation of a Bloom filter's current internal state. This
is solely for writing tests that check that the filters end up
consistent when seeded with the same value.
This commit is contained in:
Robin Sommer 2013-07-31 17:14:02 -07:00
parent 6c197fbebf
commit 2a0790c231
14 changed files with 157 additions and 59 deletions

View file

@ -490,6 +490,16 @@ BitVector::size_type BitVector::FindNext(size_type i) const
return block ? bi * bits_per_block + lowest_bit(block) : find_from(bi + 1);
}
size_t BitVector::Hash() const
{
size_t hash = 0;
for ( size_type i = 0; i < Blocks(); ++i )
hash += bits[i];
return hash;
}
BitVector::size_type BitVector::lowest_bit(block_type block)
{
block_type x = block - (block & (block - 1));