Move probabilistic code into zeek namespaces

This commit is contained in:
Tim Wojtulewicz 2020-08-01 10:48:36 -07:00
parent be92bd536f
commit f310795d79
17 changed files with 162 additions and 118 deletions

View file

@ -706,7 +706,7 @@ BloomFilterVal::BloomFilterVal()
bloom_filter = nullptr; bloom_filter = nullptr;
} }
BloomFilterVal::BloomFilterVal(probabilistic::BloomFilter* bf) BloomFilterVal::BloomFilterVal(zeek::probabilistic::BloomFilter* bf)
: OpaqueVal(bloomfilter_type) : OpaqueVal(bloomfilter_type)
{ {
hash = nullptr; hash = nullptr;
@ -784,7 +784,7 @@ BloomFilterValPtr BloomFilterVal::Merge(const BloomFilterVal* x,
return nullptr; return nullptr;
} }
probabilistic::BloomFilter* copy = x->bloom_filter->Clone(); zeek::probabilistic::BloomFilter* copy = x->bloom_filter->Clone();
if ( ! copy->Merge(y->bloom_filter) ) if ( ! copy->Merge(y->bloom_filter) )
{ {
@ -851,7 +851,7 @@ bool BloomFilterVal::DoUnserialize(const broker::data& data)
return false; return false;
} }
auto bf = probabilistic::BloomFilter::Unserialize((*v)[1]); auto bf = zeek::probabilistic::BloomFilter::Unserialize((*v)[1]);
if ( ! bf ) if ( ! bf )
return false; return false;
@ -865,7 +865,7 @@ CardinalityVal::CardinalityVal() : OpaqueVal(cardinality_type)
hash = nullptr; hash = nullptr;
} }
CardinalityVal::CardinalityVal(probabilistic::CardinalityCounter* arg_c) CardinalityVal::CardinalityVal(zeek::probabilistic::detail::CardinalityCounter* arg_c)
: OpaqueVal(cardinality_type) : OpaqueVal(cardinality_type)
{ {
c = arg_c; c = arg_c;
@ -881,7 +881,7 @@ CardinalityVal::~CardinalityVal()
ValPtr CardinalityVal::DoClone(CloneState* state) ValPtr CardinalityVal::DoClone(CloneState* state)
{ {
return state->NewClone(this, return state->NewClone(this,
zeek::make_intrusive<CardinalityVal>(new probabilistic::CardinalityCounter(*c))); zeek::make_intrusive<CardinalityVal>(new zeek::probabilistic::detail::CardinalityCounter(*c)));
} }
bool CardinalityVal::Typify(zeek::TypePtr arg_type) bool CardinalityVal::Typify(zeek::TypePtr arg_type)
@ -945,7 +945,7 @@ bool CardinalityVal::DoUnserialize(const broker::data& data)
return false; return false;
} }
auto cu = probabilistic::CardinalityCounter::Unserialize((*v)[1]); auto cu = zeek::probabilistic::detail::CardinalityCounter::Unserialize((*v)[1]);
if ( ! cu ) if ( ! cu )
return false; return false;

View file

@ -14,10 +14,8 @@
namespace broker { class data; } namespace broker { class data; }
namespace probabilistic { ZEEK_FORWARD_DECLARE_NAMESPACED(BloomFilter, zeek, probabilistic);
class BloomFilter; ZEEK_FORWARD_DECLARE_NAMESPACED(CardinalityCounter, zeek, probabilistic, detail);
class CardinalityCounter;
}
namespace zeek { namespace zeek {
@ -306,7 +304,7 @@ private:
class BloomFilterVal : public OpaqueVal { class BloomFilterVal : public OpaqueVal {
public: public:
explicit BloomFilterVal(probabilistic::BloomFilter* bf); explicit BloomFilterVal(zeek::probabilistic::BloomFilter* bf);
~BloomFilterVal() override; ~BloomFilterVal() override;
ValPtr DoClone(CloneState* state) override; ValPtr DoClone(CloneState* state) override;
@ -337,13 +335,13 @@ private:
zeek::TypePtr type; zeek::TypePtr type;
zeek::detail::CompositeHash* hash; zeek::detail::CompositeHash* hash;
probabilistic::BloomFilter* bloom_filter; zeek::probabilistic::BloomFilter* bloom_filter;
}; };
class CardinalityVal : public OpaqueVal { class CardinalityVal : public OpaqueVal {
public: public:
explicit CardinalityVal(probabilistic::CardinalityCounter*); explicit CardinalityVal(zeek::probabilistic::detail::CardinalityCounter*);
~CardinalityVal() override; ~CardinalityVal() override;
ValPtr DoClone(CloneState* state) override; ValPtr DoClone(CloneState* state) override;
@ -355,7 +353,7 @@ public:
bool Typify(zeek::TypePtr type); bool Typify(zeek::TypePtr type);
probabilistic::CardinalityCounter* Get() { return c; }; zeek::probabilistic::detail::CardinalityCounter* Get() { return c; };
protected: protected:
CardinalityVal(); CardinalityVal();
@ -364,7 +362,7 @@ protected:
private: private:
zeek::TypePtr type; zeek::TypePtr type;
zeek::detail::CompositeHash* hash; zeek::detail::CompositeHash* hash;
probabilistic::CardinalityCounter* c; zeek::probabilistic::detail::CardinalityCounter* c;
}; };
class ParaglobVal : public OpaqueVal { class ParaglobVal : public OpaqueVal {

View file

@ -10,7 +10,7 @@
#include "digest.h" #include "digest.h"
using namespace probabilistic; namespace zeek::probabilistic::detail {
BitVector::size_type BitVector::npos = static_cast<BitVector::size_type>(-1); BitVector::size_type BitVector::npos = static_cast<BitVector::size_type>(-1);
BitVector::block_type BitVector::bits_per_block = BitVector::block_type BitVector::bits_per_block =
@ -263,8 +263,6 @@ BitVector& BitVector::operator-=(BitVector const& other)
return *this; return *this;
} }
namespace probabilistic {
BitVector operator&(BitVector const& x, BitVector const& y) BitVector operator&(BitVector const& x, BitVector const& y)
{ {
BitVector b(x); BitVector b(x);
@ -318,8 +316,6 @@ bool operator<(BitVector const& x, BitVector const& y)
return false; return false;
} }
}
void BitVector::Resize(size_type n, bool value) void BitVector::Resize(size_type n, bool value)
{ {
size_type old = Blocks(); size_type old = Blocks();
@ -581,3 +577,5 @@ BitVector::size_type BitVector::find_from(size_type i) const
return i * bits_per_block + lowest_bit(bits[i]); return i * bits_per_block + lowest_bit(bits[i]);
} }
} // namespace zeek::probabilistic::detail

View file

@ -10,7 +10,7 @@
namespace broker { class data; } namespace broker { class data; }
namespace probabilistic { namespace zeek::probabilistic::detail {
/** /**
* A vector of bits. * A vector of bits.
@ -356,4 +356,8 @@ private:
size_type num_bits; size_type num_bits;
}; };
} // namespace zeek::probabilistic::detail
namespace probabilistic {
using BitVector [[deprecated("Remove in v4.1. Use zeek::probabilistic::detail::BitVector.")]] = zeek::probabilistic::detail::BitVector;
} }

View file

@ -13,14 +13,14 @@
#include "../util.h" #include "../util.h"
#include "../Reporter.h" #include "../Reporter.h"
using namespace probabilistic; namespace zeek::probabilistic {
BloomFilter::BloomFilter() BloomFilter::BloomFilter()
{ {
hasher = nullptr; hasher = nullptr;
} }
BloomFilter::BloomFilter(const Hasher* arg_hasher) BloomFilter::BloomFilter(const detail::Hasher* arg_hasher)
{ {
hasher = arg_hasher; hasher = arg_hasher;
} }
@ -56,7 +56,7 @@ std::unique_ptr<BloomFilter> BloomFilter::Unserialize(const broker::data& data)
if ( ! type ) if ( ! type )
return nullptr; return nullptr;
auto hasher_ = Hasher::Unserialize((*v)[1]); auto hasher_ = detail::Hasher::Unserialize((*v)[1]);
if ( ! hasher_ ) if ( ! hasher_ )
return nullptr; return nullptr;
@ -130,7 +130,7 @@ BasicBloomFilter* BasicBloomFilter::Clone() const
BasicBloomFilter* copy = new BasicBloomFilter(); BasicBloomFilter* copy = new BasicBloomFilter();
copy->hasher = hasher->Clone(); copy->hasher = hasher->Clone();
copy->bits = new BitVector(*bits); copy->bits = new detail::BitVector(*bits);
return copy; return copy;
} }
@ -145,10 +145,10 @@ BasicBloomFilter::BasicBloomFilter()
bits = nullptr; bits = nullptr;
} }
BasicBloomFilter::BasicBloomFilter(const Hasher* hasher, size_t cells) BasicBloomFilter::BasicBloomFilter(const detail::Hasher* hasher, size_t cells)
: BloomFilter(hasher) : BloomFilter(hasher)
{ {
bits = new BitVector(cells); bits = new detail::BitVector(cells);
} }
BasicBloomFilter::~BasicBloomFilter() BasicBloomFilter::~BasicBloomFilter()
@ -158,7 +158,7 @@ BasicBloomFilter::~BasicBloomFilter()
void BasicBloomFilter::Add(const zeek::detail::HashKey* key) void BasicBloomFilter::Add(const zeek::detail::HashKey* key)
{ {
Hasher::digest_vector h = hasher->Hash(key); detail::Hasher::digest_vector h = hasher->Hash(key);
for ( size_t i = 0; i < h.size(); ++i ) for ( size_t i = 0; i < h.size(); ++i )
bits->Set(h[i] % bits->Size()); bits->Set(h[i] % bits->Size());
@ -166,7 +166,7 @@ void BasicBloomFilter::Add(const zeek::detail::HashKey* key)
size_t BasicBloomFilter::Count(const zeek::detail::HashKey* key) const size_t BasicBloomFilter::Count(const zeek::detail::HashKey* key) const
{ {
Hasher::digest_vector h = hasher->Hash(key); detail::Hasher::digest_vector h = hasher->Hash(key);
for ( size_t i = 0; i < h.size(); ++i ) for ( size_t i = 0; i < h.size(); ++i )
{ {
@ -185,7 +185,7 @@ broker::expected<broker::data> BasicBloomFilter::DoSerialize() const
bool BasicBloomFilter::DoUnserialize(const broker::data& data) bool BasicBloomFilter::DoUnserialize(const broker::data& data)
{ {
auto b = BitVector::Unserialize(data); auto b = detail::BitVector::Unserialize(data);
if ( ! b ) if ( ! b )
return false; return false;
@ -198,11 +198,11 @@ CountingBloomFilter::CountingBloomFilter()
cells = nullptr; cells = nullptr;
} }
CountingBloomFilter::CountingBloomFilter(const Hasher* hasher, CountingBloomFilter::CountingBloomFilter(const detail::Hasher* hasher,
size_t arg_cells, size_t width) size_t arg_cells, size_t width)
: BloomFilter(hasher) : BloomFilter(hasher)
{ {
cells = new CounterVector(width, arg_cells); cells = new detail::CounterVector(width, arg_cells);
} }
CountingBloomFilter::~CountingBloomFilter() CountingBloomFilter::~CountingBloomFilter()
@ -249,7 +249,7 @@ CountingBloomFilter* CountingBloomFilter::Clone() const
CountingBloomFilter* copy = new CountingBloomFilter(); CountingBloomFilter* copy = new CountingBloomFilter();
copy->hasher = hasher->Clone(); copy->hasher = hasher->Clone();
copy->cells = new CounterVector(*cells); copy->cells = new detail::CounterVector(*cells);
return copy; return copy;
} }
@ -262,7 +262,7 @@ std::string CountingBloomFilter::InternalState() const
// TODO: Use partitioning in add/count to allow for reusing CMS bounds. // TODO: Use partitioning in add/count to allow for reusing CMS bounds.
void CountingBloomFilter::Add(const zeek::detail::HashKey* key) void CountingBloomFilter::Add(const zeek::detail::HashKey* key)
{ {
Hasher::digest_vector h = hasher->Hash(key); detail::Hasher::digest_vector h = hasher->Hash(key);
for ( size_t i = 0; i < h.size(); ++i ) for ( size_t i = 0; i < h.size(); ++i )
cells->Increment(h[i] % cells->Size()); cells->Increment(h[i] % cells->Size());
@ -270,14 +270,14 @@ void CountingBloomFilter::Add(const zeek::detail::HashKey* key)
size_t CountingBloomFilter::Count(const zeek::detail::HashKey* key) const size_t CountingBloomFilter::Count(const zeek::detail::HashKey* key) const
{ {
Hasher::digest_vector h = hasher->Hash(key); detail::Hasher::digest_vector h = hasher->Hash(key);
CounterVector::size_type min = detail::CounterVector::size_type min =
std::numeric_limits<CounterVector::size_type>::max(); std::numeric_limits<detail::CounterVector::size_type>::max();
for ( size_t i = 0; i < h.size(); ++i ) for ( size_t i = 0; i < h.size(); ++i )
{ {
CounterVector::size_type cnt = cells->Count(h[i] % cells->Size()); detail::CounterVector::size_type cnt = cells->Count(h[i] % cells->Size());
if ( cnt < min ) if ( cnt < min )
min = cnt; min = cnt;
} }
@ -293,10 +293,12 @@ broker::expected<broker::data> CountingBloomFilter::DoSerialize() const
bool CountingBloomFilter::DoUnserialize(const broker::data& data) bool CountingBloomFilter::DoUnserialize(const broker::data& data)
{ {
auto c = CounterVector::Unserialize(data); auto c = detail::CounterVector::Unserialize(data);
if ( ! c ) if ( ! c )
return false; return false;
cells = c.release(); cells = c.release();
return true; return true;
} }
} // namespace zeek::probabilistic

View file

@ -2,6 +2,8 @@
#pragma once #pragma once
#include "zeek-config.h"
#include <memory> #include <memory>
#include <vector> #include <vector>
#include <string> #include <string>
@ -13,9 +15,9 @@
namespace broker { class data; } namespace broker { class data; }
namespace probabilistic { ZEEK_FORWARD_DECLARE_NAMESPACED(CounterVector, zeek, probabilistic, detail);
class CounterVector; namespace zeek::probabilistic {
/** Types of derived BloomFilter classes. */ /** Types of derived BloomFilter classes. */
enum BloomFilterType { Basic, Counting }; enum BloomFilterType { Basic, Counting };
@ -94,13 +96,13 @@ protected:
* *
* @param hasher The hasher to use for this Bloom filter. * @param hasher The hasher to use for this Bloom filter.
*/ */
explicit BloomFilter(const Hasher* hasher); explicit BloomFilter(const detail::Hasher* hasher);
virtual broker::expected<broker::data> DoSerialize() const = 0; virtual broker::expected<broker::data> DoSerialize() const = 0;
virtual bool DoUnserialize(const broker::data& data) = 0; virtual bool DoUnserialize(const broker::data& data) = 0;
virtual BloomFilterType Type() const = 0; virtual BloomFilterType Type() const = 0;
const Hasher* hasher; const detail::Hasher* hasher;
}; };
/** /**
@ -117,7 +119,7 @@ public:
* *
* @param cells The number of cells. * @param cells The number of cells.
*/ */
BasicBloomFilter(const Hasher* hasher, size_t cells); BasicBloomFilter(const detail::Hasher* hasher, size_t cells);
/** /**
* Destructor. * Destructor.
@ -176,7 +178,7 @@ protected:
{ return BloomFilterType::Basic; } { return BloomFilterType::Basic; }
private: private:
BitVector* bits; detail::BitVector* bits;
}; };
/** /**
@ -194,7 +196,7 @@ public:
* *
* @param width The maximal bit-width of counter values. * @param width The maximal bit-width of counter values.
*/ */
CountingBloomFilter(const Hasher* hasher, size_t cells, size_t width); CountingBloomFilter(const detail::Hasher* hasher, size_t cells, size_t width);
/** /**
* Destructor. * Destructor.
@ -225,7 +227,19 @@ protected:
{ return BloomFilterType::Counting; } { return BloomFilterType::Counting; }
private: private:
CounterVector* cells; detail::CounterVector* cells;
}; };
} } // namespace zeek::probabilistic
namespace probabilistic {
using BloomFilterType [[deprecated("Remove in v4.1. Use zeek::probabilistic::BloomFilterType.")]] = zeek::probabilistic::BloomFilterType;
constexpr auto Basic [[deprecated("Remove in v4.1. Use zeek::probabilistic::Basic.")]] = zeek::probabilistic::Basic;
constexpr auto Counting [[deprecated("Remove in v4.1. Use zeek::probabilistic::Counting.")]] = zeek::probabilistic::Counting;
using BloomFilter [[deprecated("Remove in v4.1. Use zeek::probabilistic::BloomFilter.")]] = zeek::probabilistic::BloomFilter;
using BasicBloomFilter [[deprecated("Remove in v4.1. Use zeek::probabilistic::BasicBloomFilter.")]] = zeek::probabilistic::BasicBloomFilter;
using CountingBloomFilter [[deprecated("Remove in v4.1. Use zeek::probabilistic::CountingBloomFilter.")]] = zeek::probabilistic::CountingBloomFilter;
} // namespace probabilistic

View file

@ -10,7 +10,7 @@
#include "Reporter.h" #include "Reporter.h"
using namespace probabilistic; namespace zeek::probabilistic::detail {
int CardinalityCounter::OptimalB(double error, double confidence) const int CardinalityCounter::OptimalB(double error, double confidence) const
{ {
@ -279,8 +279,7 @@ std::unique_ptr<CardinalityCounter> CardinalityCounter::Unserialize(const broker
/* /*
* Find Last Set bit * Find Last Set bit
*/ */
int int CardinalityCounter::flsll(uint64_t mask)
CardinalityCounter::flsll(uint64_t mask)
{ {
int bit; int bit;
@ -290,3 +289,5 @@ CardinalityCounter::flsll(uint64_t mask)
mask = (uint64_t)mask >> 1; mask = (uint64_t)mask >> 1;
return (bit); return (bit);
} }
} // namespace zeek::probabilistic::detail

View file

@ -11,7 +11,7 @@
namespace broker { class data; } namespace broker { class data; }
namespace probabilistic { namespace zeek::probabilistic::detail {
/** /**
* A probabilistic cardinality counter using the HyperLogLog algorithm. * A probabilistic cardinality counter using the HyperLogLog algorithm.
@ -186,4 +186,8 @@ private:
int p; // the log2 of m int p; // the log2 of m
}; };
} // namespace zeek::probabilistic::detail
namespace probabilistic {
using CardinalityCounter [[deprecated("Remove in v4.1. Use zeek::probabilistic::detail::CardinalityCounter.")]] = zeek::probabilistic::detail::CardinalityCounter;
} }

View file

@ -11,7 +11,7 @@
#include "BitVector.h" #include "BitVector.h"
#include "util.h" #include "util.h"
using namespace probabilistic; namespace zeek::probabilistic::detail {
CounterVector::CounterVector(size_t arg_width, size_t cells) CounterVector::CounterVector(size_t arg_width, size_t cells)
{ {
@ -143,8 +143,6 @@ CounterVector& CounterVector::Merge(const CounterVector& other)
return *this; return *this;
} }
namespace probabilistic {
CounterVector& CounterVector::operator|=(const CounterVector& other) CounterVector& CounterVector::operator|=(const CounterVector& other)
{ {
return Merge(other); return Merge(other);
@ -156,8 +154,6 @@ CounterVector operator|(const CounterVector& x, const CounterVector& y)
return cv |= y; return cv |= y;
} }
}
uint64_t CounterVector::Hash() const uint64_t CounterVector::Hash() const
{ {
return bits->Hash(); return bits->Hash();
@ -190,5 +186,4 @@ std::unique_ptr<CounterVector> CounterVector::Unserialize(const broker::data& da
return cv; return cv;
} }
} // namespace zeek::probabilistic::detail

View file

@ -2,6 +2,8 @@
#pragma once #pragma once
#include "zeek-config.h"
#include <cstddef> #include <cstddef>
#include <cstdint> #include <cstdint>
#include <memory> #include <memory>
@ -10,9 +12,9 @@
namespace broker { class data; } namespace broker { class data; }
namespace probabilistic { ZEEK_FORWARD_DECLARE_NAMESPACED(BitVector, zeek, probabilistic, detail);
class BitVector; namespace zeek::probabilistic::detail {
/** /**
* A vector of counters, each of which has a fixed number of bits. * A vector of counters, each of which has a fixed number of bits.
@ -154,4 +156,8 @@ private:
size_t width; size_t width;
}; };
} // namespace zeek::probabilistic::detail
namespace probabilistic {
using CounterVector [[deprecated("Remove in v4.1. Use zeek::probabilisitc::detail::CounterVector.")]] = zeek::probabilistic::detail::CounterVector;
} }

View file

@ -13,7 +13,7 @@
#include <broker/data.hh> #include <broker/data.hh>
using namespace probabilistic; namespace zeek::probabilistic::detail {
Hasher::seed_t Hasher::MakeSeed(const void* data, size_t size) Hasher::seed_t Hasher::MakeSeed(const void* data, size_t size)
{ {
@ -178,3 +178,5 @@ bool DoubleHasher::Equals(const Hasher* other) const
const DoubleHasher* o = static_cast<const DoubleHasher*>(other); const DoubleHasher* o = static_cast<const DoubleHasher*>(other);
return h1 == o->h1 && h2 == o->h2; return h1 == o->h1 && h2 == o->h2;
} }
} // namespace zeek::probabilistic::detail

View file

@ -10,7 +10,7 @@
namespace broker { class data; } namespace broker { class data; }
namespace probabilistic { namespace zeek::probabilistic::detail {
/** Types of derived Hasher classes. */ /** Types of derived Hasher classes. */
enum HasherType { Default, Double }; enum HasherType { Default, Double };
@ -257,4 +257,17 @@ private:
UHF h2; UHF h2;
}; };
} // namespace zeek::probabilistic::detail
namespace probabilistic {
using HasherType [[deprecated("Remove in v4.1. Use zeek::probabilistic::detail::HasherType.")]] = zeek::probabilistic::detail::HasherType;
constexpr auto Default [[deprecated("Remove in v4.1. Use zeek::probabilistic::detail::Default.")]] = zeek::probabilistic::detail::Default;
constexpr auto Double [[deprecated("Remove in v4.1. Use zeek::probabilistic::detail::Double.")]] = zeek::probabilistic::detail::Double;
using Hasher [[deprecated("Remove in v4.1. Use zeek::probabilistic::detail::Hasher.")]] = zeek::probabilistic::detail::Hasher;
using UHF [[deprecated("Remove in v4.1. Use zeek::probabilistic::detail::UHF.")]] = zeek::probabilistic::detail::UHF;
using DefaultHasher [[deprecated("Remove in v4.1. Use zeek::probabilistic::detail::DefaultHasher.")]] = zeek::probabilistic::detail::DefaultHasher;
using DoubleHasher [[deprecated("Remove in v4.1. Use zeek::probabilistic::detail::DoubleHasher.")]] = zeek::probabilistic::detail::DoubleHasher;
} }

View file

@ -9,7 +9,7 @@
#include "Reporter.h" #include "Reporter.h"
#include "Dict.h" #include "Dict.h"
namespace probabilistic { namespace zeek::probabilistic::detail {
static void topk_element_hash_delete_func(void* val) static void topk_element_hash_delete_func(void* val)
{ {
@ -519,4 +519,5 @@ bool TopkVal::DoUnserialize(const broker::data& data)
assert(i == numElements); assert(i == numElements);
return true; return true;
} }
}
} // namespace zeek::probabilistic::detail

View file

@ -11,7 +11,7 @@
ZEEK_FORWARD_DECLARE_NAMESPACED(CompositeHash, zeek::detail); ZEEK_FORWARD_DECLARE_NAMESPACED(CompositeHash, zeek::detail);
namespace probabilistic { namespace zeek::probabilistic::detail {
struct Element; struct Element;
@ -172,4 +172,10 @@ private:
bool pruned; // was this data structure pruned? bool pruned; // was this data structure pruned?
}; };
}; } // namespace zeek::probabilistic::detail
namespace probabilistic {
using Element [[deprecated("Remove in v4.1. Use zeek::probabilistic::detail::Element.")]] = zeek::probabilistic::detail::Element;
using Bucket [[deprecated("Remove in v4.1. Use zeek::probabilistic::detail::Bucket.")]] = zeek::probabilistic::detail::Bucket;
using TopkVal [[deprecated("Remove in v4.1. Use zeek::probabilistic::detail::TopkVal.")]] = zeek::probabilistic::detail::TopkVal;
}

View file

@ -40,13 +40,13 @@ function bloomfilter_basic_init%(fp: double, capacity: count,
return nullptr; return nullptr;
} }
size_t cells = BasicBloomFilter::M(fp, capacity); size_t cells = zeek::probabilistic::BasicBloomFilter::M(fp, capacity);
size_t optimal_k = BasicBloomFilter::K(cells, capacity); size_t optimal_k = zeek::probabilistic::BasicBloomFilter::K(cells, capacity);
Hasher::seed_t seed = Hasher::MakeSeed(name->Len() > 0 ? name->Bytes() : 0, zeek::probabilistic::detail::Hasher::seed_t seed =
name->Len()); zeek::probabilistic::detail::Hasher::MakeSeed(name->Len() > 0 ? name->Bytes() : 0, name->Len());
const Hasher* h = new DoubleHasher(optimal_k, seed); const zeek::probabilistic::detail::Hasher* h = new zeek::probabilistic::detail::DoubleHasher(optimal_k, seed);
return zeek::make_intrusive<zeek::BloomFilterVal>(new BasicBloomFilter(h, cells)); return zeek::make_intrusive<zeek::BloomFilterVal>(new zeek::probabilistic::BasicBloomFilter(h, cells));
%} %}
## Creates a basic Bloom filter. This function serves as a low-level ## Creates a basic Bloom filter. This function serves as a low-level
@ -82,11 +82,11 @@ function bloomfilter_basic_init2%(k: count, cells: count,
return nullptr; return nullptr;
} }
Hasher::seed_t seed = Hasher::MakeSeed(name->Len() > 0 ? name->Bytes() : 0, zeek::probabilistic::detail::Hasher::seed_t seed =
name->Len()); zeek::probabilistic::detail::Hasher::MakeSeed(name->Len() > 0 ? name->Bytes() : 0, name->Len());
const Hasher* h = new DoubleHasher(k, seed); const zeek::probabilistic::detail::Hasher* h = new zeek::probabilistic::detail::DoubleHasher(k, seed);
return zeek::make_intrusive<zeek::BloomFilterVal>(new BasicBloomFilter(h, cells)); return zeek::make_intrusive<zeek::BloomFilterVal>(new zeek::probabilistic::BasicBloomFilter(h, cells));
%} %}
## Creates a counting Bloom filter. ## Creates a counting Bloom filter.
@ -121,16 +121,16 @@ function bloomfilter_counting_init%(k: count, cells: count, max: count,
return nullptr; return nullptr;
} }
Hasher::seed_t seed = Hasher::MakeSeed(name->Len() > 0 ? name->Bytes() : 0, zeek::probabilistic::detail::Hasher::seed_t seed =
name->Len()); zeek::probabilistic::detail::Hasher::MakeSeed(name->Len() > 0 ? name->Bytes() : 0, name->Len());
const Hasher* h = new DefaultHasher(k, seed); const zeek::probabilistic::detail::Hasher* h = new zeek::probabilistic::detail::DefaultHasher(k, seed);
uint16_t width = 1; uint16_t width = 1;
while ( max >>= 1 ) while ( max >>= 1 )
++width; ++width;
return zeek::make_intrusive<zeek::BloomFilterVal>(new CountingBloomFilter(h, cells, width)); return zeek::make_intrusive<zeek::BloomFilterVal>(new zeek::probabilistic::CountingBloomFilter(h, cells, width));
%} %}
## Adds an element to a Bloom filter. ## Adds an element to a Bloom filter.
@ -144,7 +144,7 @@ function bloomfilter_counting_init%(k: count, cells: count, max: count,
## bloomfilter_merge ## bloomfilter_merge
function bloomfilter_add%(bf: opaque of bloomfilter, x: any%): any function bloomfilter_add%(bf: opaque of bloomfilter, x: any%): any
%{ %{
BloomFilterVal* bfv = static_cast<BloomFilterVal*>(bf); auto* bfv = static_cast<BloomFilterVal*>(bf);
if ( ! bfv->Type() && ! bfv->Typify(x->GetType()) ) if ( ! bfv->Type() && ! bfv->Typify(x->GetType()) )
reporter->Error("failed to set Bloom filter type"); reporter->Error("failed to set Bloom filter type");
@ -171,7 +171,7 @@ function bloomfilter_add%(bf: opaque of bloomfilter, x: any%): any
## bloomfilter_merge ## bloomfilter_merge
function bloomfilter_lookup%(bf: opaque of bloomfilter, x: any%): count function bloomfilter_lookup%(bf: opaque of bloomfilter, x: any%): count
%{ %{
const BloomFilterVal* bfv = static_cast<const BloomFilterVal*>(bf); const auto* bfv = static_cast<const BloomFilterVal*>(bf);
if ( ! bfv->Type() ) if ( ! bfv->Type() )
return zeek::val_mgr->Count(0); return zeek::val_mgr->Count(0);
@ -196,7 +196,7 @@ function bloomfilter_lookup%(bf: opaque of bloomfilter, x: any%): count
## bloomfilter_merge ## bloomfilter_merge
function bloomfilter_clear%(bf: opaque of bloomfilter%): any function bloomfilter_clear%(bf: opaque of bloomfilter%): any
%{ %{
BloomFilterVal* bfv = static_cast<BloomFilterVal*>(bf); auto* bfv = static_cast<BloomFilterVal*>(bf);
if ( bfv->Type() ) // Untyped Bloom filters are already empty. if ( bfv->Type() ) // Untyped Bloom filters are already empty.
bfv->Clear(); bfv->Clear();
@ -222,8 +222,8 @@ function bloomfilter_clear%(bf: opaque of bloomfilter%): any
function bloomfilter_merge%(bf1: opaque of bloomfilter, function bloomfilter_merge%(bf1: opaque of bloomfilter,
bf2: opaque of bloomfilter%): opaque of bloomfilter bf2: opaque of bloomfilter%): opaque of bloomfilter
%{ %{
const BloomFilterVal* bfv1 = static_cast<const BloomFilterVal*>(bf1); const auto* bfv1 = static_cast<const BloomFilterVal*>(bf1);
const BloomFilterVal* bfv2 = static_cast<const BloomFilterVal*>(bf2); const auto* bfv2 = static_cast<const BloomFilterVal*>(bf2);
if ( bfv1->Type() && // any one 0 is ok here if ( bfv1->Type() && // any one 0 is ok here
bfv2->Type() && bfv2->Type() &&
@ -244,6 +244,6 @@ function bloomfilter_merge%(bf1: opaque of bloomfilter,
## Returns: a string with a representation of a Bloom filter's internal state. ## Returns: a string with a representation of a Bloom filter's internal state.
function bloomfilter_internal_state%(bf: opaque of bloomfilter%): string function bloomfilter_internal_state%(bf: opaque of bloomfilter%): string
%{ %{
BloomFilterVal* bfv = static_cast<BloomFilterVal*>(bf); auto* bfv = static_cast<BloomFilterVal*>(bf);
return zeek::make_intrusive<zeek::StringVal>(bfv->InternalState()); return zeek::make_intrusive<zeek::StringVal>(bfv->InternalState());
%} %}

View file

@ -22,7 +22,7 @@ module GLOBAL;
## hll_cardinality_copy ## hll_cardinality_copy
function hll_cardinality_init%(err: double, confidence: double%): opaque of cardinality function hll_cardinality_init%(err: double, confidence: double%): opaque of cardinality
%{ %{
CardinalityCounter* c = new CardinalityCounter(err, confidence); auto* c = new zeek::probabilistic::detail::CardinalityCounter(err, confidence);
auto cv = zeek::make_intrusive<zeek::CardinalityVal>(c); auto cv = zeek::make_intrusive<zeek::CardinalityVal>(c);
return cv; return cv;
@ -40,7 +40,7 @@ function hll_cardinality_init%(err: double, confidence: double%): opaque of card
## hll_cardinality_init hll_cardinality_copy ## hll_cardinality_init hll_cardinality_copy
function hll_cardinality_add%(handle: opaque of cardinality, elem: any%): bool function hll_cardinality_add%(handle: opaque of cardinality, elem: any%): bool
%{ %{
CardinalityVal* cv = static_cast<CardinalityVal*>(handle); auto* cv = static_cast<CardinalityVal*>(handle);
if ( ! cv->Type() && ! cv->Typify(elem->GetType()) ) if ( ! cv->Type() && ! cv->Typify(elem->GetType()) )
{ {
@ -73,8 +73,8 @@ function hll_cardinality_add%(handle: opaque of cardinality, elem: any%): bool
## hll_cardinality_init hll_cardinality_copy ## hll_cardinality_init hll_cardinality_copy
function hll_cardinality_merge_into%(handle1: opaque of cardinality, handle2: opaque of cardinality%): bool function hll_cardinality_merge_into%(handle1: opaque of cardinality, handle2: opaque of cardinality%): bool
%{ %{
CardinalityVal* v1 = static_cast<CardinalityVal*>(handle1); auto* v1 = static_cast<CardinalityVal*>(handle1);
CardinalityVal* v2 = static_cast<CardinalityVal*>(handle2); auto* v2 = static_cast<CardinalityVal*>(handle2);
if ( (v1->Type() != v2->Type()) && // both 0 is ok if ( (v1->Type() != v2->Type()) && // both 0 is ok
(v1->Type() != nullptr) && // any one 0 also is ok (v1->Type() != nullptr) && // any one 0 also is ok
@ -85,8 +85,8 @@ function hll_cardinality_merge_into%(handle1: opaque of cardinality, handle2: op
return zeek::val_mgr->False(); return zeek::val_mgr->False();
} }
CardinalityCounter* h1 = v1->Get(); zeek::probabilistic::detail::CardinalityCounter* h1 = v1->Get();
CardinalityCounter* h2 = v2->Get(); zeek::probabilistic::detail::CardinalityCounter* h2 = v2->Get();
bool res = h1->Merge(h2); bool res = h1->Merge(h2);
if ( ! res ) if ( ! res )
@ -108,8 +108,8 @@ function hll_cardinality_merge_into%(handle1: opaque of cardinality, handle2: op
## hll_cardinality_init hll_cardinality_copy ## hll_cardinality_init hll_cardinality_copy
function hll_cardinality_estimate%(handle: opaque of cardinality%): double function hll_cardinality_estimate%(handle: opaque of cardinality%): double
%{ %{
CardinalityVal* cv = static_cast<CardinalityVal*>(handle); auto* cv = static_cast<CardinalityVal*>(handle);
CardinalityCounter* h = cv->Get(); zeek::probabilistic::detail::CardinalityCounter* h = cv->Get();
double estimate = h->Size(); double estimate = h->Size();
@ -126,9 +126,9 @@ function hll_cardinality_estimate%(handle: opaque of cardinality%): double
## hll_cardinality_init ## hll_cardinality_init
function hll_cardinality_copy%(handle: opaque of cardinality%): opaque of cardinality function hll_cardinality_copy%(handle: opaque of cardinality%): opaque of cardinality
%{ %{
CardinalityVal* cv = static_cast<CardinalityVal*>(handle); auto* cv = static_cast<CardinalityVal*>(handle);
CardinalityCounter* h = cv->Get(); zeek::probabilistic::detail::CardinalityCounter* h = cv->Get();
CardinalityCounter* h2 = new CardinalityCounter(*h); auto* h2 = new zeek::probabilistic::detail::CardinalityCounter(*h);
auto out = zeek::make_intrusive<zeek::CardinalityVal>(h2); auto out = zeek::make_intrusive<zeek::CardinalityVal>(h2);
return out; return out;

View file

@ -14,7 +14,7 @@
## topk_size topk_sum topk_merge topk_merge_prune ## topk_size topk_sum topk_merge topk_merge_prune
function topk_init%(size: count%): opaque of topk function topk_init%(size: count%): opaque of topk
%{ %{
auto v = zeek::make_intrusive<probabilistic::TopkVal>(size); auto v = zeek::make_intrusive<zeek::probabilistic::detail::TopkVal>(size);
return v; return v;
%} %}
@ -33,7 +33,7 @@ function topk_init%(size: count%): opaque of topk
function topk_add%(handle: opaque of topk, value: any%): any function topk_add%(handle: opaque of topk, value: any%): any
%{ %{
assert(handle); assert(handle);
probabilistic::TopkVal* h = (probabilistic::TopkVal*) handle; auto* h = (zeek::probabilistic::detail::TopkVal*) handle;
h->Encountered({zeek::NewRef{}, value}); h->Encountered({zeek::NewRef{}, value});
return nullptr; return nullptr;
@ -52,7 +52,7 @@ function topk_add%(handle: opaque of topk, value: any%): any
function topk_get_top%(handle: opaque of topk, k: count%): any_vec function topk_get_top%(handle: opaque of topk, k: count%): any_vec
%{ %{
assert(handle); assert(handle);
probabilistic::TopkVal* h = (probabilistic::TopkVal*) handle; auto* h = (zeek::probabilistic::detail::TopkVal*) handle;
return h->GetTopK(k); return h->GetTopK(k);
%} %}
@ -73,7 +73,7 @@ function topk_get_top%(handle: opaque of topk, k: count%): any_vec
function topk_count%(handle: opaque of topk, value: any%): count function topk_count%(handle: opaque of topk, value: any%): count
%{ %{
assert(handle); assert(handle);
probabilistic::TopkVal* h = (probabilistic::TopkVal*) handle; auto* h = (zeek::probabilistic::detail::TopkVal*) handle;
return zeek::val_mgr->Count(h->GetCount(value)); return zeek::val_mgr->Count(h->GetCount(value));
%} %}
@ -93,7 +93,7 @@ function topk_count%(handle: opaque of topk, value: any%): count
function topk_epsilon%(handle: opaque of topk, value: any%): count function topk_epsilon%(handle: opaque of topk, value: any%): count
%{ %{
assert(handle); assert(handle);
probabilistic::TopkVal* h = (probabilistic::TopkVal*) handle; auto* h = (zeek::probabilistic::detail::TopkVal*) handle;
return zeek::val_mgr->Count(h->GetEpsilon(value)); return zeek::val_mgr->Count(h->GetEpsilon(value));
%} %}
@ -112,7 +112,7 @@ function topk_epsilon%(handle: opaque of topk, value: any%): count
function topk_size%(handle: opaque of topk%): count function topk_size%(handle: opaque of topk%): count
%{ %{
assert(handle); assert(handle);
probabilistic::TopkVal* h = (probabilistic::TopkVal*) handle; auto* h = (zeek::probabilistic::detail::TopkVal*) handle;
return zeek::val_mgr->Count(h->GetSize()); return zeek::val_mgr->Count(h->GetSize());
%} %}
@ -132,7 +132,7 @@ function topk_size%(handle: opaque of topk%): count
function topk_sum%(handle: opaque of topk%): count function topk_sum%(handle: opaque of topk%): count
%{ %{
assert(handle); assert(handle);
probabilistic::TopkVal* h = (probabilistic::TopkVal*) handle; auto* h = (zeek::probabilistic::detail::TopkVal*) handle;
return zeek::val_mgr->Count(h->GetSum()); return zeek::val_mgr->Count(h->GetSum());
%} %}
@ -152,8 +152,8 @@ function topk_merge%(handle1: opaque of topk, handle2: opaque of topk%): any
assert(handle1); assert(handle1);
assert(handle2); assert(handle2);
probabilistic::TopkVal* h1 = (probabilistic::TopkVal*) handle1; auto* h1 = (zeek::probabilistic::detail::TopkVal*) handle1;
probabilistic::TopkVal* h2 = (probabilistic::TopkVal*) handle2; auto* h2 = (zeek::probabilistic::detail::TopkVal*) handle2;
h1->Merge(h2); h1->Merge(h2);
@ -178,8 +178,8 @@ function topk_merge_prune%(handle1: opaque of topk, handle2: opaque of topk%): a
assert(handle1); assert(handle1);
assert(handle2); assert(handle2);
probabilistic::TopkVal* h1 = (probabilistic::TopkVal*) handle1; auto* h1 = (zeek::probabilistic::detail::TopkVal*) handle1;
probabilistic::TopkVal* h2 = (probabilistic::TopkVal*) handle2; auto* h2 = (zeek::probabilistic::detail::TopkVal*) handle2;
h1->Merge(h2, true); h1->Merge(h2, true);