KickJava   Java API By Example, From Geeks To Geeks.

Java > Open Source Codes > com > jcraft > jzlib > Deflate


1 /* -*-mode:java; c-basic-offset:2; -*- */
2 /*
3 Copyright (c) 2000,2001,2002,2003 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{
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 JavaDoc[] 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 noheader; // suppress zlib header and adler32
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
267   // heap used to build the Huffman trees
268
int[] heap=new int[2*L_CODES+1];
269
270   int heap_len; // number of elements in the heap
271
int heap_max; // element of largest frequency
272
// The sons of heap[n] are heap[2*n] and heap[2*n+1]. heap[0] is not used.
273
// The same heap array is used to build all trees.
274

275   // Depth of each subtree used as tie breaker for trees of equal frequency
276
byte[] depth=new byte[2*L_CODES+1];
277
278   int l_buf; // index for literals or lengths */
279

280   // Size of match buffer for literals/lengths. There are 4 reasons for
281
// limiting lit_bufsize to 64K:
282
// - frequencies can be kept in 16 bit counters
283
// - if compression is not successful for the first block, all input
284
// data is still in the window so we can still emit a stored block even
285
// when input comes from standard input. (This can also be done for
286
// all blocks if lit_bufsize is not greater than 32K.)
287
// - if compression is not successful for a file smaller than 64K, we can
288
// even emit a stored file instead of a stored block (saving 5 bytes).
289
// This is applicable only for zip (not gzip or zlib).
290
// - creating new Huffman trees less frequently may not provide fast
291
// adaptation to changes in the input data statistics. (Take for
292
// example a binary file with poorly compressible code followed by
293
// a highly compressible string table.) Smaller buffer sizes give
294
// fast adaptation but have of course the overhead of transmitting
295
// trees more frequently.
296
// - I can't count above 4
297
int lit_bufsize;
298
299   int last_lit; // running index in l_buf
300

301   // Buffer for distances. To simplify the code, d_buf and l_buf have
302
// the same number of elements. To use different lengths, an extra flag
303
// array would be necessary.
304

305   int d_buf; // index of pendig_buf
306

307   int opt_len; // bit length of current block with optimal trees
308
int static_len; // bit length of current block with static trees
309
int matches; // number of string matches in current block
310
int last_eob_len; // bit length of EOB code for last block
311

312   // Output buffer. bits are inserted starting at the bottom (least
313
// significant bits).
314
short bi_buf;
315
316   // Number of valid bits in bi_buf. All bits above the last valid bit
317
// are always zero.
318
int bi_valid;
319
320   Deflate(){
321     dyn_ltree=new short[HEAP_SIZE*2];
322     dyn_dtree=new short[(2*D_CODES+1)*2]; // distance tree
323
bl_tree=new short[(2*BL_CODES+1)*2]; // Huffman tree for bit lengths
324
}
325
326   void lm_init() {
327     window_size=2*w_size;
328
329     head[hash_size-1]=0;
330     for(int i=0; i<hash_size-1; i++){
331       head[i]=0;
332     }
333
334     // Set the default configuration parameters:
335
max_lazy_match = Deflate.config_table[level].max_lazy;
336     good_match = Deflate.config_table[level].good_length;
337     nice_match = Deflate.config_table[level].nice_length;
338     max_chain_length = Deflate.config_table[level].max_chain;
339
340     strstart = 0;
341     block_start = 0;
342     lookahead = 0;
343     match_length = prev_length = MIN_MATCH-1;
344     match_available = 0;
345     ins_h = 0;
346   }
347
348   // Initialize the tree data structures for a new zlib stream.
349
void tr_init(){
350
351     l_desc.dyn_tree = dyn_ltree;
352     l_desc.stat_desc = StaticTree.static_l_desc;
353
354     d_desc.dyn_tree = dyn_dtree;
355     d_desc.stat_desc = StaticTree.static_d_desc;
356
357     bl_desc.dyn_tree = bl_tree;
358     bl_desc.stat_desc = StaticTree.static_bl_desc;
359
360     bi_buf = 0;
361     bi_valid = 0;
362     last_eob_len = 8; // enough lookahead for inflate
363

364     // Initialize the first block of the first file:
365
init_block();
366   }
367
368   void init_block(){
369     // Initialize the trees.
370
for(int i = 0; i < L_CODES; i++) dyn_ltree[i*2] = 0;
371     for(int i= 0; i < D_CODES; i++) dyn_dtree[i*2] = 0;
372     for(int i= 0; i < BL_CODES; i++) bl_tree[i*2] = 0;
373
374     dyn_ltree[END_BLOCK*2] = 1;
375     opt_len = static_len = 0;
376     last_lit = matches = 0;
377   }
378
379   // Restore the heap property by moving down the tree starting at node k,
380
// exchanging a node with the smallest of its two sons if necessary, stopping
381
// when the heap property is re-established (each father smaller than its
382
// two sons).
383
void pqdownheap(short[] tree, // the tree to restore
384
int k // node to move down
385
){
386     int v = heap[k];
387     int j = k << 1; // left son of k
388
while (j <= heap_len) {
389       // Set j to the smallest of the two sons:
390
if (j < heap_len &&
391       smaller(tree, heap[j+1], heap[j], depth)){
392     j++;
393       }
394       // Exit if v is smaller than both sons
395
if(smaller(tree, v, heap[j], depth)) break;
396
397       // Exchange v with the smallest son
398
heap[k]=heap[j]; k = j;
399       // And continue down the tree, setting j to the left son of k
400
j <<= 1;
401     }
402     heap[k] = v;
403   }
404
405   static boolean smaller(short[] tree, int n, int m, byte[] depth){
406     short tn2=tree[n*2];
407     short tm2=tree[m*2];
408     return (tn2<tm2 ||
409         (tn2==tm2 && depth[n] <= depth[m]));
410   }
411
412   // Scan a literal or distance tree to determine the frequencies of the codes
413
// in the bit length tree.
414
void scan_tree (short[] tree,// the tree to be scanned
415
int max_code // and its largest code of non zero frequency
416
){
417     int n; // iterates over all tree elements
418
int prevlen = -1; // last emitted length
419
int curlen; // length of current code
420
int nextlen = tree[0*2+1]; // length of next code
421
int count = 0; // repeat count of the current code
422
int max_count = 7; // max repeat count
423
int min_count = 4; // min repeat count
424

425     if (nextlen == 0){ max_count = 138; min_count = 3; }
426     tree[(max_code+1)*2+1] = (short)0xffff; // guard
427

428     for(n = 0; n <= max_code; n++) {
429       curlen = nextlen; nextlen = tree[(n+1)*2+1];
430       if(++count < max_count && curlen == nextlen) {
431     continue;
432       }
433       else if(count < min_count) {
434     bl_tree[curlen*2] += count;
435       }
436       else if(curlen != 0) {
437     if(curlen != prevlen) bl_tree[curlen*2]++;
438     bl_tree[REP_3_6*2]++;
439       }
440       else if(count <= 10) {
441     bl_tree[REPZ_3_10*2]++;
442       }
443       else{
444     bl_tree[REPZ_11_138*2]++;
445       }
446       count = 0; prevlen = curlen;
447       if(nextlen == 0) {
448     max_count = 138; min_count = 3;
449       }
450       else if(curlen == nextlen) {
451     max_count = 6; min_count = 3;
452       }
453       else{
454     max_count = 7; min_count = 4;
455       }
456     }
457   }
458
459   // Construct the Huffman tree for the bit lengths and return the index in
460
// bl_order of the last bit length code to send.
461
int build_bl_tree(){
462     int max_blindex; // index of last bit length code of non zero freq
463

464     // Determine the bit length frequencies for literal and distance trees
465
scan_tree(dyn_ltree, l_desc.max_code);
466     scan_tree(dyn_dtree, d_desc.max_code);
467
468     // Build the bit length tree:
469
bl_desc.build_tree(this);
470     // opt_len now includes the length of the tree representations, except
471
// the lengths of the bit lengths codes and the 5+5+4 bits for the counts.
472

473     // Determine the number of bit length codes to send. The pkzip format
474
// requires that at least 4 bit length codes be sent. (appnote.txt says
475
// 3 but the actual value used is 4.)
476
for (max_blindex = BL_CODES-1; max_blindex >= 3; max_blindex--) {
477       if (bl_tree[Tree.bl_order[max_blindex]*2+1] != 0) break;
478     }
479     // Update opt_len to include the bit length tree and counts
480
opt_len += 3*(max_blindex+1) + 5+5+4;
481
482     return max_blindex;
483   }
484
485
486   // Send the header for a block using dynamic Huffman trees: the counts, the
487
// lengths of the bit length codes, the literal tree and the distance tree.
488
// IN assertion: lcodes >= 257, dcodes >= 1, blcodes >= 4.
489
void send_all_trees(int lcodes, int dcodes, int blcodes){
490     int rank; // index in bl_order
491

492     send_bits(lcodes-257, 5); // not +255 as stated in appnote.txt
493
send_bits(dcodes-1, 5);
494     send_bits(blcodes-4, 4); // not -3 as stated in appnote.txt
495
for (rank = 0; rank < blcodes; rank++) {
496       send_bits(bl_tree[Tree.bl_order[rank]*2+1], 3);
497     }
498     send_tree(dyn_ltree, lcodes-1); // literal tree
499
send_tree(dyn_dtree, dcodes-1); // distance tree
500
}
501
502   // Send a literal or distance tree in compressed form, using the codes in
503
// bl_tree.
504
void send_tree (short[] tree,// the tree to be sent
505
int max_code // and its largest code of non zero frequency
506
){
507     int n; // iterates over all tree elements
508
int prevlen = -1; // last emitted length
509
int curlen; // length of current code
510
int nextlen = tree[0*2+1]; // length of next code
511
int count = 0; // repeat count of the current code
512
int max_count = 7; // max repeat count
513
int min_count = 4; // min repeat count
514

515     if (nextlen == 0){ max_count = 138; min_count = 3; }
516
517     for (n = 0; n <= max_code; n++) {
518       curlen = nextlen; nextlen = tree[(n+1)*2+1];
519       if(++count < max_count && curlen == nextlen) {
520     continue;
521       }
522       else if(count < min_count) {
523     do { send_code(curlen, bl_tree); } while (--count != 0);
524       }
525       else if(curlen != 0){
526     if(curlen != prevlen){
527       send_code(curlen, bl_tree); count--;
528     }
529     send_code(REP_3_6, bl_tree);
530     send_bits(count-3, 2);
531       }
532       else if(count <= 10){
533     send_code(REPZ_3_10, bl_tree);
534     send_bits(count-3, 3);
535       }
536       else{
537     send_code(REPZ_11_138, bl_tree);
538     send_bits(count-11, 7);
539       }
540       count = 0; prevlen = curlen;
541       if(nextlen == 0){
542     max_count = 138; min_count = 3;
543       }
544       else if(curlen == nextlen){
545     max_count = 6; min_count = 3;
546       }
547       else{
548     max_count = 7; min_count = 4;
549       }
550     }
551   }
552
553   // Output a byte on the stream.
554
// IN assertion: there is enough room in pending_buf.
555
final void put_byte(byte[] p, int start, int len){
556     System.arraycopy(p, start, pending_buf, pending, len);
557     pending+=len;
558   }
559
560   final void put_byte(byte c){
561     pending_buf[pending++]=c;
562   }
563   final void put_short(int w) {
564     put_byte((byte)(w/*&0xff*/));
565     put_byte((byte)(w>>>8));
566   }
567   final void putShortMSB(int b){
568     put_byte((byte)(b>>8));
569     put_byte((byte)(b/*&0xff*/));
570   }
571
572   final void send_code(int c, short[] tree){
573     int c2=c*2;
574     send_bits((tree[c2]&0xffff), (tree[c2+1]&0xffff));
575   }
576
577   void send_bits(int value, int length){
578     int len = length;
579     if (bi_valid > (int)Buf_size - len) {
580       int val = value;
581 // bi_buf |= (val << bi_valid);
582
bi_buf |= ((val << bi_valid)&0xffff);
583       put_short(bi_buf);
584       bi_buf = (short)(val >>> (Buf_size - bi_valid));
585       bi_valid += len - Buf_size;
586     } else {
587 // bi_buf |= (value) << bi_valid;
588
bi_buf |= (((value) << bi_valid)&0xffff);
589       bi_valid += len;
590     }
591   }
592
593   // Send one empty static block to give enough lookahead for inflate.
594
// This takes 10 bits, of which 7 may remain in the bit buffer.
595
// The current inflate code requires 9 bits of lookahead. If the
596
// last two codes for the previous block (real code plus EOB) were coded
597
// on 5 bits or less, inflate may have only 5+3 bits of lookahead to decode
598
// the last real code. In this case we send two empty static blocks instead
599
// of one. (There are no problems if the previous block is stored or fixed.)
600
// To simplify the code, we assume the worst case of last real code encoded
601
// on one bit only.
602
void _tr_align(){
603     send_bits(STATIC_TREES<<1, 3);
604     send_code(END_BLOCK, StaticTree.static_ltree);
605
606     bi_flush();
607
608     // Of the 10 bits for the empty block, we have already sent
609
// (10 - bi_valid) bits. The lookahead for the last real code (before
610
// the EOB of the previous block) was thus at least one plus the length
611
// of the EOB plus what we have just sent of the empty static block.
612
if (1 + last_eob_len + 10 - bi_valid < 9) {
613       send_bits(STATIC_TREES<<1, 3);
614       send_code(END_BLOCK, StaticTree.static_ltree);
615       bi_flush();
616     }
617     last_eob_len = 7;
618   }
619
620
621   // Save the match info and tally the frequency counts. Return true if
622
// the current block must be flushed.
623
boolean _tr_tally (int dist, // distance of matched string
624
int lc // match length-MIN_MATCH or unmatched char (if dist==0)
625
){
626
627     pending_buf[d_buf+last_lit*2] = (byte)(dist>>>8);
628     pending_buf[d_buf+last_lit*2+1] = (byte)dist;
629
630     pending_buf[l_buf+last_lit] = (byte)lc; last_lit++;
631
632     if (dist == 0) {
633       // lc is the unmatched char
634
dyn_ltree[lc*2]++;
635     }
636     else {
637       matches++;
638       // Here, lc is the match length - MIN_MATCH
639
dist--; // dist = match distance - 1
640
dyn_ltree[(Tree._length_code[lc]+LITERALS+1)*2]++;
641       dyn_dtree[Tree.d_code(dist)*2]++;
642     }
643
644     if ((last_lit & 0x1fff) == 0 && level > 2) {
645       // Compute an upper bound for the compressed length
646
int out_length = last_lit*8;
647       int in_length = strstart - block_start;
648       int dcode;
649       for (dcode = 0; dcode < D_CODES; dcode++) {
650     out_length += (int)dyn_dtree[dcode*2] *
651       (5L+Tree.extra_dbits[dcode]);
652       }
653       out_length >>>= 3;
654       if ((matches < (last_lit/2)) && out_length < in_length/2) return true;
655     }
656
657     return (last_lit == lit_bufsize-1);
658     // We avoid equality with lit_bufsize because of wraparound at 64K
659
// on 16 bit machines and because stored blocks are restricted to
660
// 64K-1 bytes.
661
}
662
663   // Send the block data compressed using the given Huffman trees
664
void compress_block(short[] ltree, short[] dtree){
665     int dist; // distance of matched string
666
int lc; // match length or unmatched char (if dist == 0)
667
int lx = 0; // running index in l_buf
668
int code; // the code to send
669
int extra; // number of extra bits to send
670

671     if (last_lit != 0){
672       do{
673     dist=((pending_buf[d_buf+lx*2]<<8)&0xff00)|
674       (pending_buf[d_buf+lx*2+1]&0xff);
675     lc=(pending_buf[l_buf+lx])&0xff; lx++;
676
677     if(dist == 0){
678       send_code(lc, ltree); // send a literal byte
679
}
680     else{
681       // Here, lc is the match length - MIN_MATCH
682
code = Tree._length_code[lc];
683
684       send_code(code+LITERALS+1, ltree); // send the length code
685
extra = Tree.extra_lbits[code];
686       if(extra != 0){
687         lc -= Tree.base_length[code];
688         send_bits(lc, extra); // send the extra length bits
689
}
690       dist--; // dist is now the match distance - 1
691
code = Tree.d_code(dist);
692
693       send_code(code, dtree); // send the distance code
694
extra = Tree.extra_dbits[code];
695       if (extra != 0) {
696         dist -= Tree.base_dist[code];
697         send_bits(dist, extra); // send the extra distance bits
698
}
699     } // literal or match pair ?
700

701     // Check that the overlay between pending_buf and d_buf+l_buf is ok:
702
}
703       while (lx < last_lit);
704     }
705
706     send_code(END_BLOCK, ltree);
707     last_eob_len = ltree[END_BLOCK*2+1];
708   }
709
710   // Set the data type to ASCII or BINARY, using a crude approximation:
711
// binary if more than 20% of the bytes are <= 6 or >= 128, ascii otherwise.
712
// IN assertion: the fields freq of dyn_ltree are set and the total of all
713
// frequencies does not exceed 64K (to fit in an int on 16 bit machines).
714
void set_data_type(){
715     int n = 0;
716     int ascii_freq = 0;
717     int bin_freq = 0;
718     while(n<7){ bin_freq += dyn_ltree[n*2]; n++;}
719     while(n<128){ ascii_freq += dyn_ltree[n*2]; n++;}
720     while(n<LITERALS){ bin_freq += dyn_ltree[n*2]; n++;}
721     data_type=(byte)(bin_freq > (ascii_freq >>> 2) ? Z_BINARY : Z_ASCII);
722   }
723
724   // Flush the bit buffer, keeping at most 7 bits in it.
725
void bi_flush(){
726     if (bi_valid == 16) {
727       put_short(bi_buf);
728       bi_buf=0;
729       bi_valid=0;
730     }
731     else if (bi_valid >= 8) {
732       put_byte((byte)bi_buf);
733       bi_buf>>>=8;
734       bi_valid-=8;
735     }
736   }
737
738   // Flush the bit buffer and align the output on a byte boundary
739
void bi_windup(){
740     if (bi_valid > 8) {
741       put_short(bi_buf);
742     } else if (bi_valid > 0) {
743       put_byte((byte)bi_buf);
744     }
745     bi_buf = 0;
746     bi_valid = 0;
747   }
748
749   // Copy a stored block, storing first the length and its
750
// one's complement if requested.
751
void copy_block(int buf, // the input data
752
int len, // its length
753
boolean header // true if block header must be written
754
){
755     int index=0;
756     bi_windup(); // align on byte boundary
757
last_eob_len = 8; // enough lookahead for inflate
758

759     if (header) {
760       put_short((short)len);
761       put_short((short)~len);
762     }
763
764     // while(len--!=0) {
765
// put_byte(window[buf+index]);
766
// index++;
767
// }
768
put_byte(window, buf, len);
769   }
770
771   void flush_block_only(boolean eof){
772     _tr_flush_block(block_start>=0 ? block_start : -1,
773             strstart-block_start,
774             eof);
775     block_start=strstart;
776     strm.flush_pending();
777   }
778
779   // Copy without compression as much as possible from the input stream, return
780
// the current block state.
781
// This function does not insert new strings in the dictionary since
782
// uncompressible data is probably not useful. This function is used
783
// only for the level=0 compression option.
784
// NOTE: this function should be optimized to avoid extra copying from
785
// window to pending_buf.
786
int deflate_stored(int flush){
787     // Stored blocks are limited to 0xffff bytes, pending_buf is limited
788
// to pending_buf_size, and each stored block has a 5 byte header:
789

790     int max_block_size = 0xffff;
791     int max_start;
792
793     if(max_block_size > pending_buf_size - 5) {
794       max_block_size = pending_buf_size - 5;
795     }
796
797     // Copy as much as possible from input to output:
798
while(true){
799       // Fill the window as much as possible:
800
if(lookahead<=1){
801     fill_window();
802     if(lookahead==0 && flush==Z_NO_FLUSH) return NeedMore;
803     if(lookahead==0) break; // flush the current block
804
}
805
806       strstart+=lookahead;
807       lookahead=0;
808
809       // Emit a stored block if pending_buf will be full:
810
max_start=block_start+max_block_size;
811       if(strstart==0|| strstart>=max_start) {
812     // strstart == 0 is possible when wraparound on 16-bit machine
813
lookahead = (int)(strstart-max_start);
814     strstart = (int)max_start;
815       
816     flush_block_only(false);
817     if(strm.avail_out==0) return NeedMore;
818
819       }
820
821       // Flush if we may have to slide, otherwise block_start may become
822
// negative and the data will be gone:
823
if(strstart-block_start >= w_size-MIN_LOOKAHEAD) {
824     flush_block_only(false);
825     if(strm.avail_out==0) return NeedMore;
826       }
827     }
828
829     flush_block_only(flush == Z_FINISH);
830     if(strm.avail_out==0)
831       return (flush == Z_FINISH) ? FinishStarted : NeedMore;
832
833     return flush == Z_FINISH ? FinishDone : BlockDone;
834   }
835
836   // Send a stored block
837
void _tr_stored_block(int buf, // input block
838
int stored_len, // length of input block
839
boolean eof // true if this is the last block for a file
840
){
841     send_bits((STORED_BLOCK<<1)+(eof?1:0), 3); // send block type
842
copy_block(buf, stored_len, true); // with header
843
}
844
845   // Determine the best encoding for the current block: dynamic trees, static
846
// trees or store, and output the encoded block to the zip file.
847
void _tr_flush_block(int buf, // input block, or NULL if too old
848
int stored_len, // length of input block
849
boolean eof // true if this is the last block for a file
850
) {
851     int opt_lenb, static_lenb;// opt_len and static_len in bytes
852
int max_blindex = 0; // index of last bit length code of non zero freq
853

854     // Build the Huffman trees unless a stored block is forced
855
if(level > 0) {
856       // Check if the file is ascii or binary
857
if(data_type == Z_UNKNOWN) set_data_type();
858
859       // Construct the literal and distance trees
860
l_desc.build_tree(this);
861
862       d_desc.build_tree(this);
863
864       // At this point, opt_len and static_len are the total bit lengths of
865
// the compressed block data, excluding the tree representations.
866

867       // Build the bit length tree for the above two trees, and get the index
868
// in bl_order of the last bit length code to send.
869
max_blindex=build_bl_tree();
870
871       // Determine the best encoding. Compute first the block length in bytes
872
opt_lenb=(opt_len+3+7)>>>3;
873       static_lenb=(static_len+3+7)>>>3;
874
875       if(static_lenb<=opt_lenb) opt_lenb=static_lenb;
876     }
877     else {
878       opt_lenb=static_lenb=stored_len+5; // force a stored block
879
}
880
881     if(stored_len+4<=opt_lenb && buf != -1){
882       // 4: two words for the lengths
883
// The test buf != NULL is only necessary if LIT_BUFSIZE > WSIZE.
884
// Otherwise we can't have processed more than WSIZE input bytes since
885
// the last block flush, because compression would have been
886
// successful. If LIT_BUFSIZE <= WSIZE, it is never too late to
887
// transform a block into a stored block.
888
_tr_stored_block(buf, stored_len, eof);
889     }
890     else if(static_lenb == opt_lenb){
891       send_bits((STATIC_TREES<<1)+(eof?1:0), 3);
892       compress_block(StaticTree.static_ltree, StaticTree.static_dtree);
893     }
894     else{
895       send_bits((DYN_TREES<<1)+(eof?1:0), 3);
896       send_all_trees(l_desc.max_code+1, d_desc.max_code+1, max_blindex+1);
897       compress_block(dyn_ltree, dyn_dtree);
898     }
899
900     // The above check is made mod 2^32, for files larger than 512 MB
901
// and uLong implemented on 32 bits.
902

903     init_block();
904
905     if(eof){
906       bi_windup();
907     }
908   }
909
910   // Fill the window when the lookahead becomes insufficient.
911
// Updates strstart and lookahead.
912
//
913
// IN assertion: lookahead < MIN_LOOKAHEAD
914
// OUT assertions: strstart <= window_size-MIN_LOOKAHEAD
915
// At least one byte has been read, or avail_in == 0; reads are
916
// performed for at least two bytes (required for the zip translate_eol
917
// option -- not supported here).
918
void fill_window(){
919     int n, m;
920     int p;
921     int more; // Amount of free space at the end of the window.
922

923     do{
924       more = (window_size-lookahead-strstart);
925
926       // Deal with !@#$% 64K limit:
927
if(more==0 && strstart==0 && lookahead==0){
928     more = w_size;
929       }
930       else if(more==-1) {
931     // Very unlikely, but possible on 16 bit machine if strstart == 0
932
// and lookahead == 1 (input done one byte at time)
933
more--;
934
935     // If the window is almost full and there is insufficient lookahead,
936
// move the upper half to the lower one to make room in the upper half.
937
}
938       else if(strstart >= w_size+ w_size-MIN_LOOKAHEAD) {
939     System.arraycopy(window, w_size, window, 0, w_size);
940     match_start-=w_size;
941     strstart-=w_size; // we now have strstart >= MAX_DIST
942
block_start-=w_size;
943
944     // Slide the hash table (could be avoided with 32 bit values
945
// at the expense of memory usage). We slide even when level == 0
946
// to keep the hash table consistent if we switch back to level > 0
947
// later. (Using level 0 permanently is not an optimal usage of
948
// zlib, so we don't care about this pathological case.)
949

950     n = hash_size;
951     p=n;
952     do {
953       m = (head[--p]&0xffff);
954       head[p]=(m>=w_size ? (short)(m-w_size) : 0);
955     }
956     while (--n != 0);
957
958     n = w_size;
959     p = n;
960     do {
961       m = (prev[--p]&0xffff);
962       prev[p] = (m >= w_size ? (short)(m-w_size) : 0);
963       // If n is not on any hash chain, prev[n] is garbage but
964
// its value will never be used.
965
}
966     while (--n!=0);
967     more += w_size;
968       }
969
970       if (strm.avail_in == 0) return;
971
972       // If there was no sliding:
973
// strstart <= WSIZE+MAX_DIST-1 && lookahead <= MIN_LOOKAHEAD - 1 &&
974
// more == window_size - lookahead - strstart
975
// => more >= window_size - (MIN_LOOKAHEAD-1 + WSIZE + MAX_DIST-1)
976
// => more >= window_size - 2*WSIZE + 2
977
// In the BIG_MEM or MMAP case (not yet supported),
978
// window_size == input_size + MIN_LOOKAHEAD &&
979
// strstart + s->lookahead <= input_size => more >= MIN_LOOKAHEAD.
980
// Otherwise, window_size == 2*WSIZE so more >= 2.
981
// If there was sliding, more >= WSIZE. So in all cases, more >= 2.
982

983       n = strm.read_buf(window, strstart + lookahead, more);
984       lookahead += n;
985
986       // Initialize the hash value now that we have some input:
987
if(lookahead >= MIN_MATCH) {
988     ins_h = window[strstart]&0xff;
989     ins_h=(((ins_h)<<hash_shift)^(window[strstart+1]&0xff))&hash_mask;
990       }
991       // If the whole input has less than MIN_MATCH bytes, ins_h is garbage,
992
// but this is not important since only literal bytes will be emitted.
993
}
994     while (lookahead < MIN_LOOKAHEAD && strm.avail_in != 0);
995   }
996
997   // Compress as much as possible from the input stream, return the current
998
// block state.
999
// This function does not perform lazy evaluation of matches and inserts
1000
// new strings in the dictionary only for unmatched strings or for short
1001
// matches. It is used only for the fast compression options.
1002
int deflate_fast(int flush){
1003// short hash_head = 0; // head of the hash chain
1004
int hash_head = 0; // head of the hash chain
1005
boolean bflush; // set if current block must be flushed
1006

1007    while(true){
1008      // Make sure that we always have enough lookahead, except
1009
// at the end of the input file. We need MAX_MATCH bytes
1010
// for the next match, plus MIN_MATCH bytes to insert the
1011
// string following the next match.
1012
if(lookahead < MIN_LOOKAHEAD){
1013    fill_window();
1014    if(lookahead < MIN_LOOKAHEAD && flush == Z_NO_FLUSH){
1015      return NeedMore;
1016    }
1017    if(lookahead == 0) break; // flush the current block
1018
}
1019
1020      // Insert the string window[strstart .. strstart+2] in the
1021
// dictionary, and set hash_head to the head of the hash chain:
1022
if(lookahead >= MIN_MATCH){
1023    ins_h=(((ins_h)<<hash_shift)^(window[(strstart)+(MIN_MATCH-1)]&0xff))&hash_mask;
1024
1025// prev[strstart&w_mask]=hash_head=head[ins_h];
1026
hash_head=(head[ins_h]&0xffff);
1027    prev[strstart&w_mask]=head[ins_h];
1028    head[ins_h]=(short)strstart;
1029      }
1030
1031      // Find the longest match, discarding those <= prev_length.
1032
// At this point we have always match_length < MIN_MATCH
1033

1034      if(hash_head!=0L &&
1035     ((strstart-hash_head)&0xffff) <= w_size-MIN_LOOKAHEAD
1036     ){
1037    // To simplify the code, we prevent matches with the string
1038
// of window index 0 (in particular we have to avoid a match
1039
// of the string with itself at the start of the input file).
1040
if(strategy != Z_HUFFMAN_ONLY){
1041      match_length=longest_match (hash_head);
1042    }
1043    // longest_match() sets match_start
1044
}
1045      if(match_length>=MIN_MATCH){
1046    // check_match(strstart, match_start, match_length);
1047

1048    bflush=_tr_tally(strstart-match_start, match_length-MIN_MATCH);
1049
1050    lookahead -= match_length;
1051
1052    // Insert new strings in the hash table only if the match length
1053
// is not too large. This saves time but degrades compression.
1054
if(match_length <= max_lazy_match &&
1055       lookahead >= MIN_MATCH) {
1056      match_length--; // string at strstart already in hash table
1057
do{
1058        strstart++;
1059
1060        ins_h=((ins_h<<hash_shift)^(window[(strstart)+(MIN_MATCH-1)]&0xff))&hash_mask;
1061// prev[strstart&w_mask]=hash_head=head[ins_h];
1062
hash_head=(head[ins_h]&0xffff);
1063        prev[strstart&w_mask]=head[ins_h];
1064        head[ins_h]=(short)strstart;
1065
1066        // strstart never exceeds WSIZE-MAX_MATCH, so there are
1067
// always MIN_MATCH bytes ahead.
1068
}
1069      while (--match_length != 0);
1070      strstart++;
1071    }
1072    else{
1073      strstart += match_length;
1074      match_length = 0;
1075      ins_h = window[strstart]&0xff;
1076
1077      ins_h=(((ins_h)<<hash_shift)^(window[strstart+1]&0xff))&hash_mask;
1078      // If lookahead < MIN_MATCH, ins_h is garbage, but it does not
1079
// matter since it will be recomputed at next deflate call.
1080
}
1081      }
1082      else {
1083    // No match, output a literal byte
1084

1085    bflush=_tr_tally(0, window[strstart]&0xff);
1086    lookahead--;
1087    strstart++;
1088      }
1089      if (bflush){
1090
1091    flush_block_only(false);
1092    if(strm.avail_out==0) return NeedMore;
1093      }
1094    }
1095
1096    flush_block_only(flush == Z_FINISH);
1097    if(strm.avail_out==0){
1098      if(flush == Z_FINISH) return FinishStarted;
1099      else return NeedMore;
1100    }
1101    return flush==Z_FINISH ? FinishDone : BlockDone;
1102  }
1103
1104  // Same as above, but achieves better compression. We use a lazy
1105
// evaluation for matches: a match is finally adopted only if there is
1106
// no better match at the next window position.
1107
int deflate_slow(int flush){
1108// short hash_head = 0; // head of hash chain
1109
int hash_head = 0; // head of hash chain
1110
boolean bflush; // set if current block must be flushed
1111

1112    // Process the input block.
1113
while(true){
1114      // Make sure that we always have enough lookahead, except
1115
// at the end of the input file. We need MAX_MATCH bytes
1116
// for the next match, plus MIN_MATCH bytes to insert the
1117
// string following the next match.
1118

1119      if (lookahead < MIN_LOOKAHEAD) {
1120    fill_window();
1121    if(lookahead < MIN_LOOKAHEAD && flush == Z_NO_FLUSH) {
1122      return NeedMore;
1123    }
1124    if(lookahead == 0) break; // flush the current block
1125
}
1126
1127      // Insert the string window[strstart .. strstart+2] in the
1128
// dictionary, and set hash_head to the head of the hash chain:
1129

1130      if(lookahead >= MIN_MATCH) {
1131    ins_h=(((ins_h)<<hash_shift)^(window[(strstart)+(MIN_MATCH-1)]&0xff)) & hash_mask;
1132// prev[strstart&w_mask]=hash_head=head[ins_h];
1133
hash_head=(head[ins_h]&0xffff);
1134    prev[strstart&w_mask]=head[ins_h];
1135    head[ins_h]=(short)strstart;
1136      }
1137
1138      // Find the longest match, discarding those <= prev_length.
1139
prev_length = match_length; prev_match = match_start;
1140      match_length = MIN_MATCH-1;
1141
1142      if (hash_head != 0 && prev_length < max_lazy_match &&
1143      ((strstart-hash_head)&0xffff) <= w_size-MIN_LOOKAHEAD
1144      ){
1145    // To simplify the code, we prevent matches with the string
1146
// of window index 0 (in particular we have to avoid a match
1147
// of the string with itself at the start of the input file).
1148

1149    if(strategy != Z_HUFFMAN_ONLY) {
1150      match_length = longest_match(hash_head);
1151    }
1152    // longest_match() sets match_start
1153

1154    if (match_length <= 5 && (strategy == Z_FILTERED ||
1155                  (match_length == MIN_MATCH &&
1156                   strstart - match_start > 4096))) {
1157
1158      // If prev_match is also MIN_MATCH, match_start is garbage
1159
// but we will ignore the current match anyway.
1160
match_length = MIN_MATCH-1;
1161    }
1162      }
1163
1164      // If there was a match at the previous step and the current
1165
// match is not better, output the previous match:
1166
if(prev_length >= MIN_MATCH && match_length <= prev_length) {
1167    int max_insert = strstart + lookahead - MIN_MATCH;
1168    // Do not insert strings in hash table beyond this.
1169

1170    // check_match(strstart-1, prev_match, prev_length);
1171

1172    bflush=_tr_tally(strstart-1-prev_match, prev_length - MIN_MATCH);
1173
1174    // Insert in hash table all strings up to the end of the match.
1175
// strstart-1 and strstart are already inserted. If there is not
1176
// enough lookahead, the last two strings are not inserted in
1177
// the hash table.
1178
lookahead -= prev_length-1;
1179    prev_length -= 2;
1180    do{
1181      if(++strstart <= max_insert) {
1182        ins_h=(((ins_h)<<hash_shift)^(window[(strstart)+(MIN_MATCH-1)]&0xff))&hash_mask;
1183        //prev[strstart&w_mask]=hash_head=head[ins_h];
1184
hash_head=(head[ins_h]&0xffff);
1185        prev[strstart&w_mask]=head[ins_h];
1186        head[ins_h]=(short)strstart;
1187      }
1188    }
1189    while(--prev_length != 0);
1190    match_available = 0;
1191    match_length = MIN_MATCH-1;
1192    strstart++;
1193
1194    if (bflush){
1195      flush_block_only(false);
1196      if(strm.avail_out==0) return NeedMore;
1197    }
1198      } else if (match_available!=0) {
1199
1200    // If there was no match at the previous position, output a
1201
// single literal. If there was a match but the current match
1202
// is longer, truncate the previous match to a single literal.
1203

1204    bflush=_tr_tally(0, window[strstart-1]&0xff);
1205
1206    if (bflush) {
1207      flush_block_only(false);
1208    }
1209    strstart++;
1210    lookahead--;
1211    if(strm.avail_out == 0) return NeedMore;
1212      } else {
1213    // There is no previous match to compare with, wait for
1214
// the next step to decide.
1215

1216    match_available = 1;
1217    strstart++;
1218    lookahead--;
1219      }
1220    }
1221
1222    if(match_available!=0) {
1223      bflush=_tr_tally(0, window[strstart-1]&0xff);
1224      match_available = 0;
1225    }
1226    flush_block_only(flush == Z_FINISH);
1227
1228    if(strm.avail_out==0){
1229      if(flush == Z_FINISH) return FinishStarted;
1230      else return NeedMore;
1231    }
1232
1233    return flush == Z_FINISH ? FinishDone : BlockDone;
1234  }
1235
1236  int longest_match(int cur_match){
1237    int chain_length = max_chain_length; // max hash chain length
1238
int scan = strstart; // current string
1239
int match; // matched string
1240
int len; // length of current match
1241
int best_len = prev_length; // best match length so far
1242
int limit = strstart>(w_size-MIN_LOOKAHEAD) ?
1243      strstart-(w_size-MIN_LOOKAHEAD) : 0;
1244    int nice_match=this.nice_match;
1245
1246    // Stop when cur_match becomes <= limit. To simplify the code,
1247
// we prevent matches with the string of window index 0.
1248

1249    int wmask = w_mask;
1250
1251    int strend = strstart + MAX_MATCH;
1252    byte scan_end1 = window[scan+best_len-1];
1253    byte scan_end = window[scan+best_len];
1254
1255    // The code is optimized for HASH_BITS >= 8 and MAX_MATCH-2 multiple of 16.
1256
// It is easy to get rid of this optimization if necessary.
1257

1258    // Do not waste too much time if we already have a good match:
1259
if (prev_length >= good_match) {
1260      chain_length >>= 2;
1261    }
1262
1263    // Do not look for matches beyond the end of the input. This is necessary
1264
// to make deflate deterministic.
1265
if (nice_match > lookahead) nice_match = lookahead;
1266
1267    do {
1268      match = cur_match;
1269
1270      // Skip to next match if the match length cannot increase
1271
// or if the match length is less than 2:
1272
if (window[match+best_len] != scan_end ||
1273      window[match+best_len-1] != scan_end1 ||
1274      window[match] != window[scan] ||
1275      window[++match] != window[scan+1]) continue;
1276
1277      // The check at best_len-1 can be removed because it will be made
1278
// again later. (This heuristic is not always a win.)
1279
// It is not necessary to compare scan[2] and match[2] since they
1280
// are always equal when the other bytes match, given that
1281
// the hash keys are equal and that HASH_BITS >= 8.
1282
scan += 2; match++;
1283
1284      // We check for insufficient lookahead only every 8th comparison;
1285
// the 256th check will be made at strstart+258.
1286
do {
1287      } while (window[++scan] == window[++match] &&
1288           window[++scan] == window[++match] &&
1289           window[++scan] == window[++match] &&
1290           window[++scan] == window[++match] &&
1291           window[++scan] == window[++match] &&
1292           window[++scan] == window[++match] &&
1293           window[++scan] == window[++match] &&
1294           window[++scan] == window[++match] &&
1295           scan < strend);
1296
1297      len = MAX_MATCH - (int)(strend - scan);
1298      scan = strend - MAX_MATCH;
1299
1300      if(len>best_len) {
1301    match_start = cur_match;
1302    best_len = len;
1303    if (len >= nice_match) break;
1304    scan_end1 = window[scan+best_len-1];
1305    scan_end = window[scan+best_len];
1306      }
1307
1308    } while ((cur_match = (prev[cur_match & wmask]&0xffff)) > limit
1309         && --chain_length != 0);
1310
1311    if (best_len <= lookahead) return best_len;
1312    return lookahead;
1313  }
1314    
1315  int deflateInit(ZStream strm, int level, int bits){
1316    return deflateInit2(strm, level, Z_DEFLATED, bits, DEF_MEM_LEVEL,
1317            Z_DEFAULT_STRATEGY);
1318  }
1319  int deflateInit(ZStream strm, int level){
1320    return deflateInit(strm, level, MAX_WBITS);
1321  }
1322  int deflateInit2(ZStream strm, int level, int method, int windowBits,
1323           int memLevel, int strategy){
1324    int noheader = 0;
1325    // byte[] my_version=ZLIB_VERSION;
1326

1327    //
1328
// if (version == null || version[0] != my_version[0]
1329
// || stream_size != sizeof(z_stream)) {
1330
// return Z_VERSION_ERROR;
1331
// }
1332

1333    strm.msg = null;
1334
1335    if (level == Z_DEFAULT_COMPRESSION) level = 6;
1336
1337    if (windowBits < 0) { // undocumented feature: suppress zlib header
1338
noheader = 1;
1339      windowBits = -windowBits;
1340    }
1341
1342    if (memLevel < 1 || memLevel > MAX_MEM_LEVEL ||
1343    method != Z_DEFLATED ||
1344    windowBits < 9 || windowBits > 15 || level < 0 || level > 9 ||
1345        strategy < 0 || strategy > Z_HUFFMAN_ONLY) {
1346      return Z_STREAM_ERROR;
1347    }
1348
1349    strm.dstate = (Deflate)this;
1350
1351    this.noheader = noheader;
1352    w_bits = windowBits;
1353    w_size = 1 << w_bits;
1354    w_mask = w_size - 1;
1355
1356    hash_bits = memLevel + 7;
1357    hash_size = 1 << hash_bits;
1358    hash_mask = hash_size - 1;
1359    hash_shift = ((hash_bits+MIN_MATCH-1)/MIN_MATCH);
1360
1361    window = new byte[w_size*2];
1362    prev = new short[w_size];
1363    head = new short[hash_size];
1364
1365    lit_bufsize = 1 << (memLevel + 6); // 16K elements by default
1366

1367    // We overlay pending_buf and d_buf+l_buf. This works since the average
1368
// output size for (length,distance) codes is <= 24 bits.
1369
pending_buf = new byte[lit_bufsize*4];
1370    pending_buf_size = lit_bufsize*4;
1371
1372    d_buf = lit_bufsize/2;
1373    l_buf = (1+2)*lit_bufsize;
1374
1375    this.level = level;
1376
1377//System.out.println("level="+level);
1378

1379    this.strategy = strategy;
1380    this.method = (byte)method;
1381
1382    return deflateReset(strm);
1383  }
1384
1385  int deflateReset(ZStream strm){
1386    strm.total_in = strm.total_out = 0;
1387    strm.msg = null; //
1388
strm.data_type = Z_UNKNOWN;
1389
1390    pending = 0;
1391    pending_out = 0;
1392
1393    if(noheader < 0) {
1394      noheader = 0; // was set to -1 by deflate(..., Z_FINISH);
1395
}
1396    status = (noheader!=0) ? BUSY_STATE : INIT_STATE;
1397    strm.adler=strm._adler.adler32(0, null, 0, 0);
1398
1399    last_flush = Z_NO_FLUSH;
1400
1401    tr_init();
1402    lm_init();
1403    return Z_OK;
1404  }
1405
1406  int deflateEnd(){
1407    if(status!=INIT_STATE && status!=BUSY_STATE && status!=FINISH_STATE){
1408      return Z_STREAM_ERROR;
1409    }
1410    // Deallocate in reverse order of allocations:
1411
pending_buf=null;
1412    head=null;
1413    prev=null;
1414    window=null;
1415    // free
1416
// dstate=null;
1417
return status == BUSY_STATE ? Z_DATA_ERROR : Z_OK;
1418  }
1419
1420  int deflateParams(ZStream strm, int _level, int _strategy){
1421    int err=Z_OK;
1422
1423    if(_level == Z_DEFAULT_COMPRESSION){
1424      _level = 6;
1425    }
1426    if(_level < 0 || _level > 9 ||
1427       _strategy < 0 || _strategy > Z_HUFFMAN_ONLY) {
1428      return Z_STREAM_ERROR;
1429    }
1430
1431    if(config_table[level].func!=config_table[_level].func &&
1432       strm.total_in != 0) {
1433      // Flush the last buffer:
1434
err = strm.deflate(Z_PARTIAL_FLUSH);
1435    }
1436
1437    if(level != _level) {
1438      level = _level;
1439      max_lazy_match = config_table[level].max_lazy;
1440      good_match = config_table[level].good_length;
1441      nice_match = config_table[level].nice_length;
1442      max_chain_length = config_table[level].max_chain;
1443    }
1444    strategy = _strategy;
1445    return err;
1446  }
1447
1448  int deflateSetDictionary (ZStream strm, byte[] dictionary, int dictLength){
1449    int length = dictLength;
1450    int index=0;
1451
1452    if(dictionary == null || status != INIT_STATE)
1453      return Z_STREAM_ERROR;
1454
1455    strm.adler=strm._adler.adler32(strm.adler, dictionary, 0, dictLength);
1456
1457    if(length < MIN_MATCH) return Z_OK;
1458    if(length > w_size-MIN_LOOKAHEAD){
1459      length = w_size-MIN_LOOKAHEAD;
1460      index=dictLength-length; // use the tail of the dictionary
1461
}
1462    System.arraycopy(dictionary, index, window, 0, length);
1463    strstart = length;
1464    block_start = length;
1465
1466    // Insert all strings in the hash table (except for the last two bytes).
1467
// s->lookahead stays null, so s->ins_h will be recomputed at the next
1468
// call of fill_window.
1469

1470    ins_h = window[0]&0xff;
1471    ins_h=(((ins_h)<<hash_shift)^(window[1]&0xff))&hash_mask;
1472
1473    for(int n=0; n<=length-MIN_MATCH; n++){
1474      ins_h=(((ins_h)<<hash_shift)^(window[(n)+(MIN_MATCH-1)]&0xff))&hash_mask;
1475      prev[n&w_mask]=head[ins_h];
1476      head[ins_h]=(short)n;
1477    }
1478    return Z_OK;
1479  }
1480
1481  int deflate(ZStream strm, int flush){
1482    int old_flush;
1483
1484    if(flush>Z_FINISH || flush<0){
1485      return Z_STREAM_ERROR;
1486    }
1487
1488    if(strm.next_out == null ||
1489       (strm.next_in == null && strm.avail_in != 0) ||
1490       (status == FINISH_STATE && flush != Z_FINISH)) {
1491      strm.msg=z_errmsg[Z_NEED_DICT-(Z_STREAM_ERROR)];
1492      return Z_STREAM_ERROR;
1493    }
1494    if(strm.avail_out == 0){
1495      strm.msg=z_errmsg[Z_NEED_DICT-(Z_BUF_ERROR)];
1496      return Z_BUF_ERROR;
1497    }
1498
1499    this.strm = strm; // just in case
1500
old_flush = last_flush;
1501    last_flush = flush;
1502
1503    // Write the zlib header
1504
if(status == INIT_STATE) {
1505      int header = (Z_DEFLATED+((w_bits-8)<<4))<<8;
1506      int level_flags=((level-1)&0xff)>>1;
1507
1508      if(level_flags>3) level_flags=3;
1509      header |= (level_flags<<6);
1510      if(strstart!=0) header |= PRESET_DICT;
1511      header+=31-(header % 31);
1512
1513      status=BUSY_STATE;
1514      putShortMSB(header);
1515
1516
1517      // Save the adler32 of the preset dictionary:
1518
if(strstart!=0){
1519        putShortMSB((int)(strm.adler>>>16));
1520        putShortMSB((int)(strm.adler&0xffff));
1521      }
1522      strm.adler=strm._adler.adler32(0, null, 0, 0);
1523    }
1524
1525    // Flush as much pending output as possible
1526
if(pending != 0) {
1527      strm.flush_pending();
1528      if(strm.avail_out == 0) {
1529    //System.out.println(" avail_out==0");
1530
// Since avail_out is 0, deflate will be called again with
1531
// more output space, but possibly with both pending and
1532
// avail_in equal to zero. There won't be anything to do,
1533
// but this is not an error situation so make sure we
1534
// return OK instead of BUF_ERROR at next call of deflate:
1535
last_flush = -1;
1536    return Z_OK;
1537      }
1538
1539      // Make sure there is something to do and avoid duplicate consecutive
1540
// flushes. For repeated and useless calls with Z_FINISH, we keep
1541
// returning Z_STREAM_END instead of Z_BUFF_ERROR.
1542
}
1543    else if(strm.avail_in==0 && flush <= old_flush &&
1544        flush != Z_FINISH) {
1545      strm.msg=z_errmsg[Z_NEED_DICT-(Z_BUF_ERROR)];
1546      return Z_BUF_ERROR;
1547    }
1548
1549    // User must not provide more input after the first FINISH:
1550
if(status == FINISH_STATE && strm.avail_in != 0) {
1551      strm.msg=z_errmsg[Z_NEED_DICT-(Z_BUF_ERROR)];
1552      return Z_BUF_ERROR;
1553    }
1554
1555    // Start a new block or continue the current one.
1556
if(strm.avail_in!=0 || lookahead!=0 ||
1557       (flush != Z_NO_FLUSH && status != FINISH_STATE)) {
1558      int bstate=-1;
1559      switch(config_table[level].func){
1560      case STORED:
1561    bstate = deflate_stored(flush);
1562    break;
1563      case FAST:
1564    bstate = deflate_fast(flush);
1565    break;
1566      case SLOW:
1567    bstate = deflate_slow(flush);
1568    break;
1569      default:
1570      }
1571
1572      if (bstate==FinishStarted || bstate==FinishDone) {
1573    status = FINISH_STATE;
1574      }
1575      if (bstate==NeedMore || bstate==FinishStarted) {
1576    if(strm.avail_out == 0) {
1577      last_flush = -1; // avoid BUF_ERROR next call, see above
1578
}
1579    return Z_OK;
1580    // If flush != Z_NO_FLUSH && avail_out == 0, the next call
1581
// of deflate should use the same flush parameter to make sure
1582
// that the flush is complete. So we don't have to output an
1583
// empty block here, this will be done at next call. This also
1584
// ensures that for a very small output buffer, we emit at most
1585
// one empty block.
1586
}
1587
1588      if (bstate==BlockDone) {
1589    if(flush == Z_PARTIAL_FLUSH) {
1590      _tr_align();
1591    }
1592    else { // FULL_FLUSH or SYNC_FLUSH
1593
_tr_stored_block(0, 0, false);
1594      // For a full flush, this empty block will be recognized
1595
// as a special marker by inflate_sync().
1596
if(flush == Z_FULL_FLUSH) {
1597        //state.head[s.hash_size-1]=0;
1598
for(int i=0; i<hash_size/*-1*/; i++) // forget history
1599
head[i]=0;
1600      }
1601    }
1602    strm.flush_pending();
1603    if(strm.avail_out == 0) {
1604      last_flush = -1; // avoid BUF_ERROR at next call, see above
1605
return Z_OK;
1606    }
1607      }
1608    }
1609
1610    if(flush!=Z_FINISH) return Z_OK;
1611    if(noheader!=0) return Z_STREAM_END;
1612
1613    // Write the zlib trailer (adler32)
1614
putShortMSB((int)(strm.adler>>>16));
1615    putShortMSB((int)(strm.adler&0xffff));
1616    strm.flush_pending();
1617
1618    // If avail_out is zero, the application will call deflate again
1619
// to flush the rest.
1620
noheader = -1; // write the trailer only once!
1621
return pending != 0 ? Z_OK : Z_STREAM_END;
1622  }
1623}
1624
Popular Tags