typedef
struct
FN(Histogram) {
uint32_t data_[DATA_SIZE];
size_t
total_count_;
double
bit_cost_;
} FN(Histogram);
static
BROTLI_INLINE
void
FN(HistogramClear)(FN(Histogram)* self) {
memset
(self->data_, 0,
sizeof
(self->data_));
self->total_count_ = 0;
self->bit_cost_ = HUGE_VAL;
}
static
BROTLI_INLINE
void
FN(ClearHistograms)(
FN(Histogram)* array,
size_t
length) {
size_t
i;
for
(i = 0; i < length; ++i) FN(HistogramClear)(array + i);
}
static
BROTLI_INLINE
void
FN(HistogramAdd)(FN(Histogram)* self,
size_t
val) {
++self->data_[val];
++self->total_count_;
}
static
BROTLI_INLINE
void
FN(HistogramAddVector)(FN(Histogram)* self,
const
DataType* p,
size_t
n) {
self->total_count_ += n;
n += 1;
while
(--n) ++self->data_[*p++];
}
static
BROTLI_INLINE
void
FN(HistogramAddHistogram)(FN(Histogram)* self,
const
FN(Histogram)* v) {
size_t
i;
self->total_count_ += v->total_count_;
for
(i = 0; i < DATA_SIZE; ++i) {
self->data_[i] += v->data_[i];
}
}
static
BROTLI_INLINE
size_t
FN(HistogramDataSize)(
void
) {
return
DATA_SIZE; }