tor-browser

The Tor Browser
git clone https://git.dasho.dev/tor-browser.git
Log | Files | Refs | README | LICENSE

histogram_inc.h (1401B)


      1 /* NOLINT(build/header_guard) */
      2 /* Copyright 2013 Google Inc. All Rights Reserved.
      3 
      4   Distributed under MIT license.
      5   See file LICENSE for detail or copy at https://opensource.org/licenses/MIT
      6 */
      7 
      8 /* template parameters: Histogram, DATA_SIZE, DataType */
      9 
     10 /* A simple container for histograms of data in blocks. */
     11 
     12 typedef struct FN(Histogram) {
     13  uint32_t data_[DATA_SIZE];
     14  size_t total_count_;
     15  double bit_cost_;
     16 } FN(Histogram);
     17 
     18 static BROTLI_INLINE void FN(HistogramClear)(FN(Histogram)* self) {
     19  memset(self->data_, 0, sizeof(self->data_));
     20  self->total_count_ = 0;
     21  self->bit_cost_ = HUGE_VAL;
     22 }
     23 
     24 static BROTLI_INLINE void FN(ClearHistograms)(
     25    FN(Histogram)* array, size_t length) {
     26  size_t i;
     27  for (i = 0; i < length; ++i) FN(HistogramClear)(array + i);
     28 }
     29 
     30 static BROTLI_INLINE void FN(HistogramAdd)(FN(Histogram)* self, size_t val) {
     31  ++self->data_[val];
     32  ++self->total_count_;
     33 }
     34 
     35 static BROTLI_INLINE void FN(HistogramAddVector)(FN(Histogram)* self,
     36    const DataType* p, size_t n) {
     37  self->total_count_ += n;
     38  n += 1;
     39  while (--n) ++self->data_[*p++];
     40 }
     41 
     42 static BROTLI_INLINE void FN(HistogramAddHistogram)(FN(Histogram)* self,
     43    const FN(Histogram)* v) {
     44  size_t i;
     45  self->total_count_ += v->total_count_;
     46  for (i = 0; i < DATA_SIZE; ++i) {
     47    self->data_[i] += v->data_[i];
     48  }
     49 }
     50 
     51 static BROTLI_INLINE size_t FN(HistogramDataSize)(void) { return DATA_SIZE; }