63 = {0,0,0,0,0,0,0,0,1,1,1,1,2,2,2,2,3,3,3,3,4,4,4,4,5,5,5,5,0};
66 = {0,0,0,0,1,1,2,2,3,3,4,4,5,5,6,6,7,7,8,8,9,9,10,10,11,11,12,12,13,13};
69 = {0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,3,7};
72 = {16,17,18,0,8,7,9,6,10,5,11,4,12,3,13,2,14,1,15};
81#define DIST_CODE_LEN 512
83#if defined(GEN_TREES_H) || !defined(STDC)
157local void gen_trees_header
OF((
void));
161# define send_code(s, c, tree) send_bits(s, tree[c].Code, tree[c].Len)
165# define send_code(s, c, tree) \
166 { if (z_verbose>2) fprintf(stderr,"\ncd %3d ",(c)); \
167 send_bits(s, tree[c].Code, tree[c].Len); }
174#define put_short(s, w) { \
175 put_byte(s, (uch)((w) & 0xff)); \
176 put_byte(s, (uch)((ush)(w) >> 8)); \
211#define send_bits(s, value, length) \
213 if (s->bi_valid > (int)Buf_size - len) {\
214 int val = (int)value;\
215 s->bi_buf |= (ush)val << s->bi_valid;\
216 put_short(s, s->bi_buf);\
217 s->bi_buf = (ush)val >> (Buf_size - s->bi_valid);\
218 s->bi_valid += len - Buf_size;\
220 s->bi_buf |= (ush)(value) << s->bi_valid;\
234#if defined(GEN_TREES_H) || !defined(STDC)
235 static int static_init_done = 0;
244 if (static_init_done)
return;
247#ifdef NO_INIT_GLOBAL_POINTERS
263 Assert (
length == 256,
"tr_static_init: length != 256");
278 Assert (dist == 256,
"tr_static_init: dist != 256");
286 Assert (dist == 256,
"tr_static_init: 256 + dist != 512");
306 static_init_done = 1;
322# define SEPARATOR(i, last, width) \
323 ((i) == (last)? "\n};\n\n" : \
324 ((i) % (width) == (width) - 1 ? ",\n" : ", "))
326void gen_trees_header()
333 "/* header created automatically with -DGEN_TREES_H */\n\n");
335 fprintf(
header,
"local const ct_data static_ltree[L_CODES+2] = {\n");
341 fprintf(
header,
"local const ct_data static_dtree[D_CODES] = {\n");
347 fprintf(
header,
"const uch ZLIB_INTERNAL _dist_code[DIST_CODE_LEN] = {\n");
354 "const uch ZLIB_INTERNAL _length_code[MAX_MATCH-MIN_MATCH+1]= {\n");
360 fprintf(
header,
"local const int base_length[LENGTH_CODES] = {\n");
384 s->l_desc.dyn_tree =
s->dyn_ltree;
387 s->d_desc.dyn_tree =
s->dyn_dtree;
390 s->bl_desc.dyn_tree =
s->bl_tree;
396 s->compressed_len = 0
L;
418 s->opt_len =
s->static_len = 0
L;
419 s->sym_next =
s->matches = 0;
430#define pqremove(s, tree, top) \
432 top = s->heap[SMALLEST]; \
433 s->heap[SMALLEST] = s->heap[s->heap_len--]; \
434 pqdownheap(s, tree, SMALLEST); \
441#define smaller(tree, n, m, depth) \
442 (tree[n].Freq < tree[m].Freq || \
443 (tree[n].Freq == tree[m].Freq && depth[n] <= depth[m]))
458 while (j <= s->heap_len) {
460 if (j < s->heap_len &&
468 s->heap[
k] =
s->heap[
j];
k =
j;
491 int max_code =
desc->max_code;
492 const ct_data *stree =
desc->stat_desc->static_tree;
494 int base =
desc->stat_desc->extra_base;
495 int max_length =
desc->stat_desc->max_length;
508 tree[
s->heap[
s->heap_max]].Len = 0;
513 if (
bits > max_length)
bits = max_length, overflow++;
517 if (
n > max_code)
continue;
523 s->opt_len += (
ulg)
f * (
unsigned)(
bits + xbits);
524 if (stree)
s->static_len += (
ulg)
f * (
unsigned)(stree[
n].Len + xbits);
526 if (overflow == 0)
return;
533 bits = max_length - 1;
536 s->bl_count[
bits + 1] += 2;
537 s->bl_count[max_length]--;
542 }
while (overflow > 0);
553 if (
m > max_code)
continue;
593 "inconsistent bit counts");
596 for (
n = 0;
n <= max_code;
n++) {
598 if (
len == 0)
continue;
620 const ct_data *stree =
desc->stat_desc->static_tree;
621 int elems =
desc->stat_desc->elems;
632 for (
n = 0;
n < elems;
n++) {
634 s->heap[++(
s->heap_len)] = max_code =
n;
646 while (
s->heap_len < 2) {
647 node =
s->heap[++(
s->heap_len)] = (max_code < 2 ? ++max_code : 0);
650 s->opt_len--;
if (stree)
s->static_len -= stree[
node].Len;
653 desc->max_code = max_code;
668 s->heap[--(
s->heap_max)] =
n;
669 s->heap[--(
s->heap_max)] =
m;
674 s->depth[
n] :
s->depth[
m]) + 1);
677 if (
tree ==
s->bl_tree) {
686 }
while (
s->heap_len >= 2);
711 int nextlen =
tree[0].Len;
716 if (nextlen == 0)
max_count = 138, min_count = 3;
717 tree[max_code + 1].Len = (
ush)0xffff;
719 for (
n = 0;
n <= max_code;
n++) {
720 curlen = nextlen; nextlen =
tree[
n + 1].Len;
723 }
else if (
count < min_count) {
724 s->bl_tree[curlen].Freq +=
count;
725 }
else if (curlen != 0) {
726 if (curlen != prevlen)
s->bl_tree[curlen].Freq++;
728 }
else if (
count <= 10) {
733 count = 0; prevlen = curlen;
736 }
else if (curlen == nextlen) {
756 int nextlen =
tree[0].Len;
762 if (nextlen == 0)
max_count = 138, min_count = 3;
764 for (
n = 0;
n <= max_code;
n++) {
765 curlen = nextlen; nextlen =
tree[
n + 1].Len;
768 }
else if (
count < min_count) {
771 }
else if (curlen != 0) {
772 if (curlen != prevlen) {
778 }
else if (
count <= 10) {
784 count = 0; prevlen = curlen;
787 }
else if (curlen == nextlen) {
818 for (max_blindex =
BL_CODES-1; max_blindex >= 3; max_blindex--) {
819 if (
s->bl_tree[
bl_order[max_blindex]].Len != 0)
break;
822 s->opt_len += 3*((
ulg)max_blindex + 1) + 5 + 5 + 4;
824 s->opt_len,
s->static_len));
836 int lcodes, dcodes, blcodes;
840 Assert (lcodes >= 257 && dcodes >= 1 && blcodes >= 4,
"not enough codes");
847 for (rank = 0; rank < blcodes; rank++) {
875 s->pending += stored_len;
877 s->compressed_len = (
s->compressed_len + 3 + 7) & (
ulg)~7L;
878 s->compressed_len += (stored_len + 4) << 3;
879 s->bits_sent += 2*16;
880 s->bits_sent += stored_len << 3;
903 s->compressed_len += 10L;
918 ulg opt_lenb, static_lenb;
934 Tracev((
stderr,
"\ndist data: dyn %ld, stat %ld",
s->opt_len,
946 opt_lenb = (
s->opt_len + 3 + 7) >> 3;
947 static_lenb = (
s->static_len + 3 + 7) >> 3;
949 Tracev((
stderr,
"\nopt %lu(%lu) stat %lu(%lu) stored %lu lit %u ",
950 opt_lenb,
s->opt_len, static_lenb,
s->static_len, stored_len,
954 if (static_lenb <= opt_lenb || s->strategy ==
Z_FIXED)
956 opt_lenb = static_lenb;
960 opt_lenb = static_lenb = stored_len + 5;
964 if (
buf != (
char*)0) {
966 if (stored_len + 4 <= opt_lenb &&
buf != (
char*)0) {
977 }
else if (static_lenb == opt_lenb) {
982 s->compressed_len += 3 +
s->static_len;
991 s->compressed_len += 3 +
s->opt_len;
994 Assert (
s->compressed_len ==
s->bits_sent,
"bad compressed size");
1003 s->compressed_len += 7;
1006 Tracev((
stderr,
"\ncomprlen %lu(%lu) ",
s->compressed_len >> 3,
1007 s->compressed_len - 7*
last));
1019 s->sym_buf[
s->sym_next++] = (
uch)dist;
1020 s->sym_buf[
s->sym_next++] = (
uch)(dist >> 8);
1021 s->sym_buf[
s->sym_next++] = (
uch)lc;
1024 s->dyn_ltree[lc].Freq++;
1034 s->dyn_dtree[
d_code(dist)].Freq++;
1036 return (
s->sym_next ==
s->sym_end);
1053 if (
s->sym_next != 0)
do {
1054 dist =
s->sym_buf[sx++] & 0xff;
1055 dist += (
unsigned)(
s->sym_buf[sx++] & 0xff) << 8;
1056 lc =
s->sym_buf[sx++];
1082 Assert(
s->pending <
s->lit_bufsize + sx,
"pendingBuf overflow");
1084 }
while (sx < s->sym_next);
1109 unsigned long block_mask = 0xf3ffc07fUL;
1113 for (
n = 0; n <= 31; n++, block_mask >>= 1)
1114 if ((block_mask & 1) && (
s->dyn_ltree[
n].Freq != 0))
1118 if (
s->dyn_ltree[9].Freq != 0 ||
s->dyn_ltree[10].Freq != 0
1119 ||
s->dyn_ltree[13].Freq != 0)
1122 if (
s->dyn_ltree[
n].Freq != 0)
1140 register unsigned res = 0;
1144 }
while (--
len > 0);
1154 if (
s->bi_valid == 16) {
1158 }
else if (
s->bi_valid >= 8) {
1171 if (
s->bi_valid > 8) {
1173 }
else if (
s->bi_valid > 0) {
1179 s->bits_sent = (
s->bits_sent + 7) & ~7;
#define Assert(cond, msg)
Character const *const size_t const max_count
GLuint GLuint GLsizei count
GLenum GLuint GLenum GLsizei const GLchar * buf
GLenum GLint GLenum GLsizei GLsizei GLsizei GLint GLsizei const GLvoid * bits
GLuint GLsizei GLsizei * length
GLfloat GLfloat GLfloat GLfloat h
GLsizei GLenum const GLvoid GLsizei GLenum GLbyte GLbyte GLbyte GLdouble GLdouble GLdouble GLfloat GLfloat GLfloat GLint GLint GLint GLshort GLshort GLshort GLubyte GLubyte GLubyte GLuint GLuint GLuint GLushort GLushort GLushort GLbyte GLbyte GLbyte GLbyte GLdouble GLdouble GLdouble GLdouble GLfloat GLfloat GLfloat GLfloat GLint GLint GLint GLint GLshort GLshort GLshort GLshort GLubyte GLubyte GLubyte GLubyte GLuint GLuint GLuint GLuint GLushort GLushort GLushort GLushort GLboolean const GLdouble const GLfloat const GLint const GLshort const GLbyte const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLdouble const GLfloat const GLfloat const GLint const GLint const GLshort const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort GLenum GLenum GLenum GLfloat GLenum GLint GLenum GLenum GLenum GLfloat GLenum GLenum GLint GLenum GLfloat GLenum GLint GLint GLushort GLenum GLenum GLfloat GLenum GLenum GLint GLfloat const GLubyte GLenum GLenum GLenum const GLfloat GLenum GLenum const GLint GLenum GLint GLint GLsizei GLsizei GLint GLenum GLenum const GLvoid GLenum GLenum const GLfloat GLenum GLenum const GLint GLenum GLenum const GLdouble GLenum GLenum const GLfloat GLenum GLenum const GLint GLsizei GLuint GLfloat GLuint GLbitfield GLfloat GLint GLuint GLboolean GLenum GLfloat GLenum GLbitfield GLenum GLfloat GLfloat GLint GLint const GLfloat GLenum GLfloat GLfloat GLint GLint GLfloat GLfloat GLint GLint const GLfloat GLint GLfloat GLfloat GLint GLfloat GLfloat GLint GLfloat GLfloat const GLdouble const GLfloat const GLdouble const GLfloat GLint i
GLsizei GLenum const GLvoid GLsizei GLenum GLbyte GLbyte GLbyte GLdouble GLdouble GLdouble GLfloat GLfloat GLfloat GLint GLint GLint GLshort GLshort GLshort GLubyte GLubyte GLubyte GLuint GLuint GLuint GLushort GLushort GLushort GLbyte GLbyte GLbyte GLbyte GLdouble GLdouble GLdouble GLdouble GLfloat GLfloat GLfloat GLfloat GLint GLint GLint GLint GLshort GLshort GLshort GLshort GLubyte GLubyte GLubyte GLubyte GLuint GLuint GLuint GLuint GLushort GLushort GLushort GLushort GLboolean const GLdouble const GLfloat const GLint const GLshort const GLbyte const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLdouble const GLfloat const GLfloat const GLint const GLint const GLshort const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort GLenum GLenum GLenum GLfloat GLenum GLint GLenum GLenum GLenum GLfloat GLenum GLenum GLint GLenum GLfloat GLenum GLint GLint GLushort GLenum GLenum GLfloat GLenum GLenum GLint GLfloat const GLubyte GLenum GLenum GLenum const GLfloat GLenum GLenum const GLint GLenum GLint GLint GLsizei GLsizei GLint GLenum GLenum const GLvoid GLenum GLenum const GLfloat GLenum GLenum const GLint GLenum GLenum const GLdouble GLenum GLenum const GLfloat GLenum GLenum const GLint GLsizei GLuint GLfloat GLuint GLbitfield GLfloat GLint GLuint GLboolean GLenum GLfloat GLenum GLbitfield GLenum GLfloat GLfloat GLint GLint const GLfloat GLenum GLfloat GLfloat GLint GLint GLfloat GLfloat GLint GLint const GLfloat GLint GLfloat GLfloat GLint GLfloat GLfloat GLint GLfloat GLfloat const GLdouble const GLfloat const GLdouble const GLfloat GLint GLint GLint j
_Check_return_ _CRTIMP int __cdecl isgraph(_In_ int _C)
_Check_return_opt_ _CRTIMP int __cdecl fprintf(_Inout_ FILE *_File, _In_z_ _Printf_format_string_ const char *_Format,...)
_Check_return_ _CRTIMP FILE *__cdecl fopen(_In_z_ const char *_Filename, _In_z_ const char *_Mode)
_Check_return_opt_ _CRTIMP int __cdecl fclose(_Inout_ FILE *_File)
static const WCHAR desc[]
static unsigned(__cdecl *hash_bstr)(bstr_t s)
const ct_data * static_tree
void send_all_trees(deflate_state *s, int lcodes, int dcodes, int blcodes)
void build_tree(deflate_state *s, tree_desc *desc)
const static_tree_desc static_d_desc
void init_block(deflate_state *s)
void bi_flush(deflate_state *s)
int ZLIB_INTERNAL _tr_tally(deflate_state *s, unsigned dist, unsigned lc)
const int extra_blbits[BL_CODES]
void ZLIB_INTERNAL _tr_init(deflate_state *s)
int detect_data_type(deflate_state *s)
const static_tree_desc static_bl_desc
#define send_code(s, c, tree)
ct_data static_dtree[D_CODES]
unsigned bi_reverse(unsigned code, int len)
void ZLIB_INTERNAL _tr_stored_block(deflate_state *s, charf *buf, ulg stored_len, int last)
const int extra_lbits[LENGTH_CODES]
const int extra_dbits[D_CODES]
void ZLIB_INTERNAL _tr_flush_bits(deflate_state *s)
void send_tree(deflate_state *s, ct_data *tree, int max_code)
ct_data static_ltree[L_CODES+2]
#define smaller(tree, n, m, depth)
const uch bl_order[BL_CODES]
int base_length[LENGTH_CODES]
uch _length_code[MAX_MATCH-MIN_MATCH+1]
void compress_block(deflate_state *s, const ct_data *ltree, const ct_data *dtree)
uch _dist_code[DIST_CODE_LEN]
void bi_windup(deflate_state *s)
void scan_tree(deflate_state *s, ct_data *tree, int max_code)
void ZLIB_INTERNAL _tr_flush_block(deflate_state *s, charf *buf, ulg stored_len, int last)
void ZLIB_INTERNAL _tr_align(deflate_state *s)
#define pqremove(s, tree, top)
void gen_codes(ct_data *tree, int max_code, ushf *bl_count)
void gen_bitlen(deflate_state *s, tree_desc *desc)
const static_tree_desc static_l_desc
void pqdownheap(deflate_state *s, ct_data *tree, int k)
#define send_bits(s, value, length)
int build_bl_tree(deflate_state *s)
_In_ UCHAR _In_ UCHAR _In_ ULONG Code