shithub: opus

ref: c9d606f5173b2551e71e5f2ac25b087a43e8db0b
dir: /libcelt/bitrdec.c/

View raw version
#ifdef HAVE_CONFIG_H
#include "config.h"
#endif

#include "bitree.h"

int ec_bitree_find_and_update(unsigned *_this,int _sz,int _split,
 unsigned _freq,unsigned *_fl,int _val){
  int base;
  int test;
  int fl;
  base=-1;
  fl=0;
  while(_split>0){
    test=base+_split;
    if(test<_sz){
      if(_freq>=_this[test]){
        _freq-=_this[test];
        fl+=_this[test];
        base=test;
      }
      else _this[test]+=_val;
    }
    _split>>=1;
  }
  *_fl=fl;
  return base+1;
}