123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051 |
- /* NOLINT(build/header_guard) */
- /* Copyright 2013 Google Inc. All Rights Reserved.
- Distributed under MIT license.
- See file LICENSE for detail or copy at https://opensource.org/licenses/MIT
- */
- /* template parameters: Histogram, DATA_SIZE, DataType */
- /* A simple container for histograms of data in blocks. */
- 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; }
|