8#include "Stroika/Foundation/Execution/Exceptions.h" 
    9#include "Stroika/Foundation/Math/Common.h" 
   19    inline double BloomFilter<T>::Statistics::GetFractionFull ()
 const 
   21        return static_cast<double> (fBitsSet) / 
static_cast<double> (fBitCount);
 
   24    inline double BloomFilter<T>::Statistics::ProbabilityOfFalsePositive ()
 const 
   29    Characters::String BloomFilter<T>::Statistics::ToString ()
 const 
   31        Characters::StringBuilder sb;
 
   33        sb << 
"HashFunctions: "sv << fHashFunctions;
 
   34        sb << 
", BitCount: "sv << fBitCount;
 
   35        sb << 
", BitsSet: "sv << fBitsSet;
 
   36        sb << 
", ActualAddCalls: "sv << fActualAddCalls;
 
   37        sb << 
", ApparentlyDistinctAddCalls: "sv << fApparentlyDistinctAddCalls;
 
   38        sb << 
", ProbabilityOfFalsePositive: "sv << ProbabilityOfFalsePositive ();
 
   52        Require (fHashFunctions_.size () >= 1);
 
 
   65    inline unsigned int BloomFilter<T>::OptimizeBitSize (
size_t nElements, 
double desiredFalsePositiveProbability)
 
   71    inline unsigned int BloomFilter<T>::OptimizeNumberOfHashFunctions (
size_t setSize, 
size_t bitSize)
 
  108            result += [=] (
const T& 
t) { 
return Cryptography::Digest::HashValueCombine (h (
t), 
seed); };
 
 
  112    template <
typename T>
 
  115        size_t sz{fBits_.size ()};
 
  118            size_t idx = 
static_cast<size_t> (f (
elt) % 
sz);
 
  126            ++fApparentlyDistinctAddCalls_;
 
 
  130    template <
typename T>
 
  135    template <
typename T>
 
  138        size_t sz{fBits_.size ()};
 
 
  146    template <
typename T>
 
  150        for (
bool i : fBits_) {
 
  155        return Statistics{fHashFunctions_.size (), fBits_.size (), 
nTrue, fActualAddCalls_, fApparentlyDistinctAddCalls_};
 
a Bloom filter is a probablistic set, which returns either "probably in set" or "definitely not in se...
BloomFilter(const Containers::Sequence< HashFunctionType > &hashFunctions, size_t bitCount)
nonvirtual bool ProbablyContains(Common::ArgByValueType< T > elt) const
returns true if this (probably) Contains 'elt' - and false otherwise.
nonvirtual bool Add(Common::ArgByValueType< T > elt)
static double ProbabilityOfFalsePositive(size_t hashFunctionCount, size_t bitCount, size_t nElementsInsertedSoFar)
static Containers::Sequence< HashFunctionType > DeriveIndependentHashFunctions(const HashFunctionType &h, size_t repeatCount)
function< HashResultType(T)> HashFunctionType
LRUCache implements a simple least-recently-used caching strategy, with optional hashing (of keys) to...
A generalization of a vector: a container whose elements are keyed by the natural numbers.
conditional_t<(sizeof(CHECK_T)<=2 *sizeof(void *)) and is_trivially_copyable_v< CHECK_T >, CHECK_T, const CHECK_T & > ArgByValueType
This is an alias for 'T' - but how we want to pass it on stack as formal parameter.
Simple wrapper on (cryptographic) digest algorithms with fewer knobs, and easier construcion- mimicin...