fastpos_tablegen.c revision 302408
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
20int
21main(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