Rev 49813 | Blame | Compare with Previous | Last modification | View Log | Download | RSS feed
//////////////////////////////////////////////////////////////////////////////////// \file price_tablegen.c/// \brief Probability price table generator////// Compiling: gcc -std=c99 -o price_tablegen price_tablegen.c///// Authors: Igor Pavlov// Lasse Collin//// This file has been put into the public domain.// You can do whatever you want with this file./////////////////////////////////////////////////////////////////////////////////#include <inttypes.h>#include <stdio.h>#include "range_common.h"#include "price.h"static uint32_t rc_prices[RC_PRICE_TABLE_SIZE];static voidinit_price_table(void){for (uint32_t i = (UINT32_C(1) << RC_MOVE_REDUCING_BITS) / 2;i < RC_BIT_MODEL_TOTAL;i += (UINT32_C(1) << RC_MOVE_REDUCING_BITS)) {const uint32_t cycles_bits = RC_BIT_PRICE_SHIFT_BITS;uint32_t w = i;uint32_t bit_count = 0;for (uint32_t j = 0; j < cycles_bits; ++j) {w *= w;bit_count <<= 1;while (w >= (UINT32_C(1) << 16)) {w >>= 1;++bit_count;}}rc_prices[i >> RC_MOVE_REDUCING_BITS]= (RC_BIT_MODEL_TOTAL_BITS << cycles_bits)- 15 - bit_count;}return;}static voidprint_price_table(void){printf("/* This file has been automatically generated by ""price_tablegen.c. */\n\n""#include \"range_encoder.h\"\n\n""const uint8_t lzma_rc_prices[""RC_PRICE_TABLE_SIZE] = {");const size_t array_size = sizeof(lzma_rc_prices)/ sizeof(lzma_rc_prices[0]);for (size_t i = 0; i < array_size; ++i) {if (i % 8 == 0)printf("\n\t");printf("%4" PRIu32, rc_prices[i]);if (i != array_size - 1)printf(",");}printf("\n};\n");return;}intmain(void){init_price_table();print_price_table();return 0;}