mirror of
https://github.com/zeek/zeek.git
synced 2025-10-04 15:48:19 +00:00
Move probabilistic code into zeek namespaces
This commit is contained in:
parent
be92bd536f
commit
f310795d79
17 changed files with 162 additions and 118 deletions
|
@ -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;
|
||||||
|
|
||||||
|
|
|
@ -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 {
|
||||||
|
|
|
@ -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
|
||||||
|
|
|
@ -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;
|
||||||
}
|
}
|
||||||
|
|
|
@ -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
|
||||||
|
|
|
@ -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
|
||||||
|
|
|
@ -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,9 +279,8 @@ 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;
|
||||||
|
|
||||||
if (mask == 0)
|
if (mask == 0)
|
||||||
|
@ -289,4 +288,6 @@ CardinalityCounter::flsll(uint64_t mask)
|
||||||
for (bit = 1; mask != 1; bit++)
|
for (bit = 1; mask != 1; bit++)
|
||||||
mask = (uint64_t)mask >> 1;
|
mask = (uint64_t)mask >> 1;
|
||||||
return (bit);
|
return (bit);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
} // namespace zeek::probabilistic::detail
|
||||||
|
|
|
@ -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;
|
||||||
}
|
}
|
||||||
|
|
|
@ -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
|
||||||
|
|
||||||
|
|
|
@ -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;
|
||||||
}
|
}
|
||||||
|
|
|
@ -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
|
||||||
|
|
|
@ -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;
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -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
|
||||||
|
|
|
@ -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;
|
||||||
|
}
|
||||||
|
|
|
@ -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());
|
||||||
%}
|
%}
|
||||||
|
|
|
@ -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;
|
||||||
|
|
|
@ -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);
|
||||||
|
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue