comparison app/src/main/java/com/jcraft/jzlib/Deflate.java @ 438:d29cce60f393

migrate from Eclipse to Android Studio
author Carl Byington <carl@five-ten-sg.com>
date Thu, 03 Dec 2015 11:23:55 -0800
parents src/com/jcraft/jzlib/Deflate.java@46c2115ae1c8
children
comparison
equal deleted inserted replaced
437:208b31032318 438:d29cce60f393
1 /* -*-mode:java; c-basic-offset:2; -*- */
2 /*
3 Copyright (c) 2000-2011 ymnk, JCraft,Inc. All rights reserved.
4
5 Redistribution and use in source and binary forms, with or without
6 modification, are permitted provided that the following conditions are met:
7
8 1. Redistributions of source code must retain the above copyright notice,
9 this list of conditions and the following disclaimer.
10
11 2. Redistributions in binary form must reproduce the above copyright
12 notice, this list of conditions and the following disclaimer in
13 the documentation and/or other materials provided with the distribution.
14
15 3. The names of the authors may not be used to endorse or promote products
16 derived from this software without specific prior written permission.
17
18 THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED WARRANTIES,
19 INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
20 FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL JCRAFT,
21 INC. OR ANY CONTRIBUTORS TO THIS SOFTWARE BE LIABLE FOR ANY DIRECT, INDIRECT,
22 INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
23 LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA,
24 OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
25 LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
26 NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
27 EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
28 */
29 /*
30 * This program is based on zlib-1.1.3, so all credit should go authors
31 * Jean-loup Gailly(jloup@gzip.org) and Mark Adler(madler@alumni.caltech.edu)
32 * and contributors of zlib.
33 */
34
35 package com.jcraft.jzlib;
36
37 public
38 final class Deflate implements Cloneable {
39
40 static final private int MAX_MEM_LEVEL=9;
41
42 static final private int Z_DEFAULT_COMPRESSION=-1;
43
44 static final private int MAX_WBITS=15; // 32K LZ77 window
45 static final private int DEF_MEM_LEVEL=8;
46
47 static class Config{
48 int good_length; // reduce lazy search above this match length
49 int max_lazy; // do not perform lazy search above this match length
50 int nice_length; // quit search above this match length
51 int max_chain;
52 int func;
53 Config(int good_length, int max_lazy,
54 int nice_length, int max_chain, int func){
55 this.good_length=good_length;
56 this.max_lazy=max_lazy;
57 this.nice_length=nice_length;
58 this.max_chain=max_chain;
59 this.func=func;
60 }
61 }
62
63 static final private int STORED=0;
64 static final private int FAST=1;
65 static final private int SLOW=2;
66 static final private Config[] config_table;
67 static{
68 config_table=new Config[10];
69 // good lazy nice chain
70 config_table[0]=new Config(0, 0, 0, 0, STORED);
71 config_table[1]=new Config(4, 4, 8, 4, FAST);
72 config_table[2]=new Config(4, 5, 16, 8, FAST);
73 config_table[3]=new Config(4, 6, 32, 32, FAST);
74
75 config_table[4]=new Config(4, 4, 16, 16, SLOW);
76 config_table[5]=new Config(8, 16, 32, 32, SLOW);
77 config_table[6]=new Config(8, 16, 128, 128, SLOW);
78 config_table[7]=new Config(8, 32, 128, 256, SLOW);
79 config_table[8]=new Config(32, 128, 258, 1024, SLOW);
80 config_table[9]=new Config(32, 258, 258, 4096, SLOW);
81 }
82
83 static final private String[] z_errmsg = {
84 "need dictionary", // Z_NEED_DICT 2
85 "stream end", // Z_STREAM_END 1
86 "", // Z_OK 0
87 "file error", // Z_ERRNO (-1)
88 "stream error", // Z_STREAM_ERROR (-2)
89 "data error", // Z_DATA_ERROR (-3)
90 "insufficient memory", // Z_MEM_ERROR (-4)
91 "buffer error", // Z_BUF_ERROR (-5)
92 "incompatible version",// Z_VERSION_ERROR (-6)
93 ""
94 };
95
96 // block not completed, need more input or more output
97 static final private int NeedMore=0;
98
99 // block flush performed
100 static final private int BlockDone=1;
101
102 // finish started, need only more output at next deflate
103 static final private int FinishStarted=2;
104
105 // finish done, accept no more input or output
106 static final private int FinishDone=3;
107
108 // preset dictionary flag in zlib header
109 static final private int PRESET_DICT=0x20;
110
111 static final private int Z_FILTERED=1;
112 static final private int Z_HUFFMAN_ONLY=2;
113 static final private int Z_DEFAULT_STRATEGY=0;
114
115 static final private int Z_NO_FLUSH=0;
116 static final private int Z_PARTIAL_FLUSH=1;
117 static final private int Z_SYNC_FLUSH=2;
118 static final private int Z_FULL_FLUSH=3;
119 static final private int Z_FINISH=4;
120
121 static final private int Z_OK=0;
122 static final private int Z_STREAM_END=1;
123 static final private int Z_NEED_DICT=2;
124 static final private int Z_ERRNO=-1;
125 static final private int Z_STREAM_ERROR=-2;
126 static final private int Z_DATA_ERROR=-3;
127 static final private int Z_MEM_ERROR=-4;
128 static final private int Z_BUF_ERROR=-5;
129 static final private int Z_VERSION_ERROR=-6;
130
131 static final private int INIT_STATE=42;
132 static final private int BUSY_STATE=113;
133 static final private int FINISH_STATE=666;
134
135 // The deflate compression method
136 static final private int Z_DEFLATED=8;
137
138 static final private int STORED_BLOCK=0;
139 static final private int STATIC_TREES=1;
140 static final private int DYN_TREES=2;
141
142 // The three kinds of block type
143 static final private int Z_BINARY=0;
144 static final private int Z_ASCII=1;
145 static final private int Z_UNKNOWN=2;
146
147 static final private int Buf_size=8*2;
148
149 // repeat previous bit length 3-6 times (2 bits of repeat count)
150 static final private int REP_3_6=16;
151
152 // repeat a zero length 3-10 times (3 bits of repeat count)
153 static final private int REPZ_3_10=17;
154
155 // repeat a zero length 11-138 times (7 bits of repeat count)
156 static final private int REPZ_11_138=18;
157
158 static final private int MIN_MATCH=3;
159 static final private int MAX_MATCH=258;
160 static final private int MIN_LOOKAHEAD=(MAX_MATCH+MIN_MATCH+1);
161
162 static final private int MAX_BITS=15;
163 static final private int D_CODES=30;
164 static final private int BL_CODES=19;
165 static final private int LENGTH_CODES=29;
166 static final private int LITERALS=256;
167 static final private int L_CODES=(LITERALS+1+LENGTH_CODES);
168 static final private int HEAP_SIZE=(2*L_CODES+1);
169
170 static final private int END_BLOCK=256;
171
172 ZStream strm; // pointer back to this zlib stream
173 int status; // as the name implies
174 byte[] pending_buf; // output still pending
175 int pending_buf_size; // size of pending_buf
176 int pending_out; // next pending byte to output to the stream
177 int pending; // nb of bytes in the pending buffer
178 int wrap = 1;
179 byte data_type; // UNKNOWN, BINARY or ASCII
180 byte method; // STORED (for zip only) or DEFLATED
181 int last_flush; // value of flush param for previous deflate call
182
183 int w_size; // LZ77 window size (32K by default)
184 int w_bits; // log2(w_size) (8..16)
185 int w_mask; // w_size - 1
186
187 byte[] window;
188 // Sliding window. Input bytes are read into the second half of the window,
189 // and move to the first half later to keep a dictionary of at least wSize
190 // bytes. With this organization, matches are limited to a distance of
191 // wSize-MAX_MATCH bytes, but this ensures that IO is always
192 // performed with a length multiple of the block size. Also, it limits
193 // the window size to 64K, which is quite useful on MSDOS.
194 // To do: use the user input buffer as sliding window.
195
196 int window_size;
197 // Actual size of window: 2*wSize, except when the user input buffer
198 // is directly used as sliding window.
199
200 short[] prev;
201 // Link to older string with same hash index. To limit the size of this
202 // array to 64K, this link is maintained only for the last 32K strings.
203 // An index in this array is thus a window index modulo 32K.
204
205 short[] head; // Heads of the hash chains or NIL.
206
207 int ins_h; // hash index of string to be inserted
208 int hash_size; // number of elements in hash table
209 int hash_bits; // log2(hash_size)
210 int hash_mask; // hash_size-1
211
212 // Number of bits by which ins_h must be shifted at each input
213 // step. It must be such that after MIN_MATCH steps, the oldest
214 // byte no longer takes part in the hash key, that is:
215 // hash_shift * MIN_MATCH >= hash_bits
216 int hash_shift;
217
218 // Window position at the beginning of the current output block. Gets
219 // negative when the window is moved backwards.
220
221 int block_start;
222
223 int match_length; // length of best match
224 int prev_match; // previous match
225 int match_available; // set if previous match exists
226 int strstart; // start of string to insert
227 int match_start; // start of matching string
228 int lookahead; // number of valid bytes ahead in window
229
230 // Length of the best match at previous step. Matches not greater than this
231 // are discarded. This is used in the lazy match evaluation.
232 int prev_length;
233
234 // To speed up deflation, hash chains are never searched beyond this
235 // length. A higher limit improves compression ratio but degrades the speed.
236 int max_chain_length;
237
238 // Attempt to find a better match only when the current match is strictly
239 // smaller than this value. This mechanism is used only for compression
240 // levels >= 4.
241 int max_lazy_match;
242
243 // Insert new strings in the hash table only if the match length is not
244 // greater than this length. This saves time but degrades compression.
245 // max_insert_length is used only for compression levels <= 3.
246
247 int level; // compression level (1..9)
248 int strategy; // favor or force Huffman coding
249
250 // Use a faster search when the previous match is longer than this
251 int good_match;
252
253 // Stop searching when current match exceeds this
254 int nice_match;
255
256 short[] dyn_ltree; // literal and length tree
257 short[] dyn_dtree; // distance tree
258 short[] bl_tree; // Huffman tree for bit lengths
259
260 Tree l_desc=new Tree(); // desc for literal tree
261 Tree d_desc=new Tree(); // desc for distance tree
262 Tree bl_desc=new Tree(); // desc for bit length tree
263
264 // number of codes at each bit length for an optimal tree
265 short[] bl_count=new short[MAX_BITS+1];
266 // working area to be used in Tree#gen_codes()
267 short[] next_code=new short[MAX_BITS+1];
268
269 // heap used to build the Huffman trees
270 int[] heap=new int[2*L_CODES+1];
271
272 int heap_len; // number of elements in the heap
273 int heap_max; // element of largest frequency
274 // The sons of heap[n] are heap[2*n] and heap[2*n+1]. heap[0] is not used.
275 // The same heap array is used to build all trees.
276
277 // Depth of each subtree used as tie breaker for trees of equal frequency
278 byte[] depth=new byte[2*L_CODES+1];
279
280 byte[] l_buf; // index for literals or lengths */
281
282 // Size of match buffer for literals/lengths. There are 4 reasons for
283 // limiting lit_bufsize to 64K:
284 // - frequencies can be kept in 16 bit counters
285 // - if compression is not successful for the first block, all input
286 // data is still in the window so we can still emit a stored block even
287 // when input comes from standard input. (This can also be done for
288 // all blocks if lit_bufsize is not greater than 32K.)
289 // - if compression is not successful for a file smaller than 64K, we can
290 // even emit a stored file instead of a stored block (saving 5 bytes).
291 // This is applicable only for zip (not gzip or zlib).
292 // - creating new Huffman trees less frequently may not provide fast
293 // adaptation to changes in the input data statistics. (Take for
294 // example a binary file with poorly compressible code followed by
295 // a highly compressible string table.) Smaller buffer sizes give
296 // fast adaptation but have of course the overhead of transmitting
297 // trees more frequently.
298 // - I can't count above 4
299 int lit_bufsize;
300
301 int last_lit; // running index in l_buf
302
303 // Buffer for distances. To simplify the code, d_buf and l_buf have
304 // the same number of elements. To use different lengths, an extra flag
305 // array would be necessary.
306
307 int d_buf; // index of pendig_buf
308
309 int opt_len; // bit length of current block with optimal trees
310 int static_len; // bit length of current block with static trees
311 int matches; // number of string matches in current block
312 int last_eob_len; // bit length of EOB code for last block
313
314 // Output buffer. bits are inserted starting at the bottom (least
315 // significant bits).
316 short bi_buf;
317
318 // Number of valid bits in bi_buf. All bits above the last valid bit
319 // are always zero.
320 int bi_valid;
321
322 GZIPHeader gheader = null;
323
324 Deflate(ZStream strm){
325 this.strm=strm;
326 dyn_ltree=new short[HEAP_SIZE*2];
327 dyn_dtree=new short[(2*D_CODES+1)*2]; // distance tree
328 bl_tree=new short[(2*BL_CODES+1)*2]; // Huffman tree for bit lengths
329 }
330
331 void lm_init() {
332 window_size=2*w_size;
333
334 head[hash_size-1]=0;
335 for(int i=0; i<hash_size-1; i++){
336 head[i]=0;
337 }
338
339 // Set the default configuration parameters:
340 max_lazy_match = Deflate.config_table[level].max_lazy;
341 good_match = Deflate.config_table[level].good_length;
342 nice_match = Deflate.config_table[level].nice_length;
343 max_chain_length = Deflate.config_table[level].max_chain;
344
345 strstart = 0;
346 block_start = 0;
347 lookahead = 0;
348 match_length = prev_length = MIN_MATCH-1;
349 match_available = 0;
350 ins_h = 0;
351 }
352
353 // Initialize the tree data structures for a new zlib stream.
354 void tr_init(){
355
356 l_desc.dyn_tree = dyn_ltree;
357 l_desc.stat_desc = StaticTree.static_l_desc;
358
359 d_desc.dyn_tree = dyn_dtree;
360 d_desc.stat_desc = StaticTree.static_d_desc;
361
362 bl_desc.dyn_tree = bl_tree;
363 bl_desc.stat_desc = StaticTree.static_bl_desc;
364
365 bi_buf = 0;
366 bi_valid = 0;
367 last_eob_len = 8; // enough lookahead for inflate
368
369 // Initialize the first block of the first file:
370 init_block();
371 }
372
373 void init_block(){
374 // Initialize the trees.
375 for(int i = 0; i < L_CODES; i++) dyn_ltree[i*2] = 0;
376 for(int i= 0; i < D_CODES; i++) dyn_dtree[i*2] = 0;
377 for(int i= 0; i < BL_CODES; i++) bl_tree[i*2] = 0;
378
379 dyn_ltree[END_BLOCK*2] = 1;
380 opt_len = static_len = 0;
381 last_lit = matches = 0;
382 }
383
384 // Restore the heap property by moving down the tree starting at node k,
385 // exchanging a node with the smallest of its two sons if necessary, stopping
386 // when the heap property is re-established (each father smaller than its
387 // two sons).
388 void pqdownheap(short[] tree, // the tree to restore
389 int k // node to move down
390 ){
391 int v = heap[k];
392 int j = k << 1; // left son of k
393 while (j <= heap_len) {
394 // Set j to the smallest of the two sons:
395 if (j < heap_len &&
396 smaller(tree, heap[j+1], heap[j], depth)){
397 j++;
398 }
399 // Exit if v is smaller than both sons
400 if(smaller(tree, v, heap[j], depth)) break;
401
402 // Exchange v with the smallest son
403 heap[k]=heap[j]; k = j;
404 // And continue down the tree, setting j to the left son of k
405 j <<= 1;
406 }
407 heap[k] = v;
408 }
409
410 static boolean smaller(short[] tree, int n, int m, byte[] depth){
411 short tn2=tree[n*2];
412 short tm2=tree[m*2];
413 return (tn2<tm2 ||
414 (tn2==tm2 && depth[n] <= depth[m]));
415 }
416
417 // Scan a literal or distance tree to determine the frequencies of the codes
418 // in the bit length tree.
419 void scan_tree (short[] tree,// the tree to be scanned
420 int max_code // and its largest code of non zero frequency
421 ){
422 int n; // iterates over all tree elements
423 int prevlen = -1; // last emitted length
424 int curlen; // length of current code
425 int nextlen = tree[0*2+1]; // length of next code
426 int count = 0; // repeat count of the current code
427 int max_count = 7; // max repeat count
428 int min_count = 4; // min repeat count
429
430 if (nextlen == 0){ max_count = 138; min_count = 3; }
431 tree[(max_code+1)*2+1] = (short)0xffff; // guard
432
433 for(n = 0; n <= max_code; n++) {
434 curlen = nextlen; nextlen = tree[(n+1)*2+1];
435 if(++count < max_count && curlen == nextlen) {
436 continue;
437 }
438 else if(count < min_count) {
439 bl_tree[curlen*2] += count;
440 }
441 else if(curlen != 0) {
442 if(curlen != prevlen) bl_tree[curlen*2]++;
443 bl_tree[REP_3_6*2]++;
444 }
445 else if(count <= 10) {
446 bl_tree[REPZ_3_10*2]++;
447 }
448 else{
449 bl_tree[REPZ_11_138*2]++;
450 }
451 count = 0; prevlen = curlen;
452 if(nextlen == 0) {
453 max_count = 138; min_count = 3;
454 }
455 else if(curlen == nextlen) {
456 max_count = 6; min_count = 3;
457 }
458 else{
459 max_count = 7; min_count = 4;
460 }
461 }
462 }
463
464 // Construct the Huffman tree for the bit lengths and return the index in
465 // bl_order of the last bit length code to send.
466 int build_bl_tree(){
467 int max_blindex; // index of last bit length code of non zero freq
468
469 // Determine the bit length frequencies for literal and distance trees
470 scan_tree(dyn_ltree, l_desc.max_code);
471 scan_tree(dyn_dtree, d_desc.max_code);
472
473 // Build the bit length tree:
474 bl_desc.build_tree(this);
475 // opt_len now includes the length of the tree representations, except
476 // the lengths of the bit lengths codes and the 5+5+4 bits for the counts.
477
478 // Determine the number of bit length codes to send. The pkzip format
479 // requires that at least 4 bit length codes be sent. (appnote.txt says
480 // 3 but the actual value used is 4.)
481 for (max_blindex = BL_CODES-1; max_blindex >= 3; max_blindex--) {
482 if (bl_tree[Tree.bl_order[max_blindex]*2+1] != 0) break;
483 }
484 // Update opt_len to include the bit length tree and counts
485 opt_len += 3*(max_blindex+1) + 5+5+4;
486
487 return max_blindex;
488 }
489
490
491 // Send the header for a block using dynamic Huffman trees: the counts, the
492 // lengths of the bit length codes, the literal tree and the distance tree.
493 // IN assertion: lcodes >= 257, dcodes >= 1, blcodes >= 4.
494 void send_all_trees(int lcodes, int dcodes, int blcodes){
495 int rank; // index in bl_order
496
497 send_bits(lcodes-257, 5); // not +255 as stated in appnote.txt
498 send_bits(dcodes-1, 5);
499 send_bits(blcodes-4, 4); // not -3 as stated in appnote.txt
500 for (rank = 0; rank < blcodes; rank++) {
501 send_bits(bl_tree[Tree.bl_order[rank]*2+1], 3);
502 }
503 send_tree(dyn_ltree, lcodes-1); // literal tree
504 send_tree(dyn_dtree, dcodes-1); // distance tree
505 }
506
507 // Send a literal or distance tree in compressed form, using the codes in
508 // bl_tree.
509 void send_tree (short[] tree,// the tree to be sent
510 int max_code // and its largest code of non zero frequency
511 ){
512 int n; // iterates over all tree elements
513 int prevlen = -1; // last emitted length
514 int curlen; // length of current code
515 int nextlen = tree[0*2+1]; // length of next code
516 int count = 0; // repeat count of the current code
517 int max_count = 7; // max repeat count
518 int min_count = 4; // min repeat count
519
520 if (nextlen == 0){ max_count = 138; min_count = 3; }
521
522 for (n = 0; n <= max_code; n++) {
523 curlen = nextlen; nextlen = tree[(n+1)*2+1];
524 if(++count < max_count && curlen == nextlen) {
525 continue;
526 }
527 else if(count < min_count) {
528 do { send_code(curlen, bl_tree); } while (--count != 0);
529 }
530 else if(curlen != 0){
531 if(curlen != prevlen){
532 send_code(curlen, bl_tree); count--;
533 }
534 send_code(REP_3_6, bl_tree);
535 send_bits(count-3, 2);
536 }
537 else if(count <= 10){
538 send_code(REPZ_3_10, bl_tree);
539 send_bits(count-3, 3);
540 }
541 else{
542 send_code(REPZ_11_138, bl_tree);
543 send_bits(count-11, 7);
544 }
545 count = 0; prevlen = curlen;
546 if(nextlen == 0){
547 max_count = 138; min_count = 3;
548 }
549 else if(curlen == nextlen){
550 max_count = 6; min_count = 3;
551 }
552 else{
553 max_count = 7; min_count = 4;
554 }
555 }
556 }
557
558 // Output a byte on the stream.
559 // IN assertion: there is enough room in pending_buf.
560 final void put_byte(byte[] p, int start, int len){
561 System.arraycopy(p, start, pending_buf, pending, len);
562 pending+=len;
563 }
564
565 final void put_byte(byte c){
566 pending_buf[pending++]=c;
567 }
568 final void put_short(int w) {
569 put_byte((byte)(w/*&0xff*/));
570 put_byte((byte)(w>>>8));
571 }
572 final void putShortMSB(int b){
573 put_byte((byte)(b>>8));
574 put_byte((byte)(b/*&0xff*/));
575 }
576
577 final void send_code(int c, short[] tree){
578 int c2=c*2;
579 send_bits((tree[c2]&0xffff), (tree[c2+1]&0xffff));
580 }
581
582 void send_bits(int value, int length){
583 int len = length;
584 if (bi_valid > (int)Buf_size - len) {
585 int val = value;
586 // bi_buf |= (val << bi_valid);
587 bi_buf |= ((val << bi_valid)&0xffff);
588 put_short(bi_buf);
589 bi_buf = (short)(val >>> (Buf_size - bi_valid));
590 bi_valid += len - Buf_size;
591 } else {
592 // bi_buf |= (value) << bi_valid;
593 bi_buf |= (((value) << bi_valid)&0xffff);
594 bi_valid += len;
595 }
596 }
597
598 // Send one empty static block to give enough lookahead for inflate.
599 // This takes 10 bits, of which 7 may remain in the bit buffer.
600 // The current inflate code requires 9 bits of lookahead. If the
601 // last two codes for the previous block (real code plus EOB) were coded
602 // on 5 bits or less, inflate may have only 5+3 bits of lookahead to decode
603 // the last real code. In this case we send two empty static blocks instead
604 // of one. (There are no problems if the previous block is stored or fixed.)
605 // To simplify the code, we assume the worst case of last real code encoded
606 // on one bit only.
607 void _tr_align(){
608 send_bits(STATIC_TREES<<1, 3);
609 send_code(END_BLOCK, StaticTree.static_ltree);
610
611 bi_flush();
612
613 // Of the 10 bits for the empty block, we have already sent
614 // (10 - bi_valid) bits. The lookahead for the last real code (before
615 // the EOB of the previous block) was thus at least one plus the length
616 // of the EOB plus what we have just sent of the empty static block.
617 if (1 + last_eob_len + 10 - bi_valid < 9) {
618 send_bits(STATIC_TREES<<1, 3);
619 send_code(END_BLOCK, StaticTree.static_ltree);
620 bi_flush();
621 }
622 last_eob_len = 7;
623 }
624
625
626 // Save the match info and tally the frequency counts. Return true if
627 // the current block must be flushed.
628 boolean _tr_tally (int dist, // distance of matched string
629 int lc // match length-MIN_MATCH or unmatched char (if dist==0)
630 ){
631
632 pending_buf[d_buf+last_lit*2] = (byte)(dist>>>8);
633 pending_buf[d_buf+last_lit*2+1] = (byte)dist;
634
635 l_buf[last_lit] = (byte)lc; last_lit++;
636
637 if (dist == 0) {
638 // lc is the unmatched char
639 dyn_ltree[lc*2]++;
640 }
641 else {
642 matches++;
643 // Here, lc is the match length - MIN_MATCH
644 dist--; // dist = match distance - 1
645 dyn_ltree[(Tree._length_code[lc]+LITERALS+1)*2]++;
646 dyn_dtree[Tree.d_code(dist)*2]++;
647 }
648
649 if ((last_lit & 0x1fff) == 0 && level > 2) {
650 // Compute an upper bound for the compressed length
651 int out_length = last_lit*8;
652 int in_length = strstart - block_start;
653 int dcode;
654 for (dcode = 0; dcode < D_CODES; dcode++) {
655 out_length += (int)dyn_dtree[dcode*2] *
656 (5L+Tree.extra_dbits[dcode]);
657 }
658 out_length >>>= 3;
659 if ((matches < (last_lit/2)) && out_length < in_length/2) return true;
660 }
661
662 return (last_lit == lit_bufsize-1);
663 // We avoid equality with lit_bufsize because of wraparound at 64K
664 // on 16 bit machines and because stored blocks are restricted to
665 // 64K-1 bytes.
666 }
667
668 // Send the block data compressed using the given Huffman trees
669 void compress_block(short[] ltree, short[] dtree){
670 int dist; // distance of matched string
671 int lc; // match length or unmatched char (if dist == 0)
672 int lx = 0; // running index in l_buf
673 int code; // the code to send
674 int extra; // number of extra bits to send
675
676 if (last_lit != 0){
677 do{
678 dist=((pending_buf[d_buf+lx*2]<<8)&0xff00)|
679 (pending_buf[d_buf+lx*2+1]&0xff);
680 lc=(l_buf[lx])&0xff; lx++;
681
682 if(dist == 0){
683 send_code(lc, ltree); // send a literal byte
684 }
685 else{
686 // Here, lc is the match length - MIN_MATCH
687 code = Tree._length_code[lc];
688
689 send_code(code+LITERALS+1, ltree); // send the length code
690 extra = Tree.extra_lbits[code];
691 if(extra != 0){
692 lc -= Tree.base_length[code];
693 send_bits(lc, extra); // send the extra length bits
694 }
695 dist--; // dist is now the match distance - 1
696 code = Tree.d_code(dist);
697
698 send_code(code, dtree); // send the distance code
699 extra = Tree.extra_dbits[code];
700 if (extra != 0) {
701 dist -= Tree.base_dist[code];
702 send_bits(dist, extra); // send the extra distance bits
703 }
704 } // literal or match pair ?
705
706 // Check that the overlay between pending_buf and d_buf+l_buf is ok:
707 }
708 while (lx < last_lit);
709 }
710
711 send_code(END_BLOCK, ltree);
712 last_eob_len = ltree[END_BLOCK*2+1];
713 }
714
715 // Set the data type to ASCII or BINARY, using a crude approximation:
716 // binary if more than 20% of the bytes are <= 6 or >= 128, ascii otherwise.
717 // IN assertion: the fields freq of dyn_ltree are set and the total of all
718 // frequencies does not exceed 64K (to fit in an int on 16 bit machines).
719 void set_data_type(){
720 int n = 0;
721 int ascii_freq = 0;
722 int bin_freq = 0;
723 while(n<7){ bin_freq += dyn_ltree[n*2]; n++;}
724 while(n<128){ ascii_freq += dyn_ltree[n*2]; n++;}
725 while(n<LITERALS){ bin_freq += dyn_ltree[n*2]; n++;}
726 data_type=(byte)(bin_freq > (ascii_freq >>> 2) ? Z_BINARY : Z_ASCII);
727 }
728
729 // Flush the bit buffer, keeping at most 7 bits in it.
730 void bi_flush(){
731 if (bi_valid == 16) {
732 put_short(bi_buf);
733 bi_buf=0;
734 bi_valid=0;
735 }
736 else if (bi_valid >= 8) {
737 put_byte((byte)bi_buf);
738 bi_buf>>>=8;
739 bi_valid-=8;
740 }
741 }
742
743 // Flush the bit buffer and align the output on a byte boundary
744 void bi_windup(){
745 if (bi_valid > 8) {
746 put_short(bi_buf);
747 } else if (bi_valid > 0) {
748 put_byte((byte)bi_buf);
749 }
750 bi_buf = 0;
751 bi_valid = 0;
752 }
753
754 // Copy a stored block, storing first the length and its
755 // one's complement if requested.
756 void copy_block(int buf, // the input data
757 int len, // its length
758 boolean header // true if block header must be written
759 ){
760 int index=0;
761 bi_windup(); // align on byte boundary
762 last_eob_len = 8; // enough lookahead for inflate
763
764 if (header) {
765 put_short((short)len);
766 put_short((short)~len);
767 }
768
769 // while(len--!=0) {
770 // put_byte(window[buf+index]);
771 // index++;
772 // }
773 put_byte(window, buf, len);
774 }
775
776 void flush_block_only(boolean eof){
777 _tr_flush_block(block_start>=0 ? block_start : -1,
778 strstart-block_start,
779 eof);
780 block_start=strstart;
781 strm.flush_pending();
782 }
783
784 // Copy without compression as much as possible from the input stream, return
785 // the current block state.
786 // This function does not insert new strings in the dictionary since
787 // uncompressible data is probably not useful. This function is used
788 // only for the level=0 compression option.
789 // NOTE: this function should be optimized to avoid extra copying from
790 // window to pending_buf.
791 int deflate_stored(int flush){
792 // Stored blocks are limited to 0xffff bytes, pending_buf is limited
793 // to pending_buf_size, and each stored block has a 5 byte header:
794
795 int max_block_size = 0xffff;
796 int max_start;
797
798 if(max_block_size > pending_buf_size - 5) {
799 max_block_size = pending_buf_size - 5;
800 }
801
802 // Copy as much as possible from input to output:
803 while(true){
804 // Fill the window as much as possible:
805 if(lookahead<=1){
806 fill_window();
807 if(lookahead==0 && flush==Z_NO_FLUSH) return NeedMore;
808 if(lookahead==0) break; // flush the current block
809 }
810
811 strstart+=lookahead;
812 lookahead=0;
813
814 // Emit a stored block if pending_buf will be full:
815 max_start=block_start+max_block_size;
816 if(strstart==0|| strstart>=max_start) {
817 // strstart == 0 is possible when wraparound on 16-bit machine
818 lookahead = (int)(strstart-max_start);
819 strstart = (int)max_start;
820
821 flush_block_only(false);
822 if(strm.avail_out==0) return NeedMore;
823
824 }
825
826 // Flush if we may have to slide, otherwise block_start may become
827 // negative and the data will be gone:
828 if(strstart-block_start >= w_size-MIN_LOOKAHEAD) {
829 flush_block_only(false);
830 if(strm.avail_out==0) return NeedMore;
831 }
832 }
833
834 flush_block_only(flush == Z_FINISH);
835 if(strm.avail_out==0)
836 return (flush == Z_FINISH) ? FinishStarted : NeedMore;
837
838 return flush == Z_FINISH ? FinishDone : BlockDone;
839 }
840
841 // Send a stored block
842 void _tr_stored_block(int buf, // input block
843 int stored_len, // length of input block
844 boolean eof // true if this is the last block for a file
845 ){
846 send_bits((STORED_BLOCK<<1)+(eof?1:0), 3); // send block type
847 copy_block(buf, stored_len, true); // with header
848 }
849
850 // Determine the best encoding for the current block: dynamic trees, static
851 // trees or store, and output the encoded block to the zip file.
852 void _tr_flush_block(int buf, // input block, or NULL if too old
853 int stored_len, // length of input block
854 boolean eof // true if this is the last block for a file
855 ) {
856 int opt_lenb, static_lenb;// opt_len and static_len in bytes
857 int max_blindex = 0; // index of last bit length code of non zero freq
858
859 // Build the Huffman trees unless a stored block is forced
860 if(level > 0) {
861 // Check if the file is ascii or binary
862 if(data_type == Z_UNKNOWN) set_data_type();
863
864 // Construct the literal and distance trees
865 l_desc.build_tree(this);
866
867 d_desc.build_tree(this);
868
869 // At this point, opt_len and static_len are the total bit lengths of
870 // the compressed block data, excluding the tree representations.
871
872 // Build the bit length tree for the above two trees, and get the index
873 // in bl_order of the last bit length code to send.
874 max_blindex=build_bl_tree();
875
876 // Determine the best encoding. Compute first the block length in bytes
877 opt_lenb=(opt_len+3+7)>>>3;
878 static_lenb=(static_len+3+7)>>>3;
879
880 if(static_lenb<=opt_lenb) opt_lenb=static_lenb;
881 }
882 else {
883 opt_lenb=static_lenb=stored_len+5; // force a stored block
884 }
885
886 if(stored_len+4<=opt_lenb && buf != -1){
887 // 4: two words for the lengths
888 // The test buf != NULL is only necessary if LIT_BUFSIZE > WSIZE.
889 // Otherwise we can't have processed more than WSIZE input bytes since
890 // the last block flush, because compression would have been
891 // successful. If LIT_BUFSIZE <= WSIZE, it is never too late to
892 // transform a block into a stored block.
893 _tr_stored_block(buf, stored_len, eof);
894 }
895 else if(static_lenb == opt_lenb){
896 send_bits((STATIC_TREES<<1)+(eof?1:0), 3);
897 compress_block(StaticTree.static_ltree, StaticTree.static_dtree);
898 }
899 else{
900 send_bits((DYN_TREES<<1)+(eof?1:0), 3);
901 send_all_trees(l_desc.max_code+1, d_desc.max_code+1, max_blindex+1);
902 compress_block(dyn_ltree, dyn_dtree);
903 }
904
905 // The above check is made mod 2^32, for files larger than 512 MB
906 // and uLong implemented on 32 bits.
907
908 init_block();
909
910 if(eof){
911 bi_windup();
912 }
913 }
914
915 // Fill the window when the lookahead becomes insufficient.
916 // Updates strstart and lookahead.
917 //
918 // IN assertion: lookahead < MIN_LOOKAHEAD
919 // OUT assertions: strstart <= window_size-MIN_LOOKAHEAD
920 // At least one byte has been read, or avail_in == 0; reads are
921 // performed for at least two bytes (required for the zip translate_eol
922 // option -- not supported here).
923 void fill_window(){
924 int n, m;
925 int p;
926 int more; // Amount of free space at the end of the window.
927
928 do{
929 more = (window_size-lookahead-strstart);
930
931 // Deal with !@#$% 64K limit:
932 if(more==0 && strstart==0 && lookahead==0){
933 more = w_size;
934 }
935 else if(more==-1) {
936 // Very unlikely, but possible on 16 bit machine if strstart == 0
937 // and lookahead == 1 (input done one byte at time)
938 more--;
939
940 // If the window is almost full and there is insufficient lookahead,
941 // move the upper half to the lower one to make room in the upper half.
942 }
943 else if(strstart >= w_size+ w_size-MIN_LOOKAHEAD) {
944 System.arraycopy(window, w_size, window, 0, w_size);
945 match_start-=w_size;
946 strstart-=w_size; // we now have strstart >= MAX_DIST
947 block_start-=w_size;
948
949 // Slide the hash table (could be avoided with 32 bit values
950 // at the expense of memory usage). We slide even when level == 0
951 // to keep the hash table consistent if we switch back to level > 0
952 // later. (Using level 0 permanently is not an optimal usage of
953 // zlib, so we don't care about this pathological case.)
954
955 n = hash_size;
956 p=n;
957 do {
958 m = (head[--p]&0xffff);
959 head[p]=(m>=w_size ? (short)(m-w_size) : 0);
960 }
961 while (--n != 0);
962
963 n = w_size;
964 p = n;
965 do {
966 m = (prev[--p]&0xffff);
967 prev[p] = (m >= w_size ? (short)(m-w_size) : 0);
968 // If n is not on any hash chain, prev[n] is garbage but
969 // its value will never be used.
970 }
971 while (--n!=0);
972 more += w_size;
973 }
974
975 if (strm.avail_in == 0) return;
976
977 // If there was no sliding:
978 // strstart <= WSIZE+MAX_DIST-1 && lookahead <= MIN_LOOKAHEAD - 1 &&
979 // more == window_size - lookahead - strstart
980 // => more >= window_size - (MIN_LOOKAHEAD-1 + WSIZE + MAX_DIST-1)
981 // => more >= window_size - 2*WSIZE + 2
982 // In the BIG_MEM or MMAP case (not yet supported),
983 // window_size == input_size + MIN_LOOKAHEAD &&
984 // strstart + s->lookahead <= input_size => more >= MIN_LOOKAHEAD.
985 // Otherwise, window_size == 2*WSIZE so more >= 2.
986 // If there was sliding, more >= WSIZE. So in all cases, more >= 2.
987
988 n = strm.read_buf(window, strstart + lookahead, more);
989 lookahead += n;
990
991 // Initialize the hash value now that we have some input:
992 if(lookahead >= MIN_MATCH) {
993 ins_h = window[strstart]&0xff;
994 ins_h=(((ins_h)<<hash_shift)^(window[strstart+1]&0xff))&hash_mask;
995 }
996 // If the whole input has less than MIN_MATCH bytes, ins_h is garbage,
997 // but this is not important since only literal bytes will be emitted.
998 }
999 while (lookahead < MIN_LOOKAHEAD && strm.avail_in != 0);
1000 }
1001
1002 // Compress as much as possible from the input stream, return the current
1003 // block state.
1004 // This function does not perform lazy evaluation of matches and inserts
1005 // new strings in the dictionary only for unmatched strings or for short
1006 // matches. It is used only for the fast compression options.
1007 int deflate_fast(int flush){
1008 // short hash_head = 0; // head of the hash chain
1009 int hash_head = 0; // head of the hash chain
1010 boolean bflush; // set if current block must be flushed
1011
1012 while(true){
1013 // Make sure that we always have enough lookahead, except
1014 // at the end of the input file. We need MAX_MATCH bytes
1015 // for the next match, plus MIN_MATCH bytes to insert the
1016 // string following the next match.
1017 if(lookahead < MIN_LOOKAHEAD){
1018 fill_window();
1019 if(lookahead < MIN_LOOKAHEAD && flush == Z_NO_FLUSH){
1020 return NeedMore;
1021 }
1022 if(lookahead == 0) break; // flush the current block
1023 }
1024
1025 // Insert the string window[strstart .. strstart+2] in the
1026 // dictionary, and set hash_head to the head of the hash chain:
1027 if(lookahead >= MIN_MATCH){
1028 ins_h=(((ins_h)<<hash_shift)^(window[(strstart)+(MIN_MATCH-1)]&0xff))&hash_mask;
1029
1030 // prev[strstart&w_mask]=hash_head=head[ins_h];
1031 hash_head=(head[ins_h]&0xffff);
1032 prev[strstart&w_mask]=head[ins_h];
1033 head[ins_h]=(short)strstart;
1034 }
1035
1036 // Find the longest match, discarding those <= prev_length.
1037 // At this point we have always match_length < MIN_MATCH
1038
1039 if(hash_head!=0L &&
1040 ((strstart-hash_head)&0xffff) <= w_size-MIN_LOOKAHEAD
1041 ){
1042 // To simplify the code, we prevent matches with the string
1043 // of window index 0 (in particular we have to avoid a match
1044 // of the string with itself at the start of the input file).
1045 if(strategy != Z_HUFFMAN_ONLY){
1046 match_length=longest_match (hash_head);
1047 }
1048 // longest_match() sets match_start
1049 }
1050 if(match_length>=MIN_MATCH){
1051 // check_match(strstart, match_start, match_length);
1052
1053 bflush=_tr_tally(strstart-match_start, match_length-MIN_MATCH);
1054
1055 lookahead -= match_length;
1056
1057 // Insert new strings in the hash table only if the match length
1058 // is not too large. This saves time but degrades compression.
1059 if(match_length <= max_lazy_match &&
1060 lookahead >= MIN_MATCH) {
1061 match_length--; // string at strstart already in hash table
1062 do{
1063 strstart++;
1064
1065 ins_h=((ins_h<<hash_shift)^(window[(strstart)+(MIN_MATCH-1)]&0xff))&hash_mask;
1066 // prev[strstart&w_mask]=hash_head=head[ins_h];
1067 hash_head=(head[ins_h]&0xffff);
1068 prev[strstart&w_mask]=head[ins_h];
1069 head[ins_h]=(short)strstart;
1070
1071 // strstart never exceeds WSIZE-MAX_MATCH, so there are
1072 // always MIN_MATCH bytes ahead.
1073 }
1074 while (--match_length != 0);
1075 strstart++;
1076 }
1077 else{
1078 strstart += match_length;
1079 match_length = 0;
1080 ins_h = window[strstart]&0xff;
1081
1082 ins_h=(((ins_h)<<hash_shift)^(window[strstart+1]&0xff))&hash_mask;
1083 // If lookahead < MIN_MATCH, ins_h is garbage, but it does not
1084 // matter since it will be recomputed at next deflate call.
1085 }
1086 }
1087 else {
1088 // No match, output a literal byte
1089
1090 bflush=_tr_tally(0, window[strstart]&0xff);
1091 lookahead--;
1092 strstart++;
1093 }
1094 if (bflush){
1095
1096 flush_block_only(false);
1097 if(strm.avail_out==0) return NeedMore;
1098 }
1099 }
1100
1101 flush_block_only(flush == Z_FINISH);
1102 if(strm.avail_out==0){
1103 if(flush == Z_FINISH) return FinishStarted;
1104 else return NeedMore;
1105 }
1106 return flush==Z_FINISH ? FinishDone : BlockDone;
1107 }
1108
1109 // Same as above, but achieves better compression. We use a lazy
1110 // evaluation for matches: a match is finally adopted only if there is
1111 // no better match at the next window position.
1112 int deflate_slow(int flush){
1113 // short hash_head = 0; // head of hash chain
1114 int hash_head = 0; // head of hash chain
1115 boolean bflush; // set if current block must be flushed
1116
1117 // Process the input block.
1118 while(true){
1119 // Make sure that we always have enough lookahead, except
1120 // at the end of the input file. We need MAX_MATCH bytes
1121 // for the next match, plus MIN_MATCH bytes to insert the
1122 // string following the next match.
1123
1124 if (lookahead < MIN_LOOKAHEAD) {
1125 fill_window();
1126 if(lookahead < MIN_LOOKAHEAD && flush == Z_NO_FLUSH) {
1127 return NeedMore;
1128 }
1129 if(lookahead == 0) break; // flush the current block
1130 }
1131
1132 // Insert the string window[strstart .. strstart+2] in the
1133 // dictionary, and set hash_head to the head of the hash chain:
1134
1135 if(lookahead >= MIN_MATCH) {
1136 ins_h=(((ins_h)<<hash_shift)^(window[(strstart)+(MIN_MATCH-1)]&0xff)) & hash_mask;
1137 // prev[strstart&w_mask]=hash_head=head[ins_h];
1138 hash_head=(head[ins_h]&0xffff);
1139 prev[strstart&w_mask]=head[ins_h];
1140 head[ins_h]=(short)strstart;
1141 }
1142
1143 // Find the longest match, discarding those <= prev_length.
1144 prev_length = match_length; prev_match = match_start;
1145 match_length = MIN_MATCH-1;
1146
1147 if (hash_head != 0 && prev_length < max_lazy_match &&
1148 ((strstart-hash_head)&0xffff) <= w_size-MIN_LOOKAHEAD
1149 ){
1150 // To simplify the code, we prevent matches with the string
1151 // of window index 0 (in particular we have to avoid a match
1152 // of the string with itself at the start of the input file).
1153
1154 if(strategy != Z_HUFFMAN_ONLY) {
1155 match_length = longest_match(hash_head);
1156 }
1157 // longest_match() sets match_start
1158
1159 if (match_length <= 5 && (strategy == Z_FILTERED ||
1160 (match_length == MIN_MATCH &&
1161 strstart - match_start > 4096))) {
1162
1163 // If prev_match is also MIN_MATCH, match_start is garbage
1164 // but we will ignore the current match anyway.
1165 match_length = MIN_MATCH-1;
1166 }
1167 }
1168
1169 // If there was a match at the previous step and the current
1170 // match is not better, output the previous match:
1171 if(prev_length >= MIN_MATCH && match_length <= prev_length) {
1172 int max_insert = strstart + lookahead - MIN_MATCH;
1173 // Do not insert strings in hash table beyond this.
1174
1175 // check_match(strstart-1, prev_match, prev_length);
1176
1177 bflush=_tr_tally(strstart-1-prev_match, prev_length - MIN_MATCH);
1178
1179 // Insert in hash table all strings up to the end of the match.
1180 // strstart-1 and strstart are already inserted. If there is not
1181 // enough lookahead, the last two strings are not inserted in
1182 // the hash table.
1183 lookahead -= prev_length-1;
1184 prev_length -= 2;
1185 do{
1186 if(++strstart <= max_insert) {
1187 ins_h=(((ins_h)<<hash_shift)^(window[(strstart)+(MIN_MATCH-1)]&0xff))&hash_mask;
1188 //prev[strstart&w_mask]=hash_head=head[ins_h];
1189 hash_head=(head[ins_h]&0xffff);
1190 prev[strstart&w_mask]=head[ins_h];
1191 head[ins_h]=(short)strstart;
1192 }
1193 }
1194 while(--prev_length != 0);
1195 match_available = 0;
1196 match_length = MIN_MATCH-1;
1197 strstart++;
1198
1199 if (bflush){
1200 flush_block_only(false);
1201 if(strm.avail_out==0) return NeedMore;
1202 }
1203 } else if (match_available!=0) {
1204
1205 // If there was no match at the previous position, output a
1206 // single literal. If there was a match but the current match
1207 // is longer, truncate the previous match to a single literal.
1208
1209 bflush=_tr_tally(0, window[strstart-1]&0xff);
1210
1211 if (bflush) {
1212 flush_block_only(false);
1213 }
1214 strstart++;
1215 lookahead--;
1216 if(strm.avail_out == 0) return NeedMore;
1217 } else {
1218 // There is no previous match to compare with, wait for
1219 // the next step to decide.
1220
1221 match_available = 1;
1222 strstart++;
1223 lookahead--;
1224 }
1225 }
1226
1227 if(match_available!=0) {
1228 bflush=_tr_tally(0, window[strstart-1]&0xff);
1229 match_available = 0;
1230 }
1231 flush_block_only(flush == Z_FINISH);
1232
1233 if(strm.avail_out==0){
1234 if(flush == Z_FINISH) return FinishStarted;
1235 else return NeedMore;
1236 }
1237
1238 return flush == Z_FINISH ? FinishDone : BlockDone;
1239 }
1240
1241 int longest_match(int cur_match){
1242 int chain_length = max_chain_length; // max hash chain length
1243 int scan = strstart; // current string
1244 int match; // matched string
1245 int len; // length of current match
1246 int best_len = prev_length; // best match length so far
1247 int limit = strstart>(w_size-MIN_LOOKAHEAD) ?
1248 strstart-(w_size-MIN_LOOKAHEAD) : 0;
1249 int nice_match=this.nice_match;
1250
1251 // Stop when cur_match becomes <= limit. To simplify the code,
1252 // we prevent matches with the string of window index 0.
1253
1254 int wmask = w_mask;
1255
1256 int strend = strstart + MAX_MATCH;
1257 byte scan_end1 = window[scan+best_len-1];
1258 byte scan_end = window[scan+best_len];
1259
1260 // The code is optimized for HASH_BITS >= 8 and MAX_MATCH-2 multiple of 16.
1261 // It is easy to get rid of this optimization if necessary.
1262
1263 // Do not waste too much time if we already have a good match:
1264 if (prev_length >= good_match) {
1265 chain_length >>= 2;
1266 }
1267
1268 // Do not look for matches beyond the end of the input. This is necessary
1269 // to make deflate deterministic.
1270 if (nice_match > lookahead) nice_match = lookahead;
1271
1272 do {
1273 match = cur_match;
1274
1275 // Skip to next match if the match length cannot increase
1276 // or if the match length is less than 2:
1277 if (window[match+best_len] != scan_end ||
1278 window[match+best_len-1] != scan_end1 ||
1279 window[match] != window[scan] ||
1280 window[++match] != window[scan+1]) continue;
1281
1282 // The check at best_len-1 can be removed because it will be made
1283 // again later. (This heuristic is not always a win.)
1284 // It is not necessary to compare scan[2] and match[2] since they
1285 // are always equal when the other bytes match, given that
1286 // the hash keys are equal and that HASH_BITS >= 8.
1287 scan += 2; match++;
1288
1289 // We check for insufficient lookahead only every 8th comparison;
1290 // the 256th check will be made at strstart+258.
1291 do {
1292 } while (window[++scan] == window[++match] &&
1293 window[++scan] == window[++match] &&
1294 window[++scan] == window[++match] &&
1295 window[++scan] == window[++match] &&
1296 window[++scan] == window[++match] &&
1297 window[++scan] == window[++match] &&
1298 window[++scan] == window[++match] &&
1299 window[++scan] == window[++match] &&
1300 scan < strend);
1301
1302 len = MAX_MATCH - (int)(strend - scan);
1303 scan = strend - MAX_MATCH;
1304
1305 if(len>best_len) {
1306 match_start = cur_match;
1307 best_len = len;
1308 if (len >= nice_match) break;
1309 scan_end1 = window[scan+best_len-1];
1310 scan_end = window[scan+best_len];
1311 }
1312
1313 } while ((cur_match = (prev[cur_match & wmask]&0xffff)) > limit
1314 && --chain_length != 0);
1315
1316 if (best_len <= lookahead) return best_len;
1317 return lookahead;
1318 }
1319
1320 int deflateInit(int level, int bits, int memlevel){
1321 return deflateInit(level, Z_DEFLATED, bits, memlevel,
1322 Z_DEFAULT_STRATEGY);
1323 }
1324
1325 int deflateInit(int level, int bits){
1326 return deflateInit(level, Z_DEFLATED, bits, DEF_MEM_LEVEL,
1327 Z_DEFAULT_STRATEGY);
1328 }
1329 int deflateInit(int level){
1330 return deflateInit(level, MAX_WBITS);
1331 }
1332 private int deflateInit(int level, int method, int windowBits,
1333 int memLevel, int strategy){
1334 int wrap = 1;
1335 // byte[] my_version=ZLIB_VERSION;
1336
1337 //
1338 // if (version == null || version[0] != my_version[0]
1339 // || stream_size != sizeof(z_stream)) {
1340 // return Z_VERSION_ERROR;
1341 // }
1342
1343 strm.msg = null;
1344
1345 if (level == Z_DEFAULT_COMPRESSION) level = 6;
1346
1347 if (windowBits < 0) { // undocumented feature: suppress zlib header
1348 wrap = 0;
1349 windowBits = -windowBits;
1350 }
1351 else if(windowBits > 15){
1352 wrap = 2;
1353 windowBits -= 16;
1354 strm.adler=new CRC32();
1355 }
1356
1357 if (memLevel < 1 || memLevel > MAX_MEM_LEVEL ||
1358 method != Z_DEFLATED ||
1359 windowBits < 9 || windowBits > 15 || level < 0 || level > 9 ||
1360 strategy < 0 || strategy > Z_HUFFMAN_ONLY) {
1361 return Z_STREAM_ERROR;
1362 }
1363
1364 strm.dstate = (Deflate)this;
1365
1366 this.wrap = wrap;
1367 w_bits = windowBits;
1368 w_size = 1 << w_bits;
1369 w_mask = w_size - 1;
1370
1371 hash_bits = memLevel + 7;
1372 hash_size = 1 << hash_bits;
1373 hash_mask = hash_size - 1;
1374 hash_shift = ((hash_bits+MIN_MATCH-1)/MIN_MATCH);
1375
1376 window = new byte[w_size*2];
1377 prev = new short[w_size];
1378 head = new short[hash_size];
1379
1380 lit_bufsize = 1 << (memLevel + 6); // 16K elements by default
1381
1382 // We overlay pending_buf and d_buf+l_buf. This works since the average
1383 // output size for (length,distance) codes is <= 24 bits.
1384 pending_buf = new byte[lit_bufsize*3];
1385 pending_buf_size = lit_bufsize*3;
1386
1387 d_buf = lit_bufsize;
1388 l_buf = new byte[lit_bufsize];
1389
1390 this.level = level;
1391
1392 this.strategy = strategy;
1393 this.method = (byte)method;
1394
1395 return deflateReset();
1396 }
1397
1398 int deflateReset(){
1399 strm.total_in = strm.total_out = 0;
1400 strm.msg = null; //
1401 strm.data_type = Z_UNKNOWN;
1402
1403 pending = 0;
1404 pending_out = 0;
1405
1406 if(wrap < 0){
1407 wrap = -wrap;
1408 }
1409 status = (wrap==0) ? BUSY_STATE : INIT_STATE;
1410 strm.adler.reset();
1411
1412 last_flush = Z_NO_FLUSH;
1413
1414 tr_init();
1415 lm_init();
1416 return Z_OK;
1417 }
1418
1419 int deflateEnd(){
1420 if(status!=INIT_STATE && status!=BUSY_STATE && status!=FINISH_STATE){
1421 return Z_STREAM_ERROR;
1422 }
1423 // Deallocate in reverse order of allocations:
1424 pending_buf=null;
1425 l_buf=null;
1426 head=null;
1427 prev=null;
1428 window=null;
1429 // free
1430 // dstate=null;
1431 return status == BUSY_STATE ? Z_DATA_ERROR : Z_OK;
1432 }
1433
1434 int deflateParams(int _level, int _strategy){
1435 int err=Z_OK;
1436
1437 if(_level == Z_DEFAULT_COMPRESSION){
1438 _level = 6;
1439 }
1440 if(_level < 0 || _level > 9 ||
1441 _strategy < 0 || _strategy > Z_HUFFMAN_ONLY) {
1442 return Z_STREAM_ERROR;
1443 }
1444
1445 if(config_table[level].func!=config_table[_level].func &&
1446 strm.total_in != 0) {
1447 // Flush the last buffer:
1448 err = strm.deflate(Z_PARTIAL_FLUSH);
1449 }
1450
1451 if(level != _level) {
1452 level = _level;
1453 max_lazy_match = config_table[level].max_lazy;
1454 good_match = config_table[level].good_length;
1455 nice_match = config_table[level].nice_length;
1456 max_chain_length = config_table[level].max_chain;
1457 }
1458 strategy = _strategy;
1459 return err;
1460 }
1461
1462 int deflateSetDictionary (byte[] dictionary, int dictLength){
1463 int length = dictLength;
1464 int index=0;
1465
1466 if(dictionary == null || status != INIT_STATE)
1467 return Z_STREAM_ERROR;
1468
1469 strm.adler.update(dictionary, 0, dictLength);
1470
1471 if(length < MIN_MATCH) return Z_OK;
1472 if(length > w_size-MIN_LOOKAHEAD){
1473 length = w_size-MIN_LOOKAHEAD;
1474 index=dictLength-length; // use the tail of the dictionary
1475 }
1476 System.arraycopy(dictionary, index, window, 0, length);
1477 strstart = length;
1478 block_start = length;
1479
1480 // Insert all strings in the hash table (except for the last two bytes).
1481 // s->lookahead stays null, so s->ins_h will be recomputed at the next
1482 // call of fill_window.
1483
1484 ins_h = window[0]&0xff;
1485 ins_h=(((ins_h)<<hash_shift)^(window[1]&0xff))&hash_mask;
1486
1487 for(int n=0; n<=length-MIN_MATCH; n++){
1488 ins_h=(((ins_h)<<hash_shift)^(window[(n)+(MIN_MATCH-1)]&0xff))&hash_mask;
1489 prev[n&w_mask]=head[ins_h];
1490 head[ins_h]=(short)n;
1491 }
1492 return Z_OK;
1493 }
1494
1495 int deflate(int flush){
1496 int old_flush;
1497
1498 if(flush>Z_FINISH || flush<0){
1499 return Z_STREAM_ERROR;
1500 }
1501
1502 if(strm.next_out == null ||
1503 (strm.next_in == null && strm.avail_in != 0) ||
1504 (status == FINISH_STATE && flush != Z_FINISH)) {
1505 strm.msg=z_errmsg[Z_NEED_DICT-(Z_STREAM_ERROR)];
1506 return Z_STREAM_ERROR;
1507 }
1508 if(strm.avail_out == 0){
1509 strm.msg=z_errmsg[Z_NEED_DICT-(Z_BUF_ERROR)];
1510 return Z_BUF_ERROR;
1511 }
1512
1513 old_flush = last_flush;
1514 last_flush = flush;
1515
1516 // Write the zlib header
1517 if(status == INIT_STATE) {
1518 if(wrap == 2){
1519 getGZIPHeader().put(this);
1520 status=BUSY_STATE;
1521 strm.adler.reset();
1522 }
1523 else{
1524 int header = (Z_DEFLATED+((w_bits-8)<<4))<<8;
1525 int level_flags=((level-1)&0xff)>>1;
1526
1527 if(level_flags>3) level_flags=3;
1528 header |= (level_flags<<6);
1529 if(strstart!=0) header |= PRESET_DICT;
1530 header+=31-(header % 31);
1531
1532 status=BUSY_STATE;
1533 putShortMSB(header);
1534
1535
1536 // Save the adler32 of the preset dictionary:
1537 if(strstart!=0){
1538 long adler=strm.adler.getValue();
1539 putShortMSB((int)(adler>>>16));
1540 putShortMSB((int)(adler&0xffff));
1541 }
1542 strm.adler.reset();
1543 }
1544 }
1545
1546 // Flush as much pending output as possible
1547 if(pending != 0) {
1548 strm.flush_pending();
1549 if(strm.avail_out == 0) {
1550 // Since avail_out is 0, deflate will be called again with
1551 // more output space, but possibly with both pending and
1552 // avail_in equal to zero. There won't be anything to do,
1553 // but this is not an error situation so make sure we
1554 // return OK instead of BUF_ERROR at next call of deflate:
1555 last_flush = -1;
1556 return Z_OK;
1557 }
1558
1559 // Make sure there is something to do and avoid duplicate consecutive
1560 // flushes. For repeated and useless calls with Z_FINISH, we keep
1561 // returning Z_STREAM_END instead of Z_BUFF_ERROR.
1562 }
1563 else if(strm.avail_in==0 && flush <= old_flush &&
1564 flush != Z_FINISH) {
1565 strm.msg=z_errmsg[Z_NEED_DICT-(Z_BUF_ERROR)];
1566 return Z_BUF_ERROR;
1567 }
1568
1569 // User must not provide more input after the first FINISH:
1570 if(status == FINISH_STATE && strm.avail_in != 0) {
1571 strm.msg=z_errmsg[Z_NEED_DICT-(Z_BUF_ERROR)];
1572 return Z_BUF_ERROR;
1573 }
1574
1575 // Start a new block or continue the current one.
1576 if(strm.avail_in!=0 || lookahead!=0 ||
1577 (flush != Z_NO_FLUSH && status != FINISH_STATE)) {
1578 int bstate=-1;
1579 switch(config_table[level].func){
1580 case STORED:
1581 bstate = deflate_stored(flush);
1582 break;
1583 case FAST:
1584 bstate = deflate_fast(flush);
1585 break;
1586 case SLOW:
1587 bstate = deflate_slow(flush);
1588 break;
1589 default:
1590 }
1591
1592 if (bstate==FinishStarted || bstate==FinishDone) {
1593 status = FINISH_STATE;
1594 }
1595 if (bstate==NeedMore || bstate==FinishStarted) {
1596 if(strm.avail_out == 0) {
1597 last_flush = -1; // avoid BUF_ERROR next call, see above
1598 }
1599 return Z_OK;
1600 // If flush != Z_NO_FLUSH && avail_out == 0, the next call
1601 // of deflate should use the same flush parameter to make sure
1602 // that the flush is complete. So we don't have to output an
1603 // empty block here, this will be done at next call. This also
1604 // ensures that for a very small output buffer, we emit at most
1605 // one empty block.
1606 }
1607
1608 if (bstate==BlockDone) {
1609 if(flush == Z_PARTIAL_FLUSH) {
1610 _tr_align();
1611 }
1612 else { // FULL_FLUSH or SYNC_FLUSH
1613 _tr_stored_block(0, 0, false);
1614 // For a full flush, this empty block will be recognized
1615 // as a special marker by inflate_sync().
1616 if(flush == Z_FULL_FLUSH) {
1617 //state.head[s.hash_size-1]=0;
1618 for(int i=0; i<hash_size/*-1*/; i++) // forget history
1619 head[i]=0;
1620 }
1621 }
1622 strm.flush_pending();
1623 if(strm.avail_out == 0) {
1624 last_flush = -1; // avoid BUF_ERROR at next call, see above
1625 return Z_OK;
1626 }
1627 }
1628 }
1629
1630 if(flush!=Z_FINISH) return Z_OK;
1631 if(wrap<=0) return Z_STREAM_END;
1632
1633 if(wrap==2){
1634 long adler=strm.adler.getValue();
1635 put_byte((byte)(adler&0xff));
1636 put_byte((byte)((adler>>8)&0xff));
1637 put_byte((byte)((adler>>16)&0xff));
1638 put_byte((byte)((adler>>24)&0xff));
1639 put_byte((byte)(strm.total_in&0xff));
1640 put_byte((byte)((strm.total_in>>8)&0xff));
1641 put_byte((byte)((strm.total_in>>16)&0xff));
1642 put_byte((byte)((strm.total_in>>24)&0xff));
1643
1644 getGZIPHeader().setCRC(adler);
1645 }
1646 else{
1647 // Write the zlib trailer (adler32)
1648 long adler=strm.adler.getValue();
1649 putShortMSB((int)(adler>>>16));
1650 putShortMSB((int)(adler&0xffff));
1651 }
1652
1653 strm.flush_pending();
1654
1655 // If avail_out is zero, the application will call deflate again
1656 // to flush the rest.
1657
1658 if(wrap > 0) wrap = -wrap; // write the trailer only once!
1659 return pending != 0 ? Z_OK : Z_STREAM_END;
1660 }
1661
1662 static int deflateCopy(ZStream dest, ZStream src){
1663
1664 if(src.dstate == null){
1665 return Z_STREAM_ERROR;
1666 }
1667
1668 if(src.next_in!=null){
1669 dest.next_in = new byte[src.next_in.length];
1670 System.arraycopy(src.next_in, 0, dest.next_in, 0, src.next_in.length);
1671 }
1672 dest.next_in_index = src.next_in_index;
1673 dest.avail_in = src.avail_in;
1674 dest.total_in = src.total_in;
1675
1676 if(src.next_out!=null){
1677 dest.next_out = new byte[src.next_out.length];
1678 System.arraycopy(src.next_out, 0, dest.next_out ,0 , src.next_out.length);
1679 }
1680
1681 dest.next_out_index = src.next_out_index;
1682 dest.avail_out = src.avail_out;
1683 dest.total_out = src.total_out;
1684
1685 dest.msg = src.msg;
1686 dest.data_type = src.data_type;
1687 dest.adler = src.adler.copy();
1688
1689 try{
1690 dest.dstate = (Deflate)src.dstate.clone();
1691 dest.dstate.strm = dest;
1692 }
1693 catch(CloneNotSupportedException e){
1694 //
1695 }
1696 return Z_OK;
1697 }
1698
1699 public Object clone() throws CloneNotSupportedException {
1700 Deflate dest = (Deflate)super.clone();
1701
1702 dest.pending_buf = dup(dest.pending_buf);
1703 dest.d_buf = dest.d_buf;
1704 dest.l_buf = dup(dest.l_buf);
1705 dest.window = dup(dest.window);
1706
1707 dest.prev = dup(dest.prev);
1708 dest.head = dup(dest.head);
1709 dest.dyn_ltree = dup(dest.dyn_ltree);
1710 dest.dyn_dtree = dup(dest.dyn_dtree);
1711 dest.bl_tree = dup(dest.bl_tree);
1712
1713 dest.bl_count = dup(dest.bl_count);
1714 dest.next_code = dup(dest.next_code);
1715 dest.heap = dup(dest.heap);
1716 dest.depth = dup(dest.depth);
1717
1718 dest.l_desc.dyn_tree = dest.dyn_ltree;
1719 dest.d_desc.dyn_tree = dest.dyn_dtree;
1720 dest.bl_desc.dyn_tree = dest.bl_tree;
1721
1722 /*
1723 dest.l_desc.stat_desc = StaticTree.static_l_desc;
1724 dest.d_desc.stat_desc = StaticTree.static_d_desc;
1725 dest.bl_desc.stat_desc = StaticTree.static_bl_desc;
1726 */
1727
1728 if(dest.gheader!=null){
1729 dest.gheader = (GZIPHeader)dest.gheader.clone();
1730 }
1731
1732 return dest;
1733 }
1734
1735 private byte[] dup(byte[] buf){
1736 byte[] foo = new byte[buf.length];
1737 System.arraycopy(buf, 0, foo, 0, foo.length);
1738 return foo;
1739 }
1740 private short[] dup(short[] buf){
1741 short[] foo = new short[buf.length];
1742 System.arraycopy(buf, 0, foo, 0, foo.length);
1743 return foo;
1744 }
1745 private int[] dup(int[] buf){
1746 int[] foo = new int[buf.length];
1747 System.arraycopy(buf, 0, foo, 0, foo.length);
1748 return foo;
1749 }
1750
1751 synchronized GZIPHeader getGZIPHeader(){
1752 if(gheader==null){
1753 gheader = new GZIPHeader();
1754 }
1755 return gheader;
1756 }
1757 }