abc-master
 All Data Structures Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros
bzlib_private.h
Go to the documentation of this file.
1 
2 /*-------------------------------------------------------------*/
3 /*--- Private header file for the library. ---*/
4 /*--- bzlib_private.h ---*/
5 /*-------------------------------------------------------------*/
6 
7 /* ------------------------------------------------------------------
8  This file is part of bzip2/libbzip2, a program and library for
9  lossless, block-sorting data compression.
10 
11  bzip2/libbzip2 version 1.0.5 of 10 December 2007
12  Copyright (C) 1996-2007 Julian Seward <jseward@bzip.org>
13 
14  Please read the WARNING, DISCLAIMER and PATENTS sections in the
15  README file.
16 
17  This program is released under the terms of the license contained
18  in the file LICENSE.
19  ------------------------------------------------------------------ */
20 
21 
22 #ifndef ABC__misc__bzlib__bzlib_private_h
23 #define ABC__misc__bzlib__bzlib_private_h
24 
25 
26 #include <stdlib.h>
27 
28 #ifndef BZ_NO_STDIO
29 #include <stdio.h>
30 #include <ctype.h>
31 #include <string.h>
32 #endif
33 
34 
35 #include "bzlib.h"
36 
38 
39 /*-- General stuff. --*/
40 
41 #define BZ_VERSION "1.0.5, 10-Dec-2007"
42 
43 typedef char Char;
44 typedef unsigned char Bool;
45 typedef unsigned char UChar;
46 typedef int Int32;
47 typedef unsigned int UInt32;
48 typedef short Int16;
49 typedef unsigned short UInt16;
50 
51 #define True ((Bool)1)
52 #define False ((Bool)0)
53 
54 #ifndef __GNUC__
55 #define __inline__ /* */
56 #endif
57 
58 #ifndef BZ_NO_STDIO
59 
60 extern void BZ2_bz__AssertH__fail ( int errcode );
61 #define AssertH(cond,errcode) \
62  { if (!(cond)) BZ2_bz__AssertH__fail ( errcode ); }
63 
64 #if BZ_DEBUG
65 #define AssertD(cond,msg) \
66  { if (!(cond)) { \
67  fprintf ( stderr, \
68  "\n\nlibbzip2(debug build): internal error\n\t%s\n", msg );\
69  exit(1); \
70  }}
71 #else
72 #define AssertD(cond,msg) /* */
73 #endif
74 
75 #define VPrintf0(zf) \
76  fprintf(stderr,zf)
77 #define VPrintf1(zf,za1) \
78  fprintf(stderr,zf,za1)
79 #define VPrintf2(zf,za1,za2) \
80  fprintf(stderr,zf,za1,za2)
81 #define VPrintf3(zf,za1,za2,za3) \
82  fprintf(stderr,zf,za1,za2,za3)
83 #define VPrintf4(zf,za1,za2,za3,za4) \
84  fprintf(stderr,zf,za1,za2,za3,za4)
85 #define VPrintf5(zf,za1,za2,za3,za4,za5) \
86  fprintf(stderr,zf,za1,za2,za3,za4,za5)
87 
88 #else
89 
90 extern void bz_internal_error ( int errcode );
91 #define AssertH(cond,errcode) \
92  { if (!(cond)) bz_internal_error ( errcode ); }
93 #define AssertD(cond,msg) do { } while (0)
94 #define VPrintf0(zf) do { } while (0)
95 #define VPrintf1(zf,za1) do { } while (0)
96 #define VPrintf2(zf,za1,za2) do { } while (0)
97 #define VPrintf3(zf,za1,za2,za3) do { } while (0)
98 #define VPrintf4(zf,za1,za2,za3,za4) do { } while (0)
99 #define VPrintf5(zf,za1,za2,za3,za4,za5) do { } while (0)
100 
101 #endif
102 
103 
104 #define BZALLOC(nnn) (strm->bzalloc)(strm->opaque,(nnn),1)
105 #define BZFREE(ppp) (strm->bzfree)(strm->opaque,(ppp))
106 
107 
108 /*-- Header bytes. --*/
109 
110 #define BZ_HDR_B 0x42 /* 'B' */
111 #define BZ_HDR_Z 0x5a /* 'Z' */
112 #define BZ_HDR_h 0x68 /* 'h' */
113 #define BZ_HDR_0 0x30 /* '0' */
114 
115 /*-- Constants for the back end. --*/
116 
117 #define BZ_MAX_ALPHA_SIZE 258
118 #define BZ_MAX_CODE_LEN 23
119 
120 #define BZ_RUNA 0
121 #define BZ_RUNB 1
122 
123 #define BZ_N_GROUPS 6
124 #define BZ_G_SIZE 50
125 #define BZ_N_ITERS 4
126 
127 #define BZ_MAX_SELECTORS (2 + (900000 / BZ_G_SIZE))
128 
129 
130 
131 /*-- Stuff for randomising repetitive blocks. --*/
132 
133 extern Int32 BZ2_rNums[512];
134 
135 #define BZ_RAND_DECLS \
136  Int32 rNToGo; \
137  Int32 rTPos \
138 
139 #define BZ_RAND_INIT_MASK \
140  s->rNToGo = 0; \
141  s->rTPos = 0 \
142 
143 #define BZ_RAND_MASK ((s->rNToGo == 1) ? 1 : 0)
144 
145 #define BZ_RAND_UPD_MASK \
146  if (s->rNToGo == 0) { \
147  s->rNToGo = BZ2_rNums[s->rTPos]; \
148  s->rTPos++; \
149  if (s->rTPos == 512) s->rTPos = 0; \
150  } \
151  s->rNToGo--;
152 
153 
154 
155 /*-- Stuff for doing CRCs. --*/
156 
157 extern UInt32 BZ2_crc32Table[256];
158 
159 #define BZ_INITIALISE_CRC(crcVar) \
160 { \
161  crcVar = 0xffffffffL; \
162 }
163 
164 #define BZ_FINALISE_CRC(crcVar) \
165 { \
166  crcVar = ~(crcVar); \
167 }
168 
169 #define BZ_UPDATE_CRC(crcVar,cha) \
170 { \
171  crcVar = (crcVar << 8) ^ \
172  BZ2_crc32Table[(crcVar >> 24) ^ \
173  ((UChar)cha)]; \
174 }
175 
176 
177 
178 /*-- States and modes for compression. --*/
179 
180 #define BZ_M_IDLE 1
181 #define BZ_M_RUNNING 2
182 #define BZ_M_FLUSHING 3
183 #define BZ_M_FINISHING 4
184 
185 #define BZ_S_OUTPUT 1
186 #define BZ_S_INPUT 2
187 
188 #define BZ_N_RADIX 2
189 #define BZ_N_QSORT 12
190 #define BZ_N_SHELL 18
191 #define BZ_N_OVERSHOOT (BZ_N_RADIX + BZ_N_QSORT + BZ_N_SHELL + 2)
192 
193 
194 
195 
196 /*-- Structure holding all the compression-side stuff. --*/
197 
198 typedef
199  struct {
200  /* pointer back to the struct bz_stream */
202 
203  /* mode this stream is in, and whether inputting */
204  /* or outputting data */
207 
208  /* remembers avail_in when flush/finish requested */
210 
211  /* for doing the block sorting */
216 
217  /* aliases for arr1 and arr2 */
222 
223  /* for deciding when to use the fallback sorting algorithm */
225 
226  /* run-length-encoding of the input */
230 
231  /* input and output limits and current posns */
236 
237  /* map of bytes used in block */
239  Bool inUse[256];
240  UChar unseqToSeq[256];
241 
242  /* the buffer for bit stream creation */
245 
246  /* block and combined CRCs */
249 
250  /* misc administratium */
254 
255  /* stuff for coding the MTF values */
259  UChar selectorMtf[BZ_MAX_SELECTORS];
260 
264  /* second dimension: only 3 needed; 4 makes index calculations faster */
265  UInt32 len_pack[BZ_MAX_ALPHA_SIZE][4];
266 
267  }
268  EState;
269 
270 
271 
272 /*-- externs for compression. --*/
273 
274 extern void
275 BZ2_blockSort ( EState* );
276 
277 extern void
279 
280 extern void
282 
283 extern void
285 
286 extern void
288 
289 
290 
291 /*-- states for decompression. --*/
292 
293 #define BZ_X_IDLE 1
294 #define BZ_X_OUTPUT 2
295 
296 #define BZ_X_MAGIC_1 10
297 #define BZ_X_MAGIC_2 11
298 #define BZ_X_MAGIC_3 12
299 #define BZ_X_MAGIC_4 13
300 #define BZ_X_BLKHDR_1 14
301 #define BZ_X_BLKHDR_2 15
302 #define BZ_X_BLKHDR_3 16
303 #define BZ_X_BLKHDR_4 17
304 #define BZ_X_BLKHDR_5 18
305 #define BZ_X_BLKHDR_6 19
306 #define BZ_X_BCRC_1 20
307 #define BZ_X_BCRC_2 21
308 #define BZ_X_BCRC_3 22
309 #define BZ_X_BCRC_4 23
310 #define BZ_X_RANDBIT 24
311 #define BZ_X_ORIGPTR_1 25
312 #define BZ_X_ORIGPTR_2 26
313 #define BZ_X_ORIGPTR_3 27
314 #define BZ_X_MAPPING_1 28
315 #define BZ_X_MAPPING_2 29
316 #define BZ_X_SELECTOR_1 30
317 #define BZ_X_SELECTOR_2 31
318 #define BZ_X_SELECTOR_3 32
319 #define BZ_X_CODING_1 33
320 #define BZ_X_CODING_2 34
321 #define BZ_X_CODING_3 35
322 #define BZ_X_MTF_1 36
323 #define BZ_X_MTF_2 37
324 #define BZ_X_MTF_3 38
325 #define BZ_X_MTF_4 39
326 #define BZ_X_MTF_5 40
327 #define BZ_X_MTF_6 41
328 #define BZ_X_ENDHDR_2 42
329 #define BZ_X_ENDHDR_3 43
330 #define BZ_X_ENDHDR_4 44
331 #define BZ_X_ENDHDR_5 45
332 #define BZ_X_ENDHDR_6 46
333 #define BZ_X_CCRC_1 47
334 #define BZ_X_CCRC_2 48
335 #define BZ_X_CCRC_3 49
336 #define BZ_X_CCRC_4 50
337 
338 
339 
340 /*-- Constants for the fast MTF decoder. --*/
341 
342 #define MTFA_SIZE 4096
343 #define MTFL_SIZE 16
344 
345 
346 
347 /*-- Structure holding all the decompression-side stuff. --*/
348 
349 typedef
350  struct {
351  /* pointer back to the struct bz_stream */
353 
354  /* state indicator for this stream */
356 
357  /* for doing the final run-length decoding */
362 
363  /* the buffer for bit stream reading */
366 
367  /* misc administratium */
372 
373  /* for undoing the Burrows-Wheeler transform */
377  Int32 unzftab[256];
379  Int32 cftab[257];
380  Int32 cftabCopy[257];
381 
382  /* for undoing the Burrows-Wheeler transform (FAST) */
384 
385  /* for undoing the Burrows-Wheeler transform (SMALL) */
388 
389  /* stored and calculated CRCs */
394 
395  /* map of bytes used in block */
397  Bool inUse[256];
398  Bool inUse16[16];
399  UChar seqToUnseq[256];
400 
401  /* for decoding the MTF values */
402  UChar mtfa [MTFA_SIZE];
403  Int32 mtfbase[256 / MTFL_SIZE];
405  UChar selectorMtf[BZ_MAX_SELECTORS];
407 
411  Int32 minLens[BZ_N_GROUPS];
412 
413  /* save area for scalars in the main decompress code */
438 
439  }
440  DState;
441 
442 
443 
444 /*-- Macros for decompression. --*/
445 
446 #define BZ_GET_FAST(cccc) \
447  /* c_tPos is unsigned, hence test < 0 is pointless. */ \
448  if (s->tPos >= (UInt32)100000 * (UInt32)s->blockSize100k) return True; \
449  s->tPos = s->tt[s->tPos]; \
450  cccc = (UChar)(s->tPos & 0xff); \
451  s->tPos >>= 8;
452 
453 #define BZ_GET_FAST_C(cccc) \
454  /* c_tPos is unsigned, hence test < 0 is pointless. */ \
455  if (c_tPos >= (UInt32)100000 * (UInt32)ro_blockSize100k) return True; \
456  c_tPos = c_tt[c_tPos]; \
457  cccc = (UChar)(c_tPos & 0xff); \
458  c_tPos >>= 8;
459 
460 #define SET_LL4(i,n) \
461  { if (((i) & 0x1) == 0) \
462  s->ll4[(i) >> 1] = (s->ll4[(i) >> 1] & 0xf0) | (n); else \
463  s->ll4[(i) >> 1] = (s->ll4[(i) >> 1] & 0x0f) | ((n) << 4); \
464  }
465 
466 #define GET_LL4(i) \
467  ((((UInt32)(s->ll4[(i) >> 1])) >> (((i) << 2) & 0x4)) & 0xF)
468 
469 #define SET_LL(i,n) \
470  { s->ll16[i] = (UInt16)(n & 0x0000ffff); \
471  SET_LL4(i, n >> 16); \
472  }
473 
474 #define GET_LL(i) \
475  (((UInt32)s->ll16[i]) | (GET_LL4(i) << 16))
476 
477 #define BZ_GET_SMALL(cccc) \
478  /* c_tPos is unsigned, hence test < 0 is pointless. */ \
479  if (s->tPos >= (UInt32)100000 * (UInt32)s->blockSize100k) return True; \
480  cccc = BZ2_indexIntoF ( s->tPos, s->cftab ); \
481  s->tPos = GET_LL(s->tPos);
482 
483 
484 /*-- externs for decompression. --*/
485 
486 Int32
488 
489 extern Int32
491 
492 extern void
494  Int32, Int32, Int32 );
495 
496 
497 #endif
498 
499 
500 /*-- BZ_NO_STDIO seems to make NULL disappear on some platforms. --*/
501 
502 #ifdef BZ_NO_STDIO
503 #ifndef NULL
504 #define NULL 0
505 #endif
506 
507 #endif
508 
510 
511 /*-------------------------------------------------------------*/
512 /*--- end bzlib_private.h ---*/
513 /*-------------------------------------------------------------*/
#define MTFA_SIZE
Int32 save_zvec
void BZ2_bz__AssertH__fail(int errcode)
Definition: bzlib.c:52
UInt16 * mtfv
Int32 * save_gBase
Int32 state_out_pos
Int32 BZ2_rNums[512]
Definition: randtable.c:29
void BZ2_compressBlock(EState *, Bool)
Definition: compress.c:605
UInt32 blockCRC
UInt32 storedBlockCRC
Int32 origPtr
UInt32 tPos
Int32 state_out_len
UInt16 * ll16
Int32 save_nSelectors
Int32 origPtr
Int32 workFactor
bz_stream * strm
Int32 save_i
Int32 BZ2_indexIntoF(Int32, Int32 *)
Definition: bzlib.c:698
UChar * zbits
UInt32 state_in_ch
Int32 nInUse
Int32 save_N
Int32 save_t
UInt32 * arr2
UInt32 calculatedBlockCRC
#define BZ_MAX_SELECTORS
Int32 save_nGroups
Int32 state
bz_stream * strm
Int32 * save_gPerm
void BZ2_hbMakeCodeLengths(UChar *, Int32 *, Int32, Int32)
Definition: huffman.c:66
Bool smallDecompress
Int32 save_es
Int32 nInUse
unsigned char Bool
Definition: bzlib_private.h:44
Int32 bsLive
Int32 save_gSel
short Int16
Definition: bzlib_private.h:48
Int32 blockSize100k
UInt32 combinedCRC
Int32 verbosity
UChar state_out_ch
Int32 save_groupNo
Int32 save_zj
UInt32 * arr1
Int32 save_EOB
Int32 nblock
Bool blockRandomised
UInt32 storedCombinedCRC
char Char
Definition: bzlib_private.h:43
Int32 BZ2_decompress(DState *)
Definition: decompress.c:109
Int32 * save_gLimit
Int32 blockNo
Int32 save_j
unsigned char UChar
Definition: bzlib_private.h:45
Int32 nblockMAX
Int32 save_zn
Int32 save_nblockMAX
Int32 state_in_len
unsigned int UInt32
Definition: bzlib_private.h:47
Int32 save_alphaSize
Int32 save_zt
#define ABC_NAMESPACE_HEADER_START
NAMESPACES ///.
Definition: abc_global.h:105
UInt32 avail_in_expect
#define ABC_NAMESPACE_HEADER_END
Definition: abc_global.h:106
UInt32 BZ2_crc32Table[256]
Definition: crctable.c:34
Definition: inftrees.h:26
Int32 numZ
UInt32 * ftab
Int32 mode
Int32 verbosity
UInt32 bsBuff
#define BZ_N_GROUPS
int Int32
Definition: bzlib_private.h:46
Int32 save_curr
UChar * ll4
#define BZ_MAX_ALPHA_SIZE
Int32 nMTF
Int32 nblock_used
Int32 save_nblock
Int32 blockSize100k
void BZ2_blockSort(EState *)
Definition: blocksort.c:1033
UInt32 * tt
void BZ2_hbAssignCodes(Int32 *, UChar *, Int32, Int32, Int32)
Definition: huffman.c:155
UInt32 * ptr
UInt32 bsBuff
UChar * block
Int32 save_groupPos
void BZ2_bsInitWrite(EState *)
Definition: compress.c:40
UInt32 calculatedCombinedCRC
unsigned short UInt16
Definition: bzlib_private.h:49
Int32 k0
#define MTFL_SIZE
Int32 state
void BZ2_hbCreateDecodeTables(Int32 *, Int32 *, Int32 *, UChar *, Int32, Int32, Int32)
Definition: huffman.c:173
Int32 bsLive
Int32 currBlockNo
Int32 save_gMinlen
Int32 save_nextSym