16#ifndef RANS_INTERNAL_METRICS_DICTSIZEESTIMATE_H_
17#define RANS_INTERNAL_METRICS_DICTSIZEESTIMATE_H_
22#include <fairlogger/Logger.h>
36 mScalingFactor =
utils::pow2(DefaultScalingBits) /
static_cast<double_t
>(numSamples);
40 [[nodiscard]]
inline size_t getIndexSize() const noexcept {
return mIndexSizeBits; };
41 [[nodiscard]]
inline size_t getFreqSize() const noexcept {
return mFreqSizeBits; };
45 [[nodiscard]]
inline size_t getSizeB(
size_t nNonzero,
size_t renormingBits)
const
47 using namespace utils;
49 assert(isValidRenormingPrecision(renormingBits));
50 const float_t rescalingFactor =
static_cast<float_t>(pow2(renormingBits)) / pow2(DefaultScalingBits);
52 return toBytes(
getIndexSize() + std::max(
static_cast<int64_t
>(nNonzero), freqRescaled));
57 mIndexSizeBits += computeEliasDeltaLength(delta);
61 assert(frequency > 0);
63 mFreqSizeBits += std::max(1u, computeEliasDeltaLength(scaledFrequency));
67 [[nodiscard]]
inline uint32_t computeEliasDeltaLength(uint32_t
x)
const noexcept
69 using namespace utils;
71 return symbolLengthBits(
x) + 2u * symbolLengthBits(symbolLengthBits(
x) + 1u) + 1u;
76 double_t mScalingFactor{1.0};
77 size_t mIndexSizeBits{};
78 size_t mFreqSizeBits{};
86 inline void update() noexcept { ++mDelta; };
87 inline void update(uint32_t frequency)
89 assert(frequency > 0);
98 DictSizeEstimate* mEstimate{};
common helper classes and functions
DictSizeEstimateCounter(DictSizeEstimate *estimate)
void update(uint32_t frequency)
size_t getFreqSizeB() const noexcept
void updateIndexSize(uint32_t delta)
size_t getFreqSize() const noexcept
size_t getSizeB(size_t nNonzero, size_t renormingBits) const
size_t getIndexSizeB() const noexcept
void updateFreqSize(uint32_t frequency)
DictSizeEstimate()=default
DictSizeEstimate(size_t numSamples)
size_t getIndexSize() const noexcept
constexpr size_t MaxRenormPrecisionBits
count_t roundSymbolFrequency(double_t rescaledFrequency)
constexpr float_t fastlog2(float_t x) noexcept
constexpr size_t pow2(size_t n) noexcept
constexpr size_t toBytes(size_t bits) noexcept
Common utility functions.