Implement value merging.

The actual BloomFilter merging still lacks, this is just the first step in the
right direction from the user interface side.
This commit is contained in:
Matthias Vallentin 2013-06-10 22:24:23 -07:00
parent 22afbe42dd
commit 14a701a237
4 changed files with 54 additions and 25 deletions

View file

@ -113,10 +113,10 @@ class BloomFilterVal : public OpaqueVal {
BloomFilterVal(const BloomFilterVal&);
BloomFilterVal& operator=(const BloomFilterVal&);
public:
static BloomFilterVal* Merge(const BloomFilterVal* first,
const BloomFilterVal* second);
static BloomFilterVal* Merge(const BloomFilterVal* x,
const BloomFilterVal* y);
BloomFilterVal(BloomFilter* bf);
explicit BloomFilterVal(BloomFilter* bf);
~BloomFilterVal();
bool Typify(BroType* type);
@ -133,6 +133,17 @@ protected:
DECLARE_SERIAL(BloomFilterVal);
private:
template <typename T>
static BloomFilterVal* DoMerge(const BloomFilterVal* x,
const BloomFilterVal* y)
{
const T* a = dynamic_cast<const T*>(x->bloom_filter_);
const T* b = dynamic_cast<const T*>(y->bloom_filter_);
if ( a && b )
return new BloomFilterVal(T::Merge(a, b));
return NULL;
}
BroType* type_;
CompositeHash* hash_;
BloomFilter* bloom_filter_;