Geant4 11.2.2
Toolkit for the simulation of the passage of particles through matter
All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Pages
inflate.h
Go to the documentation of this file.
1/* inflate.h -- internal inflate state definition
2 * Copyright (C) 1995-2019 Mark Adler
3 * For conditions of distribution and use, see copyright notice in zlib.h
4 */
5
6/* WARNING: this file should *not* be used by applications. It is
7 part of the implementation of the compression library and is
8 subject to change. Applications should only use zlib.h.
9 */
10
11/* define NO_GZIP when compiling if you want to disable gzip header and
12 trailer decoding by inflate(). NO_GZIP would be used to avoid linking in
13 the crc code when it is not needed. For shared libraries, gzip decoding
14 should be left enabled. */
15#ifndef NO_GZIP
16# define GUNZIP
17#endif
18
19/* Possible inflate modes between inflate() calls */
20typedef enum {
21 HEAD = 16180, /* i: waiting for magic header */
22 FLAGS, /* i: waiting for method and flags (gzip) */
23 TIME, /* i: waiting for modification time (gzip) */
24 OS, /* i: waiting for extra flags and operating system (gzip) */
25 EXLEN, /* i: waiting for extra length (gzip) */
26 EXTRA, /* i: waiting for extra bytes (gzip) */
27 NAME, /* i: waiting for end of file name (gzip) */
28 COMMENT, /* i: waiting for end of comment (gzip) */
29 HCRC, /* i: waiting for header crc (gzip) */
30 DICTID, /* i: waiting for dictionary check value */
31 DICT, /* waiting for inflateSetDictionary() call */
32 TYPE, /* i: waiting for type bits, including last-flag bit */
33 TYPEDO, /* i: same, but skip check to exit inflate on new block */
34 STORED, /* i: waiting for stored size (length and complement) */
35 COPY_, /* i/o: same as COPY below, but only first time in */
36 COPY, /* i/o: waiting for input or output to copy stored block */
37 TABLE, /* i: waiting for dynamic block table lengths */
38 LENLENS, /* i: waiting for code length code lengths */
39 CODELENS, /* i: waiting for length/lit and distance code lengths */
40 LEN_, /* i: same as LEN below, but only first time in */
41 LEN, /* i: waiting for length/lit/eob code */
42 LENEXT, /* i: waiting for length extra bits */
43 DIST, /* i: waiting for distance code */
44 DISTEXT, /* i: waiting for distance extra bits */
45 MATCH, /* o: waiting for output space to copy string */
46 LIT, /* o: waiting for output space to write literal */
47 CHECK, /* i: waiting for 32-bit check value */
48 LENGTH, /* i: waiting for 32-bit length (gzip) */
49 DONE, /* finished check, done -- remain here until reset */
50 BAD, /* got a data error -- remain here until reset */
51 MEM, /* got an inflate() memory error -- remain here until reset */
52 SYNC /* looking for synchronization bytes to restart inflate() */
54
55/*
56 State transitions between above modes -
57
58 (most modes can go to BAD or MEM on error -- not shown for clarity)
59
60 Process header:
61 HEAD -> (gzip) or (zlib) or (raw)
62 (gzip) -> FLAGS -> TIME -> OS -> EXLEN -> EXTRA -> NAME -> COMMENT ->
63 HCRC -> TYPE
64 (zlib) -> DICTID or TYPE
65 DICTID -> DICT -> TYPE
66 (raw) -> TYPEDO
67 Read deflate blocks:
68 TYPE -> TYPEDO -> STORED or TABLE or LEN_ or CHECK
69 STORED -> COPY_ -> COPY -> TYPE
70 TABLE -> LENLENS -> CODELENS -> LEN_
71 LEN_ -> LEN
72 Read deflate codes in fixed or dynamic block:
73 LEN -> LENEXT or LIT or TYPE
74 LENEXT -> DIST -> DISTEXT -> MATCH -> LEN
75 LIT -> LEN
76 Process trailer:
77 CHECK -> LENGTH -> DONE
78 */
79
80/* State maintained between inflate() calls -- approximately 7K bytes, not
81 including the allocated sliding window, which is up to 32K bytes. */
83 z_streamp strm; /* pointer back to this zlib stream */
84 inflate_mode mode; /* current inflate mode */
85 int last; /* true if processing last block */
86 int wrap; /* bit 0 true for zlib, bit 1 true for gzip,
87 bit 2 true to validate check value */
88 int havedict; /* true if dictionary provided */
89 int flags; /* gzip header method and flags, 0 if zlib, or
90 -1 if raw or no header yet */
91 unsigned dmax; /* zlib header max distance (INFLATE_STRICT) */
92 unsigned long check; /* protected copy of check value */
93 unsigned long total; /* protected copy of output count */
94 gz_headerp head; /* where to save gzip header information */
95 /* sliding window */
96 unsigned wbits; /* log base 2 of requested window size */
97 unsigned wsize; /* window size or zero if not using window */
98 unsigned whave; /* valid bytes in the window */
99 unsigned wnext; /* window write index */
100 unsigned char FAR *window; /* allocated sliding window, if needed */
101 /* bit accumulator */
102 unsigned long hold; /* input bit accumulator */
103 unsigned bits; /* number of bits in "in" */
104 /* for string and stored block copying */
105 unsigned length; /* literal or length of data to copy */
106 unsigned offset; /* distance back to copy string from */
107 /* for table and code decoding */
108 unsigned extra; /* extra bits needed */
109 /* fixed and dynamic code tables */
110 code const FAR *lencode; /* starting table for length/literal codes */
111 code const FAR *distcode; /* starting table for distance codes */
112 unsigned lenbits; /* index bits for lencode */
113 unsigned distbits; /* index bits for distcode */
114 /* dynamic table building */
115 unsigned ncode; /* number of code length code lengths */
116 unsigned nlen; /* number of length code lengths */
117 unsigned ndist; /* number of distance code lengths */
118 unsigned have; /* number of code lengths in lens[] */
119 code FAR *next; /* next available space in codes[] */
120 unsigned short lens[320]; /* temporary storage for code lengths */
121 unsigned short work[288]; /* work area for code table building */
122 code codes[ENOUGH]; /* space for code tables */
123 int sane; /* if false, allow invalid distance too far */
124 int back; /* bits back of last unprocessed length/lit */
125 unsigned was; /* initial length of match */
126};
inflate_mode
Definition inflate.h:20
@ HEAD
Definition inflate.h:21
@ MATCH
Definition inflate.h:45
@ DICT
Definition inflate.h:31
@ TABLE
Definition inflate.h:37
@ LENGTH
Definition inflate.h:48
@ FLAGS
Definition inflate.h:22
@ LIT
Definition inflate.h:46
@ SYNC
Definition inflate.h:52
@ OS
Definition inflate.h:24
@ EXLEN
Definition inflate.h:25
@ MEM
Definition inflate.h:51
@ NAME
Definition inflate.h:27
@ STORED
Definition inflate.h:34
@ CODELENS
Definition inflate.h:39
@ DICTID
Definition inflate.h:30
@ DONE
Definition inflate.h:49
@ TYPEDO
Definition inflate.h:33
@ COMMENT
Definition inflate.h:28
@ LENLENS
Definition inflate.h:38
@ TYPE
Definition inflate.h:32
@ COPY
Definition inflate.h:36
@ LEN_
Definition inflate.h:40
@ COPY_
Definition inflate.h:35
@ DIST
Definition inflate.h:43
@ LENEXT
Definition inflate.h:42
@ HCRC
Definition inflate.h:29
@ TIME
Definition inflate.h:23
@ CHECK
Definition inflate.h:47
@ DISTEXT
Definition inflate.h:44
@ BAD
Definition inflate.h:50
@ LEN
Definition inflate.h:41
@ EXTRA
Definition inflate.h:26
#define ENOUGH
Definition inftrees.h:51
unsigned was
Definition inflate.h:125
code const FAR * distcode
Definition inflate.h:111
unsigned wnext
Definition inflate.h:99
unsigned lenbits
Definition inflate.h:112
unsigned ndist
Definition inflate.h:117
code const FAR * lencode
Definition inflate.h:110
unsigned nlen
Definition inflate.h:116
unsigned have
Definition inflate.h:118
unsigned length
Definition inflate.h:105
unsigned long hold
Definition inflate.h:102
unsigned extra
Definition inflate.h:108
unsigned ncode
Definition inflate.h:115
z_streamp strm
Definition inflate.h:83
unsigned whave
Definition inflate.h:98
unsigned wbits
Definition inflate.h:96
unsigned short work[288]
Definition inflate.h:121
code FAR * next
Definition inflate.h:119
unsigned distbits
Definition inflate.h:113
inflate_mode mode
Definition inflate.h:84
unsigned char FAR * window
Definition inflate.h:100
unsigned short lens[320]
Definition inflate.h:120
gz_headerp head
Definition inflate.h:94
unsigned bits
Definition inflate.h:103
unsigned wsize
Definition inflate.h:97
unsigned dmax
Definition inflate.h:91
unsigned long check
Definition inflate.h:92
unsigned offset
Definition inflate.h:106
code codes[ENOUGH]
Definition inflate.h:122
unsigned long total
Definition inflate.h:93
gz_header FAR * gz_headerp
Definition zlib.h:131
z_stream FAR * z_streamp
Definition zlib.h:108