39.46 model_1s.c

/*  
 * model_1s.c  
 *  
 * Un modelo probabilístico de orden 1.  
 *  
 * Referencias:  
 *  
 * model_0.c  
 * model_0s.c  
 * Witten, Neal, and Cleary, Arithmetic Coding For Data Compression,  
 *   CACM, 1987.  
 * M. Nelson and J.-L. Gailly, The Data Compression Book. 1995.  
 */  
 
#include <stdio.h>  
#include "vlc.h"  
#include "codec.h"  
 
/* Tamaño del alfabeto fuente. Los 256 caracteres posibles y el  
   símbolo EOS (End Of Stream). */  
#define ALPHA_SIZE 257  
 
/* El código de model_1s.c es fundamentalmente el mismo que en  
   model_0s.c, excepto que ahora se manejan ALPHA_SIZE-1 contextos  
   (símbolos). */  
 
#include "model_1s.h"  
 
#define _symbol_to_index _symbol_to_index[context]  
#define _index_to_symbol _index_to_symbol[context]  
#define prob prob[context]  
#define cum_prob cum_prob[context]  
 
#include "model_0s/find_symbols_and_indexes.h"  
 
void init_model() {  
  /* Para cada posible contexto. */  
  for(context=0; context<ALPHA_SIZE-1; context++) {  
#include "model_0s/init_model.h"  
    init_model();  
  }  
  context = 0;  
}  
 
#include "model_0/scale_probs.h"  
#include "model_0s/find_new_position_for.h"  
#include "model_0/increment_prob_of_index.h"  
#include "model_0/test_if_scale.h"  
#include "model_0/finish_model.h"  
 
void update_model() {  
#include "model_0s/update_model.h"  
  update_model();  
  context = symbol;  
}  
 
#include "model_0/encode_stream.h"  
#include "model_0/decode_stream.h"  
 
#undef _index_to_symbol  
#undef _symbol_to_index  
#undef cum_prob  
#undef prob