]> CyberLeo.Net >> Repos - FreeBSD/releng/9.2.git/blob - contrib/xz/src/liblzma/lzma/fastpos_tablegen.c
- Copy stable/9 to releng/9.2 as part of the 9.2-RELEASE cycle.
[FreeBSD/releng/9.2.git] / contrib / xz / src / liblzma / lzma / fastpos_tablegen.c
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 }