コード例 #1
0
ファイル: test_decode.c プロジェクト: anjos/arithmetic_coding
int main (int argc, char** argv)
{
  bound_t* limit; /* limites globais */
  cdf_t* dict;   /* o dicionario com simbolos */
  FILE* msg; /* o arquivo com a mensagem codificada */
  FILE* dmsg; /* o arquivo com a mensagem decodificada */
  fifo_t* coded; /* a mensagem codificada */
  unsigned long buff; /* caracter decodificado */
  clock_t start, end; /* cronometro */
  double cpu_time_used;
  unsigned long lsize; /* um contador */

#ifdef DEBUGGING
  mtrace();
#endif

  if (argc != 3) {
    fprintf(stderr, "uso: %s <dicionario> <arquivo-codificada>\n", argv[0]);
    exit(1);
  }

  /* carrega dicionario */
  dict = cdf_load(argv[1]);

  /* inicializa limites */
  limit = init_bound(); /* ajusta limites para 0 e 1 */
  cdf_min_ulimit(dict,limit); /* ajusta limite */

  /* inicializa fifo com a mensagem a ser decodificada */
  coded = init_fifo();
  if ( (msg = fopen(argv[2],"r")) == NULL ) {
    perror("[test_encode] *ERROR* ");
    exit(1);
  }
  fifo_load(coded, msg);
  fclose(msg);
#ifdef DEBUGGING
  fprintf(stderr, "[test_decode] fifo inicializada.\n");
#endif

  /* decodifica mensagem */
  if ( (dmsg = fopen("decoded.mesg","w")) == NULL ) {
    perror("[test_encode] *ERROR* ");
    exit(1);
  }

  lsize = 0;
  start = clock();
  for (;;) /* forever */ {
    arith_decode(dict, coded, limit, &buff);
    if ( buff == cdf_terminator(dict) ) break;
    ++lsize;
    fprintf(dmsg, "%lu\n", buff);
  }
  end = clock();
  cpu_time_used = ((double) (end - start)) / CLOCKS_PER_SEC;
  fclose(dmsg);
    
  fprintf(stderr, "[test_decode] mensagem decodificada,");
  fprintf(stderr, " %lu simbolos\n", lsize);
  fprintf(stderr, "[test_cdf] Tempo total = %e s\n",cpu_time_used);
  fprintf(stderr, "[test_cdf] Por simbolo ~= %e s\n",cpu_time_used/lsize);

  /* libera memoria alocada */
  free_bound(limit);
  free_cdf(dict);
  free_fifo(coded);

  return 0;
}
コード例 #2
0
ファイル: cdf.c プロジェクト: Vaa3D/v3d_external
void Free_CDF(CDF *cdf)
{ free_cdf(((Cdf *) cdf)); }