1 /////////////////////////////////////////////////////////////////////////////// 2 // 3 /// \file fastpos_tablegen.c 4 /// \brief Generates the lzma_fastpos[] lookup table 5 /// 6 // Authors: Igor Pavlov 7 // Lasse Collin 8 // 9 // This file has been put into the public domain. 10 // You can do whatever you want with this file. 11 // 12 /////////////////////////////////////////////////////////////////////////////// 13 14 #include <sys/types.h> 15 #include <inttypes.h> 16 #include <stdio.h> 17 #include "fastpos.h" 18 19 20 int 21 main(void) 22 { 23 uint8_t fastpos[1 << FASTPOS_BITS]; 24 25 const uint8_t fast_slots = 2 * FASTPOS_BITS; 26 uint32_t c = 2; 27 28 fastpos[0] = 0; 29 fastpos[1] = 1; 30 31 for (uint8_t slot_fast = 2; slot_fast < fast_slots; ++slot_fast) { 32 const uint32_t k = 1 << ((slot_fast >> 1) - 1); 33 for (uint32_t j = 0; j < k; ++j, ++c) 34 fastpos[c] = slot_fast; 35 } 36 37 printf("/* This file has been automatically generated " 38 "by fastpos_tablegen.c. */\n\n" 39 "#include \"common.h\"\n" 40 "#include \"fastpos.h\"\n\n" 41 "const uint8_t lzma_fastpos[1 << FASTPOS_BITS] = {"); 42 43 for (size_t i = 0; i < (1 << FASTPOS_BITS); ++i) { 44 if (i % 16 == 0) 45 printf("\n\t"); 46 47 printf("%3u", (unsigned int)(fastpos[i])); 48 49 if (i != (1 << FASTPOS_BITS) - 1) 50 printf(","); 51 } 52 53 printf("\n};\n"); 54 55 return 0; 56 } 57