⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 intcoding.cc

📁 VC小波算法1,高效率VC小波算法1
💻 CC
字号:
// Copyright 1996 John M. Danskin 7/30/96//// Permission is granted to use this software for any purpose as// long as this notice stays attached to this software.///*---------------------------------------------------------------------------*/#include <assert.h>#include <iostream.h>#include <iomanip.h>#include "BitIO.h"#include "IntCoding.hh"/*---------------------------------------------------------------------------*/#define PrintBits 0/*---------------------------------------------------------------------------*/#if PrintBits#define PB(x) cerr << (x);#define PNL   cerr << "\n";#define PCol  cerr << ":";#else#define PB(x)#define PNL#define PCol#endif#define PRINTCALLS 0/*---------------------------------------------------------------------------*/void CdeltaEncode::EncodePositive(int i){  int digits;  assert(i > 0 && i < (1 << 30));  #if PRINTCALLS  cerr << "CdeltaEncode::EncodePositive(" << i << ")\n";#endif    for (digits = 30; digits > 0; digits--) {    if (i >= (1 << digits)) {      PB(0);	          output->output_bit(0);    }  }  PB(1);  output->output_bit(1);  PCol;  for (digits = 29; digits >= 0; digits--) {    if (i >= (2 << digits)) {      if (i & (1 << digits)) {	PB(1);			output->output_bit(1);      } else {	PB(0);	output->output_bit(0);      }    }  }  PNL;}/*---------------------------------------------------------------------------*/void CdeltaEncode::EncodeNonNegative(int i){#if PRINTCALLS  cerr << "CdeltaEncode::EncodeNonNegative(" << i << ")\n";#endif  EncodePositive(i + 1);}/*---------------------------------------------------------------------------*/void CdeltaEncode::Encode(int i){#if PRINTCALLS  cerr << "CdeltaEncode::Encode(" << i << ")\n";#endif  if (i < 0) {    output->output_bit(1);    EncodePositive(-i);  } else {    output->output_bit(0);    EncodeNonNegative(i);  }}/*---------------------------------------------------------------------------*/int CdeltaDecode::DecodePositive(void){  int digits = 0;  int value = 1;    while(input->input_bit() == 0) {    PB(0);    digits++;  }  PB(1);  PCol;  for (int i = 0; i < digits; i++) {    value = 2 * value + input->input_bit();    PB(value & 1);  }  PNL;  #if PRINTCALLS  cerr << "CdeltaDecode::DecodePositive()->" << value << "\n";#endif    return value;}/*---------------------------------------------------------------------------*/int CdeltaDecode::DecodeNonNegative(void){  int value = DecodePositive() - 1;#if PRINTCALLS  cerr << "CdeltaDecode::DecodeNonNegative()->" << value << "\n";#endif  return value;}/*---------------------------------------------------------------------------*/int CdeltaDecode::Decode(void){  int value;  if (input->input_bit()) {    value =  -DecodePositive();  } else {    value =  DecodeNonNegative();  }#if PRINTCALLS  cerr << "CdeltaDecode::Decode()->" << value << "\n";#endif  return value;}/*---------------------------------------------------------------------------*/#ifdef UNIT_TESTvoid aout(void *c, void *data, int n){  BitIn *bi = new BitIn((unsigned char *)data, n);  CdeltaDecode *cde = new CdeltaDecode(bi);  int i = cde->DecodePositive();  cout << "count = " << i << "\n";  for (int j = 0; j < i; j++) {    cout << cde->Decode() << "\n";  }}/*---------------------------------------------------------------------------*/void main(){  int i;  FILTER *f = new FILTER(0, (FilterOutput *)aout);  BitOut *bo = new BitOut(f);  CdeltaEncode *cde = new CdeltaEncode(bo);    cde->EncodePositive(11);  for (i = -5; i <= 5; i++) {    cde->Encode(i);  }  bo->flush();}#endif/*---------------------------------------------------------------------------*/

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -