Edit

kc3-lang/brotli/c/enc/histogram_inc.h

Branch :

  • Show log

    Commit

  • Author : Eugene Kliuchnikov
    Date : 2017-04-23 14:07:08
    Hash : 6ece1d87
    Message : Move files & update paths (#541) * Move files & update paths * Rename build to scripts. * Fix paths * Fix script.

  • c/enc/histogram_inc.h
  • /* 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; }