]> CyberLeo.Net >> Repos - FreeBSD/FreeBSD.git/blob - contrib/xz/src/liblzma/lzma/fastpos_tablegen.c
MFV r359197: xz 5.2.5.
[FreeBSD/FreeBSD.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 <inttypes.h>
15 #include <stdio.h>
16 #include "fastpos.h"
17
18
19 int
20 main(void)
21 {
22         uint8_t fastpos[1 << FASTPOS_BITS];
23
24         const uint8_t fast_slots = 2 * FASTPOS_BITS;
25         uint32_t c = 2;
26
27         fastpos[0] = 0;
28         fastpos[1] = 1;
29
30         for (uint8_t slot_fast = 2; slot_fast < fast_slots; ++slot_fast) {
31                 const uint32_t k = 1 << ((slot_fast >> 1) - 1);
32                 for (uint32_t j = 0; j < k; ++j, ++c)
33                         fastpos[c] = slot_fast;
34         }
35
36         printf("/* This file has been automatically generated "
37                         "by fastpos_tablegen.c. */\n\n"
38                         "#include \"common.h\"\n"
39                         "#include \"fastpos.h\"\n\n"
40                         "const uint8_t lzma_fastpos[1 << FASTPOS_BITS] = {");
41
42         for (size_t i = 0; i < (1 << FASTPOS_BITS); ++i) {
43                 if (i % 16 == 0)
44                         printf("\n\t");
45
46                 printf("%3u", (unsigned int)(fastpos[i]));
47
48                 if (i != (1 << FASTPOS_BITS) - 1)
49                         printf(",");
50         }
51
52         printf("\n};\n");
53
54         return 0;
55 }