ABC: A System for Sequential Synthesis and Verification
 
Loading...
Searching...
No Matches
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
43typedef char Char;
44typedef unsigned char Bool;
45typedef unsigned char UChar;
46typedef int Int32;
47typedef unsigned int UInt32;
48typedef short Int16;
49typedef 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
60extern 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
90extern 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
133extern 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
157extern 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
198typedef
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 */
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 */
260
264 /* second dimension: only 3 needed; 4 makes index calculations faster */
266
267 }
268 EState;
269
270
271
272/*-- externs for compression. --*/
273
274extern void
276
277extern void
279
280extern void
282
283extern void
285
286extern 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
349typedef
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 */
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 */
400
401 /* for decoding the MTF values */
407
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
486Int32
488
489extern Int32
491
492extern 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 ABC_NAMESPACE_HEADER_END
#define ABC_NAMESPACE_HEADER_START
NAMESPACES ///.
#define BZ_N_GROUPS
Int32 BZ2_rNums[512]
Definition randtable.c:29
unsigned char Bool
void BZ2_compressBlock(EState *, Bool)
Definition compress.c:605
#define BZ_MAX_SELECTORS
short Int16
#define MTFL_SIZE
unsigned int UInt32
unsigned char UChar
char Char
Int32 BZ2_indexIntoF(Int32, Int32 *)
Definition bzlib.c:698
UInt32 BZ2_crc32Table[256]
Definition crctable.c:34
#define MTFA_SIZE
void BZ2_hbAssignCodes(Int32 *, UChar *, Int32, Int32, Int32)
Definition huffman.c:155
void BZ2_hbCreateDecodeTables(Int32 *, Int32 *, Int32 *, UChar *, Int32, Int32, Int32)
Definition huffman.c:173
void BZ2_bsInitWrite(EState *)
Definition compress.c:40
unsigned short UInt16
void BZ2_bz__AssertH__fail(int errcode)
Definition bzlib.c:52
Int32 BZ2_decompress(DState *)
Definition decompress.c:113
void BZ2_blockSort(EState *)
Definition blocksort.c:1033
int Int32
#define BZ_MAX_ALPHA_SIZE
void BZ2_hbMakeCodeLengths(UChar *, Int32 *, Int32, Int32)
Definition huffman.c:66
UInt32 calculatedBlockCRC
Int32 save_zn
bz_stream * strm
UChar selector[BZ_MAX_SELECTORS]
Bool smallDecompress
UInt32 calculatedCombinedCRC
Int32 base[BZ_N_GROUPS][BZ_MAX_ALPHA_SIZE]
UChar mtfa[MTFA_SIZE]
Int32 save_nextSym
Int32 save_alphaSize
Int32 save_t
UInt32 storedBlockCRC
Int32 save_zt
UInt32 storedCombinedCRC
Int32 * save_gLimit
Int32 save_nblock
Int32 save_i
Int32 origPtr
Int32 save_j
Int32 save_gMinlen
Int32 save_EOB
Int32 state_out_len
Int32 currBlockNo
UInt32 * tt
Int32 nblock_used
Int32 state
Int32 save_nGroups
Int32 unzftab[256]
Int32 cftab[257]
Int32 verbosity
Int32 perm[BZ_N_GROUPS][BZ_MAX_ALPHA_SIZE]
Int32 save_nSelectors
UChar len[BZ_N_GROUPS][BZ_MAX_ALPHA_SIZE]
UChar * ll4
UInt32 tPos
Int32 save_zvec
UChar seqToUnseq[256]
UInt16 * ll16
Int32 minLens[BZ_N_GROUPS]
Int32 * save_gPerm
UChar state_out_ch
Int32 save_gSel
Bool inUse[256]
Int32 save_curr
Int32 save_N
Int32 bsLive
Int32 save_groupPos
UChar selectorMtf[BZ_MAX_SELECTORS]
UInt32 bsBuff
Int32 mtfbase[256/MTFL_SIZE]
Int32 save_zj
Int32 save_groupNo
Int32 nInUse
Bool inUse16[16]
Int32 blockSize100k
Int32 save_nblockMAX
Int32 limit[BZ_N_GROUPS][BZ_MAX_ALPHA_SIZE]
Int32 * save_gBase
Bool blockRandomised
Int32 save_es
Int32 cftabCopy[257]
UChar * block
UInt16 * mtfv
UInt32 combinedCRC
UChar selector[BZ_MAX_SELECTORS]
Int32 mtfFreq[BZ_MAX_ALPHA_SIZE]
Int32 state
Int32 nblockMAX
Int32 nblock
Int32 code[BZ_N_GROUPS][BZ_MAX_ALPHA_SIZE]
Int32 state_in_len
Int32 workFactor
Bool inUse[256]
UInt32 blockCRC
UInt32 * ftab
UInt32 len_pack[BZ_MAX_ALPHA_SIZE][4]
UInt32 avail_in_expect
Int32 bsLive
UInt32 state_in_ch
UInt32 bsBuff
UChar selectorMtf[BZ_MAX_SELECTORS]
UInt32 * ptr
bz_stream * strm
Int32 numZ
Int32 blockSize100k
UInt32 * arr1
Int32 verbosity
Int32 blockNo
Int32 rfreq[BZ_N_GROUPS][BZ_MAX_ALPHA_SIZE]
Int32 nInUse
UChar len[BZ_N_GROUPS][BZ_MAX_ALPHA_SIZE]
Int32 state_out_pos
Int32 mode
UChar * zbits
Int32 nMTF
UChar unseqToSeq[256]
UInt32 * arr2
Int32 origPtr