亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? aritcode.c

?? SPIHT 源代碼
?? C
字號:
// = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = =//            A R I T H M E T I C   C O D E   C L A S S E S// = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = =//         > > > >    C++ version 3.01  -  04/07/95    < < < <// Amir Said - amir@densis.fee.unicamp.br// University of Campinas (UNICAMP)// 13081 Campinas, SP, Brazil// C++ implementation of the arithmetic-coding algorithm by I.H. Witten,// R.M. Neal, and J.G. Cleary, published in ``Arithmetic coding for data// compression,'' {\em Commun. ACM}, vol.~30, pp.~520--540, June 1987.// - - Inclusion - - - - - - - - - - - - - - - - - - - - - - - - - - - -#include "aritcode.h"// - - Constants - - - - - - - - - - - - - - - - - - - - - - - - - - - -static const int CodeValueBits =    16;static const long TopValue     = 65535L;  // 2^CodeValueBits - 1static const long FirstQtr     = 16384L;  // (TopValue + 1) / 4static const long Half         = 32768L;  // 2 * FirstQtrstatic const long ThirdQtr     = 49152L;  // 3 * FirstQtrstatic const int MaxFrequency  = 16383;  //  2^14 - 1static const int MaxSymbols    =  1024;static char * R_MSG = "< Encoder > cannot read from file";static char * W_MSG = "< Decoder > cannot write to file";// = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = =//  Functions of the base class < Adaptive_Model >// = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = =// - - Private functions - - - - - - - - - - - - - - - - - - - - - - - -void Adaptive_Model::update(int index){ int i;  if (cum_f[0] == max_f) {    int cum = 0;    for (int j = nsb; j >= 0; j--) {      cum_f[j] = cum;  cum += (freq[j] = ((freq[j] + 1) / 2)); } }  for (int i = index; freq[i] == freq[i-1]; i--) ;  if (i < index) {    int sb_1 = indx_to_sb[i], sb_2 = indx_to_sb[index];    indx_to_sb[i] = sb_2;  indx_to_sb[index] = sb_1;    sb_to_indx[sb_1] = index;  sb_to_indx[sb_2] = i; }  freq[i]++;  while (i > 0) cum_f[--i]++;}// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -int Adaptive_Model::select_symbol(long value, long * l, long * h){ int index;  long lm1 = *l - 1, range = *h - lm1;  int cum = int(((value - lm1) * cum_f[0] - 1) / range);  for (int index = 1; cum_f[index] > cum; index++);  *h = lm1 + (range * cum_f[index-1]) / cum_f[0];  *l += (range * cum_f[index]) / cum_f[0];  int symbol = indx_to_sb[index];  update(index);  return symbol;}// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -void Adaptive_Model::new_interval(int symbol, long * l, long * h){  int index = sb_to_indx[symbol];  long lm1 = *l - 1, range = *h - lm1;  *h = lm1 + (range * cum_f[index-1]) / cum_f[0];  *l += (range * cum_f[index]) / cum_f[0];  update(index);}// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -// - - Public functions  - - - - - - - - - - - - - - - - - - - - - - - -void Adaptive_Model::set_symbols(int s){  if ((s < 2) || (s > MaxSymbols))    Error("invalid number of < Adaptive_Model > symbols");  if (s != nsb) {    nsb = s++;  max_f = Min(nsb << 5, MaxFrequency);    delete [] cum_f;    if ((cum_f = new int[s << 2]) == NULL)      Error("< Adaptive_Model > : insufficient memory");    freq = cum_f + s;  indx_to_sb = freq + s;    sb_to_indx = indx_to_sb + s; }  reset();}// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -void Adaptive_Model::reset(void){ int i;  if (nsb == 0) return;  for (int i = 0; i <= nsb; i++) {    freq[i] = 1;  cum_f[i] = nsb - i; }  freq[0] = 0;  for (i = 0; i < nsb; i++) {    sb_to_indx[i] = i + 1;  indx_to_sb[i+1] = i; }}// = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = =//  Functions of the class < Encoder >// = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = =// - - Private functions - - - - - - - - - - - - - - - - - - - - - - - -void Encoder::bit_plus_follow(int b){  bit_buffer >>= 1;  if (b) bit_buffer |= 0x80;  if (!(--bit_index)) {    byte_counter++;  bit_index = 8;    if (putc(bit_buffer, out_file) == EOF) Error(W_MSG); }  while (bits_to_follow > 0) {    bits_to_follow--;  bit_buffer >>= 1;    if (!b) bit_buffer |= 0x80;    if (!(--bit_index)) {      byte_counter++;  bit_index = 8;      if (putc(bit_buffer, out_file) == EOF) Error(W_MSG); } }}// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -void Encoder::update_interval(void){  ++symbol_counter;  for (;;) {    if (high < Half)      bit_plus_follow(0);    else      if (low >= Half) {        bit_plus_follow(1);  low -= Half;  high -= Half; }      else        if ((low >= FirstQtr) && (high < ThirdQtr)) {          bits_to_follow++;  low -= FirstQtr;  high -= FirstQtr; }        else          break;    low <<= 1;  high += high + 1; }}// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -void Encoder::reset(char * file_name){  if (!closed) Error("< Encoder > file already open");  out_file = (temp ? tmpfile() : fopen(file_name, "wb"));  if (out_file == NULL) Error(W_MSG);  symbol_counter = low = bits_to_follow = bit_buffer = closed = 0;    bit_index = 8;  high = TopValue;}// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -void Encoder::stop(void){  if (closed) Error("< Encoder > file already closed");  bits_to_follow++;  bit_plus_follow(low >= FirstQtr);  if (putc(bit_buffer >> bit_index, out_file) == EOF) Error(W_MSG);  byte_counter++;  closed = 1;}// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -// - - Public functions  - - - - - - - - - - - - - - - - - - - - - - - -void Encoder::open_file(void){  temp = 1;  reset(NULL);  byte_counter = 5;}// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -void Encoder::open_file(char * file_name){  temp = 0;  reset(file_name);  byte_counter = 1;  if (putc(0x6F, out_file) == EOF) Error(W_MSG);}// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -void Encoder::close_file(char * file_name){  if (!temp) Error("< Encoder > invalid close file function");  stop();// copy from temporary file to output file  FILE * new_file = fopen(file_name, "wb");  if (new_file == NULL) Error(W_MSG);  unsigned char buff[256];  long ns = symbol_counter;  buff[0] = 0x53;  for (int i = 4; i >= 1; i--) {    buff[i] = (unsigned char) (ns & 0xFF);  ns >>= 8; }  if (fwrite((char *) buff, sizeof(char), 5, new_file) != 5)     Error(W_MSG);  if (fflush(new_file)) Error(W_MSG);  rewind(out_file);  int nbs;  do {    nbs = fread((char *) buff, sizeof(char), 256, out_file);    if (nbs == 0) break;    if (fwrite((char *) buff, sizeof(char), nbs, new_file) != nbs)      Error(W_MSG);  } while (nbs == 256);  if ((fclose(new_file) == EOF) || (fclose(out_file) == EOF))    Error(W_MSG);}// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -void Encoder::close_file(void){  if (temp)    Error("< Encoder > invalid command to close file");  stop();  if (fclose(out_file) == EOF) Error(W_MSG);}// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -void Encoder::code_symbol(int s, Adaptive_Model & model){  model.new_interval(s, &low, &high);  update_interval();}// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -void Encoder::code_bits(int bits, int word){  long lm1 = low - 1, range = high - lm1;  word &= (1 << bits) - 1;  high = lm1 + ((range * (word + 1)) >> bits);  low += (range * word) >> bits;  update_interval();}// = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = =//  Functions of the class < Decoder >// = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = =// - - Private functions - - - - - - - - - - - - - - - - - - - - - - - -void Decoder::input_byte(void){  if ((bit_buffer = getc(in_file)) == EOF)    if (++extra_bits > CodeValueBits - 2)      Error("< Decoder > end of file reached");  bit_index = 8;  ++byte_counter;}// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -void Decoder::update_interval(void){  if (++symbol_counter >= mss_symbols)    close_file();  else    for (;;) {      if (high >= Half)        if (low >= Half) {          value -= Half;  low -= Half;  high -= Half; }        else          if ((low >= FirstQtr) && (high < ThirdQtr)) {            value -= FirstQtr;  low -= FirstQtr;  high -= FirstQtr; }          else            break;      low <<= 1;  high += high + 1;  value <<= 1;      if (!bit_index) input_byte();      if (bit_buffer & 1) value++;      bit_buffer >>= 1;  bit_index--; }}// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -// - - Public functions  - - - - - - - - - - - - - - - - - - - - - - - -void Decoder::open_file(char * file_name){  if (!closed) Error("< Decoder > file already open");  if ((in_file = fopen(file_name, "rb")) == NULL) Error(R_MSG);  byte_counter = 1;  symbol_counter = 0;  int i, magic_char = getc(in_file);  if (magic_char == 0x6F) {    ext_stop = 1;  mss_symbols = 0x1000000L; }  else    if (magic_char == 0x53) {      ext_stop = 0;  byte_counter += 4;      unsigned char buff[4];      if (fread((char *) buff, sizeof(char), 4, in_file) != 4)        Error(R_MSG);      for (mss_symbols = i = 0; i < 4; i++)        mss_symbols = (mss_symbols << 8) + long(buff[i]); }    else      Error("invalid < Decoder > file");  high = TopValue;  value = low = bit_index = extra_bits = closed = 0;  for (i = 0; i < CodeValueBits; i++) {    if (!bit_index) input_byte();    value += value + (bit_buffer & 1);    bit_buffer >>= 1;  bit_index--; }}// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -void Decoder::close_file(void){  if (closed) Error("< Decoder > file already closed");  fclose(in_file);  closed = 1;  mss_symbols = 0;}// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -int Decoder::decode_symbol(Adaptive_Model & model){  int symbol = model.select_symbol(value, &low, &high);  update_interval();  return symbol;}// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -int Decoder::decode_bits(int bits){  long lm1 = low - 1, range = high - lm1;  int word = int((((value - lm1) << bits) - 1) / range);  long prod = word * range;  high = lm1 + ((prod + range) >> bits);  low += prod >> bits;  update_interval();  return word;}// = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = =// end of file < AritCode.C >

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
日韩国产精品久久久久久亚洲| 91视频.com| 91美女视频网站| 精品国产1区二区| 亚洲国产另类av| 丰满亚洲少妇av| 日韩欧美亚洲另类制服综合在线| 专区另类欧美日韩| 国产精品一区在线观看乱码| 欧美日韩一级视频| 国产精品国产三级国产aⅴ入口| 日韩av一区二区在线影视| hitomi一区二区三区精品| 欧美va亚洲va| 青椒成人免费视频| 欧美精品欧美精品系列| 一区二区不卡在线视频 午夜欧美不卡在| 国产米奇在线777精品观看| 91精品国产手机| 亚洲综合区在线| 色久优优欧美色久优优| 国产精品免费视频网站| 粉嫩13p一区二区三区| 26uuu另类欧美| 九九**精品视频免费播放| 欧美一区二区三级| 五月婷婷激情综合| 欧美无乱码久久久免费午夜一区| 日韩美女视频一区二区 | 亚洲国产综合91精品麻豆| 91原创在线视频| 国产精品福利一区二区三区| 成人精品国产一区二区4080| 国产精品免费丝袜| 99久久精品久久久久久清纯| 1024精品合集| 91在线观看一区二区| 国产精品成人在线观看| 91影视在线播放| 亚洲人成精品久久久久| 91久久香蕉国产日韩欧美9色| 亚洲精品欧美综合四区| 欧美日韩亚洲综合在线 | 欧美午夜精品一区二区三区| 一区二区三区高清在线| 在线视频国内一区二区| 亚洲成人综合在线| 日韩亚洲欧美成人一区| 国产成人免费视频| 综合久久久久久| 欧美精品电影在线播放| 精品一区二区久久久| 国产精品国产三级国产aⅴ入口| 日本精品视频一区二区| 久久精品噜噜噜成人88aⅴ| 国产欧美日韩精品一区| 91黄色在线观看| 久久99热这里只有精品| 国产精品人妖ts系列视频| 91精彩视频在线| 国产资源在线一区| 亚洲黄色在线视频| 精品日产卡一卡二卡麻豆| 高清beeg欧美| 丝袜诱惑亚洲看片| 国产视频不卡一区| 在线观看视频一区| 国产一区二区三区观看| 亚洲一区二区三区不卡国产欧美| 日韩欧美www| 91麻豆swag| 国内成+人亚洲+欧美+综合在线| 国产精品国产馆在线真实露脸 | 中文子幕无线码一区tr| 欧美日韩精品综合在线| 国产91在线观看丝袜| 无吗不卡中文字幕| 中文字幕一区二区三区在线播放| 777欧美精品| voyeur盗摄精品| 精品一区二区在线观看| 一区二区三区四区视频精品免费 | 欧美日韩小视频| 国产一区二区不卡老阿姨| 午夜一区二区三区在线观看| 国产日韩精品一区二区浪潮av| 欧美老女人第四色| 在线精品视频免费观看| 国产高清久久久久| 蜜臀av一区二区三区| 亚洲妇女屁股眼交7| 中文字幕在线不卡视频| 久久久亚洲高清| 日韩午夜av电影| 欧美人妇做爰xxxⅹ性高电影| 国产91高潮流白浆在线麻豆| 亚洲va在线va天堂| 亚洲卡通动漫在线| 亚洲欧美综合网| 国产日韩av一区| 久久午夜电影网| 精品国产三级a在线观看| 欧美区视频在线观看| 色综合久久久网| 不卡的av电影在线观看| 成人精品国产福利| 成人精品gif动图一区| 欧美午夜免费电影| 91啪亚洲精品| 色综合欧美在线视频区| av亚洲精华国产精华| av激情综合网| 99re在线精品| 色8久久人人97超碰香蕉987| 91麻豆国产福利精品| 色婷婷国产精品久久包臀| 日本高清不卡视频| 日本道免费精品一区二区三区| 欧美在线视频不卡| 欧美精品电影在线播放| 日韩一区二区三区在线视频| 日韩三级伦理片妻子的秘密按摩| 在线成人小视频| 精品国产乱码久久久久久免费 | 国产一区二区精品久久99| 精一区二区三区| 国产成人免费9x9x人网站视频| 成人毛片老司机大片| 99re8在线精品视频免费播放| 日本韩国精品在线| 欧美夫妻性生活| 久久免费午夜影院| 亚洲人成网站在线| 丝袜美腿亚洲综合| 国产最新精品精品你懂的| 国产成人亚洲综合a∨婷婷 | 亚洲777理论| 免费高清在线视频一区·| 国产精品一区一区| 色综合中文综合网| 韩国一区二区三区| av激情综合网| 7799精品视频| 国产精品麻豆视频| 亚洲一区二区欧美日韩| 久久精品国产精品亚洲红杏| 成人免费视频网站在线观看| 欧美日韩亚洲另类| 欧美国产精品专区| 午夜天堂影视香蕉久久| 国产一区二区在线影院| 日本韩国欧美一区二区三区| 精品国产凹凸成av人导航| 亚洲色图清纯唯美| 精品亚洲免费视频| 99国产精品久久久久| 精品久久久久99| 亚洲愉拍自拍另类高清精品| 国内精品视频666| 欧美性生活影院| 中文字幕一区二区三区四区不卡 | 色一情一伦一子一伦一区| 欧美一卡二卡在线| 亚洲图片另类小说| 国产老肥熟一区二区三区| 欧美视频三区在线播放| 国产精品成人免费在线| 国内精品国产成人国产三级粉色| 欧美四级电影在线观看| 中文字幕一区在线观看视频| 青青草国产成人99久久| 欧美中文一区二区三区| 国产精品乱码久久久久久| 久久精品av麻豆的观看方式| 欧美色视频一区| 最新高清无码专区| 国产成人精品一区二| 欧美国产一区视频在线观看| 久久99精品网久久| 91精品国产综合久久蜜臀| 亚洲一区二区精品视频| gogo大胆日本视频一区| 国产精品麻豆网站| 国产成人精品1024| 欧美mv日韩mv国产网站| 日本不卡一二三| 91精品在线观看入口| 天天av天天翘天天综合网色鬼国产 | 久久久99久久精品欧美| 理论片日本一区| 91精品综合久久久久久| 亚洲成人资源在线| 欧美图区在线视频| 一区二区欧美视频| 欧美午夜精品一区二区蜜桃| 亚洲一区二区三区四区的| 91福利在线观看| 亚洲成人自拍偷拍| 日韩一区二区三区在线观看| 奇米综合一区二区三区精品视频 |