vrshoot
diff libs/zlib/inftrees.c @ 0:b2f14e535253
initial commit
author | John Tsiombikas <nuclear@member.fsf.org> |
---|---|
date | Sat, 01 Feb 2014 19:58:19 +0200 |
parents | |
children |
line diff
1.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000 1.2 +++ b/libs/zlib/inftrees.c Sat Feb 01 19:58:19 2014 +0200 1.3 @@ -0,0 +1,329 @@ 1.4 +/* inftrees.c -- generate Huffman trees for efficient decoding 1.5 + * Copyright (C) 1995-2005 Mark Adler 1.6 + * For conditions of distribution and use, see copyright notice in zlib.h 1.7 + */ 1.8 + 1.9 +#include "zutil.h" 1.10 +#include "inftrees.h" 1.11 + 1.12 +#define MAXBITS 15 1.13 + 1.14 +const char inflate_copyright[] = 1.15 + " inflate 1.2.3 Copyright 1995-2005 Mark Adler "; 1.16 +/* 1.17 + If you use the zlib library in a product, an acknowledgment is welcome 1.18 + in the documentation of your product. If for some reason you cannot 1.19 + include such an acknowledgment, I would appreciate that you keep this 1.20 + copyright string in the executable of your product. 1.21 + */ 1.22 + 1.23 +/* 1.24 + Build a set of tables to decode the provided canonical Huffman code. 1.25 + The code lengths are lens[0..codes-1]. The result starts at *table, 1.26 + whose indices are 0..2^bits-1. work is a writable array of at least 1.27 + lens shorts, which is used as a work area. type is the type of code 1.28 + to be generated, CODES, LENS, or DISTS. On return, zero is success, 1.29 + -1 is an invalid code, and +1 means that ENOUGH isn't enough. table 1.30 + on return points to the next available entry's address. bits is the 1.31 + requested root table index bits, and on return it is the actual root 1.32 + table index bits. It will differ if the request is greater than the 1.33 + longest code or if it is less than the shortest code. 1.34 + */ 1.35 +int inflate_table(type, lens, codes, table, bits, work) 1.36 +codetype type; 1.37 +unsigned short FAR *lens; 1.38 +unsigned codes; 1.39 +code FAR * FAR *table; 1.40 +unsigned FAR *bits; 1.41 +unsigned short FAR *work; 1.42 +{ 1.43 + unsigned len; /* a code's length in bits */ 1.44 + unsigned sym; /* index of code symbols */ 1.45 + unsigned min, max; /* minimum and maximum code lengths */ 1.46 + unsigned root; /* number of index bits for root table */ 1.47 + unsigned curr; /* number of index bits for current table */ 1.48 + unsigned drop; /* code bits to drop for sub-table */ 1.49 + int left; /* number of prefix codes available */ 1.50 + unsigned used; /* code entries in table used */ 1.51 + unsigned huff; /* Huffman code */ 1.52 + unsigned incr; /* for incrementing code, index */ 1.53 + unsigned fill; /* index for replicating entries */ 1.54 + unsigned low; /* low bits for current root entry */ 1.55 + unsigned mask; /* mask for low root bits */ 1.56 + code this; /* table entry for duplication */ 1.57 + code FAR *next; /* next available space in table */ 1.58 + const unsigned short FAR *base; /* base value table to use */ 1.59 + const unsigned short FAR *extra; /* extra bits table to use */ 1.60 + int end; /* use base and extra for symbol > end */ 1.61 + unsigned short count[MAXBITS+1]; /* number of codes of each length */ 1.62 + unsigned short offs[MAXBITS+1]; /* offsets in table for each length */ 1.63 + static const unsigned short lbase[31] = { /* Length codes 257..285 base */ 1.64 + 3, 4, 5, 6, 7, 8, 9, 10, 11, 13, 15, 17, 19, 23, 27, 31, 1.65 + 35, 43, 51, 59, 67, 83, 99, 115, 131, 163, 195, 227, 258, 0, 0}; 1.66 + static const unsigned short lext[31] = { /* Length codes 257..285 extra */ 1.67 + 16, 16, 16, 16, 16, 16, 16, 16, 17, 17, 17, 17, 18, 18, 18, 18, 1.68 + 19, 19, 19, 19, 20, 20, 20, 20, 21, 21, 21, 21, 16, 201, 196}; 1.69 + static const unsigned short dbase[32] = { /* Distance codes 0..29 base */ 1.70 + 1, 2, 3, 4, 5, 7, 9, 13, 17, 25, 33, 49, 65, 97, 129, 193, 1.71 + 257, 385, 513, 769, 1025, 1537, 2049, 3073, 4097, 6145, 1.72 + 8193, 12289, 16385, 24577, 0, 0}; 1.73 + static const unsigned short dext[32] = { /* Distance codes 0..29 extra */ 1.74 + 16, 16, 16, 16, 17, 17, 18, 18, 19, 19, 20, 20, 21, 21, 22, 22, 1.75 + 23, 23, 24, 24, 25, 25, 26, 26, 27, 27, 1.76 + 28, 28, 29, 29, 64, 64}; 1.77 + 1.78 + /* 1.79 + Process a set of code lengths to create a canonical Huffman code. The 1.80 + code lengths are lens[0..codes-1]. Each length corresponds to the 1.81 + symbols 0..codes-1. The Huffman code is generated by first sorting the 1.82 + symbols by length from short to long, and retaining the symbol order 1.83 + for codes with equal lengths. Then the code starts with all zero bits 1.84 + for the first code of the shortest length, and the codes are integer 1.85 + increments for the same length, and zeros are appended as the length 1.86 + increases. For the deflate format, these bits are stored backwards 1.87 + from their more natural integer increment ordering, and so when the 1.88 + decoding tables are built in the large loop below, the integer codes 1.89 + are incremented backwards. 1.90 + 1.91 + This routine assumes, but does not check, that all of the entries in 1.92 + lens[] are in the range 0..MAXBITS. The caller must assure this. 1.93 + 1..MAXBITS is interpreted as that code length. zero means that that 1.94 + symbol does not occur in this code. 1.95 + 1.96 + The codes are sorted by computing a count of codes for each length, 1.97 + creating from that a table of starting indices for each length in the 1.98 + sorted table, and then entering the symbols in order in the sorted 1.99 + table. The sorted table is work[], with that space being provided by 1.100 + the caller. 1.101 + 1.102 + The length counts are used for other purposes as well, i.e. finding 1.103 + the minimum and maximum length codes, determining if there are any 1.104 + codes at all, checking for a valid set of lengths, and looking ahead 1.105 + at length counts to determine sub-table sizes when building the 1.106 + decoding tables. 1.107 + */ 1.108 + 1.109 + /* accumulate lengths for codes (assumes lens[] all in 0..MAXBITS) */ 1.110 + for (len = 0; len <= MAXBITS; len++) 1.111 + count[len] = 0; 1.112 + for (sym = 0; sym < codes; sym++) 1.113 + count[lens[sym]]++; 1.114 + 1.115 + /* bound code lengths, force root to be within code lengths */ 1.116 + root = *bits; 1.117 + for (max = MAXBITS; max >= 1; max--) 1.118 + if (count[max] != 0) break; 1.119 + if (root > max) root = max; 1.120 + if (max == 0) { /* no symbols to code at all */ 1.121 + this.op = (unsigned char)64; /* invalid code marker */ 1.122 + this.bits = (unsigned char)1; 1.123 + this.val = (unsigned short)0; 1.124 + *(*table)++ = this; /* make a table to force an error */ 1.125 + *(*table)++ = this; 1.126 + *bits = 1; 1.127 + return 0; /* no symbols, but wait for decoding to report error */ 1.128 + } 1.129 + for (min = 1; min <= MAXBITS; min++) 1.130 + if (count[min] != 0) break; 1.131 + if (root < min) root = min; 1.132 + 1.133 + /* check for an over-subscribed or incomplete set of lengths */ 1.134 + left = 1; 1.135 + for (len = 1; len <= MAXBITS; len++) { 1.136 + left <<= 1; 1.137 + left -= count[len]; 1.138 + if (left < 0) return -1; /* over-subscribed */ 1.139 + } 1.140 + if (left > 0 && (type == CODES || max != 1)) 1.141 + return -1; /* incomplete set */ 1.142 + 1.143 + /* generate offsets into symbol table for each length for sorting */ 1.144 + offs[1] = 0; 1.145 + for (len = 1; len < MAXBITS; len++) 1.146 + offs[len + 1] = offs[len] + count[len]; 1.147 + 1.148 + /* sort symbols by length, by symbol order within each length */ 1.149 + for (sym = 0; sym < codes; sym++) 1.150 + if (lens[sym] != 0) work[offs[lens[sym]]++] = (unsigned short)sym; 1.151 + 1.152 + /* 1.153 + Create and fill in decoding tables. In this loop, the table being 1.154 + filled is at next and has curr index bits. The code being used is huff 1.155 + with length len. That code is converted to an index by dropping drop 1.156 + bits off of the bottom. For codes where len is less than drop + curr, 1.157 + those top drop + curr - len bits are incremented through all values to 1.158 + fill the table with replicated entries. 1.159 + 1.160 + root is the number of index bits for the root table. When len exceeds 1.161 + root, sub-tables are created pointed to by the root entry with an index 1.162 + of the low root bits of huff. This is saved in low to check for when a 1.163 + new sub-table should be started. drop is zero when the root table is 1.164 + being filled, and drop is root when sub-tables are being filled. 1.165 + 1.166 + When a new sub-table is needed, it is necessary to look ahead in the 1.167 + code lengths to determine what size sub-table is needed. The length 1.168 + counts are used for this, and so count[] is decremented as codes are 1.169 + entered in the tables. 1.170 + 1.171 + used keeps track of how many table entries have been allocated from the 1.172 + provided *table space. It is checked when a LENS table is being made 1.173 + against the space in *table, ENOUGH, minus the maximum space needed by 1.174 + the worst case distance code, MAXD. This should never happen, but the 1.175 + sufficiency of ENOUGH has not been proven exhaustively, hence the check. 1.176 + This assumes that when type == LENS, bits == 9. 1.177 + 1.178 + sym increments through all symbols, and the loop terminates when 1.179 + all codes of length max, i.e. all codes, have been processed. This 1.180 + routine permits incomplete codes, so another loop after this one fills 1.181 + in the rest of the decoding tables with invalid code markers. 1.182 + */ 1.183 + 1.184 + /* set up for code type */ 1.185 + switch (type) { 1.186 + case CODES: 1.187 + base = extra = work; /* dummy value--not used */ 1.188 + end = 19; 1.189 + break; 1.190 + case LENS: 1.191 + base = lbase; 1.192 + base -= 257; 1.193 + extra = lext; 1.194 + extra -= 257; 1.195 + end = 256; 1.196 + break; 1.197 + default: /* DISTS */ 1.198 + base = dbase; 1.199 + extra = dext; 1.200 + end = -1; 1.201 + } 1.202 + 1.203 + /* initialize state for loop */ 1.204 + huff = 0; /* starting code */ 1.205 + sym = 0; /* starting code symbol */ 1.206 + len = min; /* starting code length */ 1.207 + next = *table; /* current table to fill in */ 1.208 + curr = root; /* current table index bits */ 1.209 + drop = 0; /* current bits to drop from code for index */ 1.210 + low = (unsigned)(-1); /* trigger new sub-table when len > root */ 1.211 + used = 1U << root; /* use root table entries */ 1.212 + mask = used - 1; /* mask for comparing low */ 1.213 + 1.214 + /* check available table space */ 1.215 + if (type == LENS && used >= ENOUGH - MAXD) 1.216 + return 1; 1.217 + 1.218 + /* process all codes and make table entries */ 1.219 + for (;;) { 1.220 + /* create table entry */ 1.221 + this.bits = (unsigned char)(len - drop); 1.222 + if ((int)(work[sym]) < end) { 1.223 + this.op = (unsigned char)0; 1.224 + this.val = work[sym]; 1.225 + } 1.226 + else if ((int)(work[sym]) > end) { 1.227 + this.op = (unsigned char)(extra[work[sym]]); 1.228 + this.val = base[work[sym]]; 1.229 + } 1.230 + else { 1.231 + this.op = (unsigned char)(32 + 64); /* end of block */ 1.232 + this.val = 0; 1.233 + } 1.234 + 1.235 + /* replicate for those indices with low len bits equal to huff */ 1.236 + incr = 1U << (len - drop); 1.237 + fill = 1U << curr; 1.238 + min = fill; /* save offset to next table */ 1.239 + do { 1.240 + fill -= incr; 1.241 + next[(huff >> drop) + fill] = this; 1.242 + } while (fill != 0); 1.243 + 1.244 + /* backwards increment the len-bit code huff */ 1.245 + incr = 1U << (len - 1); 1.246 + while (huff & incr) 1.247 + incr >>= 1; 1.248 + if (incr != 0) { 1.249 + huff &= incr - 1; 1.250 + huff += incr; 1.251 + } 1.252 + else 1.253 + huff = 0; 1.254 + 1.255 + /* go to next symbol, update count, len */ 1.256 + sym++; 1.257 + if (--(count[len]) == 0) { 1.258 + if (len == max) break; 1.259 + len = lens[work[sym]]; 1.260 + } 1.261 + 1.262 + /* create new sub-table if needed */ 1.263 + if (len > root && (huff & mask) != low) { 1.264 + /* if first time, transition to sub-tables */ 1.265 + if (drop == 0) 1.266 + drop = root; 1.267 + 1.268 + /* increment past last table */ 1.269 + next += min; /* here min is 1 << curr */ 1.270 + 1.271 + /* determine length of next table */ 1.272 + curr = len - drop; 1.273 + left = (int)(1 << curr); 1.274 + while (curr + drop < max) { 1.275 + left -= count[curr + drop]; 1.276 + if (left <= 0) break; 1.277 + curr++; 1.278 + left <<= 1; 1.279 + } 1.280 + 1.281 + /* check for enough space */ 1.282 + used += 1U << curr; 1.283 + if (type == LENS && used >= ENOUGH - MAXD) 1.284 + return 1; 1.285 + 1.286 + /* point entry in root table to sub-table */ 1.287 + low = huff & mask; 1.288 + (*table)[low].op = (unsigned char)curr; 1.289 + (*table)[low].bits = (unsigned char)root; 1.290 + (*table)[low].val = (unsigned short)(next - *table); 1.291 + } 1.292 + } 1.293 + 1.294 + /* 1.295 + Fill in rest of table for incomplete codes. This loop is similar to the 1.296 + loop above in incrementing huff for table indices. It is assumed that 1.297 + len is equal to curr + drop, so there is no loop needed to increment 1.298 + through high index bits. When the current sub-table is filled, the loop 1.299 + drops back to the root table to fill in any remaining entries there. 1.300 + */ 1.301 + this.op = (unsigned char)64; /* invalid code marker */ 1.302 + this.bits = (unsigned char)(len - drop); 1.303 + this.val = (unsigned short)0; 1.304 + while (huff != 0) { 1.305 + /* when done with sub-table, drop back to root table */ 1.306 + if (drop != 0 && (huff & mask) != low) { 1.307 + drop = 0; 1.308 + len = root; 1.309 + next = *table; 1.310 + this.bits = (unsigned char)len; 1.311 + } 1.312 + 1.313 + /* put invalid code marker in table */ 1.314 + next[huff >> drop] = this; 1.315 + 1.316 + /* backwards increment the len-bit code huff */ 1.317 + incr = 1U << (len - 1); 1.318 + while (huff & incr) 1.319 + incr >>= 1; 1.320 + if (incr != 0) { 1.321 + huff &= incr - 1; 1.322 + huff += incr; 1.323 + } 1.324 + else 1.325 + huff = 0; 1.326 + } 1.327 + 1.328 + /* set return parameters */ 1.329 + *table += used; 1.330 + *bits = root; 1.331 + return 0; 1.332 +}