Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
lDEVinux
GitHub Repository: lDEVinux/eaglercraft
Path: blob/main/src/lwjgl/java/com/jcraft/jzlib/Deflate.java
8650 views
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([email protected]) and Mark Adler([email protected])
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
}
1758
1759