96 [[nodiscard]]
double advance(
double raw, std::int64_t frame)
noexcept
99 for (
int i = 0; i < 4; ++i)
101 const double incoming = value;
102 value =
advanceBoxAverage(incoming, boxes_[i][indices_[i]], sums_[i], inverse_[i]);
103 boxes_[i][indices_[i]] = incoming;
104 if (++indices_[i] == filter_.lengths_[i])
107 zeroRun_ = raw == 0 ? std::min(zeroRun_ + 1,
static_cast<int>(filter_.span_ + 1)) : 0;
109 boxesCleared_ =
false;
110 if (zeroRun_ > filter_.span_)
118 std::fill_n(storage_.get(),
static_cast<std::size_t
>(filter_.span_ + 4), 0.0);
119 boxesCleared_ =
true;
122 if ((frame & 4095) == 4095)
124 for (
int i = 0; i < 4; ++i)
127 for (
int k = 0; k < filter_.lengths_[i]; ++k)
128 sums_[i] += boxes_[i][k];
130 value = sums_[3] * inverse_[3];