chd 0.1.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +7 -0
- data/README.md +30 -0
- data/chd.gemspec +29 -0
- data/ext/chd.c +1008 -0
- data/ext/extconf.rb +60 -0
- data/lib/chd/cd.rb +272 -0
- data/lib/chd/metadata.rb +196 -0
- data/lib/chd/version.rb +4 -0
- data/lib/chd.rb +21 -0
- data/libchdr/CMakeLists.txt +104 -0
- data/libchdr/LICENSE.txt +24 -0
- data/libchdr/README.md +7 -0
- data/libchdr/deps/lzma-19.00/CMakeLists.txt +33 -0
- data/libchdr/deps/lzma-19.00/LICENSE +3 -0
- data/libchdr/deps/lzma-19.00/include/7zTypes.h +375 -0
- data/libchdr/deps/lzma-19.00/include/Alloc.h +51 -0
- data/libchdr/deps/lzma-19.00/include/Bra.h +64 -0
- data/libchdr/deps/lzma-19.00/include/Compiler.h +33 -0
- data/libchdr/deps/lzma-19.00/include/CpuArch.h +336 -0
- data/libchdr/deps/lzma-19.00/include/Delta.h +19 -0
- data/libchdr/deps/lzma-19.00/include/LzFind.h +121 -0
- data/libchdr/deps/lzma-19.00/include/LzHash.h +57 -0
- data/libchdr/deps/lzma-19.00/include/Lzma86.h +111 -0
- data/libchdr/deps/lzma-19.00/include/LzmaDec.h +234 -0
- data/libchdr/deps/lzma-19.00/include/LzmaEnc.h +76 -0
- data/libchdr/deps/lzma-19.00/include/LzmaLib.h +131 -0
- data/libchdr/deps/lzma-19.00/include/Precomp.h +10 -0
- data/libchdr/deps/lzma-19.00/include/Sort.h +18 -0
- data/libchdr/deps/lzma-19.00/lzma-history.txt +446 -0
- data/libchdr/deps/lzma-19.00/lzma.txt +328 -0
- data/libchdr/deps/lzma-19.00/lzma.vcxproj +543 -0
- data/libchdr/deps/lzma-19.00/lzma.vcxproj.filters +17 -0
- data/libchdr/deps/lzma-19.00/src/Alloc.c +455 -0
- data/libchdr/deps/lzma-19.00/src/Bra86.c +82 -0
- data/libchdr/deps/lzma-19.00/src/BraIA64.c +53 -0
- data/libchdr/deps/lzma-19.00/src/CpuArch.c +218 -0
- data/libchdr/deps/lzma-19.00/src/Delta.c +64 -0
- data/libchdr/deps/lzma-19.00/src/LzFind.c +1127 -0
- data/libchdr/deps/lzma-19.00/src/Lzma86Dec.c +54 -0
- data/libchdr/deps/lzma-19.00/src/LzmaDec.c +1185 -0
- data/libchdr/deps/lzma-19.00/src/LzmaEnc.c +1330 -0
- data/libchdr/deps/lzma-19.00/src/Sort.c +141 -0
- data/libchdr/deps/zlib-1.2.11/CMakeLists.txt +29 -0
- data/libchdr/deps/zlib-1.2.11/ChangeLog +1515 -0
- data/libchdr/deps/zlib-1.2.11/FAQ +368 -0
- data/libchdr/deps/zlib-1.2.11/INDEX +68 -0
- data/libchdr/deps/zlib-1.2.11/Makefile +5 -0
- data/libchdr/deps/zlib-1.2.11/Makefile.in +410 -0
- data/libchdr/deps/zlib-1.2.11/README +115 -0
- data/libchdr/deps/zlib-1.2.11/adler32.c +186 -0
- data/libchdr/deps/zlib-1.2.11/compress.c +86 -0
- data/libchdr/deps/zlib-1.2.11/configure +921 -0
- data/libchdr/deps/zlib-1.2.11/crc32.c +442 -0
- data/libchdr/deps/zlib-1.2.11/crc32.h +441 -0
- data/libchdr/deps/zlib-1.2.11/deflate.c +2163 -0
- data/libchdr/deps/zlib-1.2.11/deflate.h +349 -0
- data/libchdr/deps/zlib-1.2.11/doc/algorithm.txt +209 -0
- data/libchdr/deps/zlib-1.2.11/doc/rfc1950.txt +619 -0
- data/libchdr/deps/zlib-1.2.11/doc/rfc1951.txt +955 -0
- data/libchdr/deps/zlib-1.2.11/doc/rfc1952.txt +675 -0
- data/libchdr/deps/zlib-1.2.11/doc/txtvsbin.txt +107 -0
- data/libchdr/deps/zlib-1.2.11/gzclose.c +25 -0
- data/libchdr/deps/zlib-1.2.11/gzguts.h +218 -0
- data/libchdr/deps/zlib-1.2.11/gzlib.c +637 -0
- data/libchdr/deps/zlib-1.2.11/gzread.c +654 -0
- data/libchdr/deps/zlib-1.2.11/gzwrite.c +665 -0
- data/libchdr/deps/zlib-1.2.11/infback.c +640 -0
- data/libchdr/deps/zlib-1.2.11/inffast.c +323 -0
- data/libchdr/deps/zlib-1.2.11/inffast.h +11 -0
- data/libchdr/deps/zlib-1.2.11/inffixed.h +94 -0
- data/libchdr/deps/zlib-1.2.11/inflate.c +1561 -0
- data/libchdr/deps/zlib-1.2.11/inflate.h +125 -0
- data/libchdr/deps/zlib-1.2.11/inftrees.c +304 -0
- data/libchdr/deps/zlib-1.2.11/inftrees.h +62 -0
- data/libchdr/deps/zlib-1.2.11/make_vms.com +867 -0
- data/libchdr/deps/zlib-1.2.11/treebuild.xml +116 -0
- data/libchdr/deps/zlib-1.2.11/trees.c +1203 -0
- data/libchdr/deps/zlib-1.2.11/trees.h +128 -0
- data/libchdr/deps/zlib-1.2.11/uncompr.c +93 -0
- data/libchdr/deps/zlib-1.2.11/zconf.h +534 -0
- data/libchdr/deps/zlib-1.2.11/zconf.h.cmakein +536 -0
- data/libchdr/deps/zlib-1.2.11/zconf.h.in +534 -0
- data/libchdr/deps/zlib-1.2.11/zlib.3 +149 -0
- data/libchdr/deps/zlib-1.2.11/zlib.3.pdf +0 -0
- data/libchdr/deps/zlib-1.2.11/zlib.h +1912 -0
- data/libchdr/deps/zlib-1.2.11/zlib.map +94 -0
- data/libchdr/deps/zlib-1.2.11/zlib.pc.cmakein +13 -0
- data/libchdr/deps/zlib-1.2.11/zlib.pc.in +13 -0
- data/libchdr/deps/zlib-1.2.11/zlib2ansi +152 -0
- data/libchdr/deps/zlib-1.2.11/zutil.c +325 -0
- data/libchdr/deps/zlib-1.2.11/zutil.h +271 -0
- data/libchdr/include/dr_libs/dr_flac.h +12280 -0
- data/libchdr/include/libchdr/bitstream.h +43 -0
- data/libchdr/include/libchdr/cdrom.h +110 -0
- data/libchdr/include/libchdr/chd.h +427 -0
- data/libchdr/include/libchdr/chdconfig.h +10 -0
- data/libchdr/include/libchdr/coretypes.h +60 -0
- data/libchdr/include/libchdr/flac.h +50 -0
- data/libchdr/include/libchdr/huffman.h +90 -0
- data/libchdr/pkg-config.pc.in +10 -0
- data/libchdr/src/libchdr_bitstream.c +125 -0
- data/libchdr/src/libchdr_cdrom.c +415 -0
- data/libchdr/src/libchdr_chd.c +2744 -0
- data/libchdr/src/libchdr_flac.c +302 -0
- data/libchdr/src/libchdr_huffman.c +545 -0
- data/libchdr/src/link.T +5 -0
- data/libchdr/tests/CMakeLists.txt +2 -0
- data/libchdr/tests/benchmark.c +52 -0
- metadata +183 -0
|
@@ -0,0 +1,336 @@
|
|
|
1
|
+
/* CpuArch.h -- CPU specific code
|
|
2
|
+
2018-02-18 : Igor Pavlov : Public domain */
|
|
3
|
+
|
|
4
|
+
#ifndef __CPU_ARCH_H
|
|
5
|
+
#define __CPU_ARCH_H
|
|
6
|
+
|
|
7
|
+
#include "7zTypes.h"
|
|
8
|
+
|
|
9
|
+
EXTERN_C_BEGIN
|
|
10
|
+
|
|
11
|
+
/*
|
|
12
|
+
MY_CPU_LE means that CPU is LITTLE ENDIAN.
|
|
13
|
+
MY_CPU_BE means that CPU is BIG ENDIAN.
|
|
14
|
+
If MY_CPU_LE and MY_CPU_BE are not defined, we don't know about ENDIANNESS of platform.
|
|
15
|
+
|
|
16
|
+
MY_CPU_LE_UNALIGN means that CPU is LITTLE ENDIAN and CPU supports unaligned memory accesses.
|
|
17
|
+
*/
|
|
18
|
+
|
|
19
|
+
#if defined(_M_X64) \
|
|
20
|
+
|| defined(_M_AMD64) \
|
|
21
|
+
|| defined(__x86_64__) \
|
|
22
|
+
|| defined(__AMD64__) \
|
|
23
|
+
|| defined(__amd64__)
|
|
24
|
+
#define MY_CPU_AMD64
|
|
25
|
+
#ifdef __ILP32__
|
|
26
|
+
#define MY_CPU_NAME "x32"
|
|
27
|
+
#else
|
|
28
|
+
#define MY_CPU_NAME "x64"
|
|
29
|
+
#endif
|
|
30
|
+
#define MY_CPU_64BIT
|
|
31
|
+
#endif
|
|
32
|
+
|
|
33
|
+
|
|
34
|
+
#if defined(_M_IX86) \
|
|
35
|
+
|| defined(__i386__)
|
|
36
|
+
#define MY_CPU_X86
|
|
37
|
+
#define MY_CPU_NAME "x86"
|
|
38
|
+
#define MY_CPU_32BIT
|
|
39
|
+
#endif
|
|
40
|
+
|
|
41
|
+
|
|
42
|
+
#if defined(_M_ARM64) \
|
|
43
|
+
|| defined(__AARCH64EL__) \
|
|
44
|
+
|| defined(__AARCH64EB__) \
|
|
45
|
+
|| defined(__aarch64__)
|
|
46
|
+
#define MY_CPU_ARM64
|
|
47
|
+
#define MY_CPU_NAME "arm64"
|
|
48
|
+
#define MY_CPU_64BIT
|
|
49
|
+
#endif
|
|
50
|
+
|
|
51
|
+
|
|
52
|
+
#if defined(_M_ARM) \
|
|
53
|
+
|| defined(_M_ARM_NT) \
|
|
54
|
+
|| defined(_M_ARMT) \
|
|
55
|
+
|| defined(__arm__) \
|
|
56
|
+
|| defined(__thumb__) \
|
|
57
|
+
|| defined(__ARMEL__) \
|
|
58
|
+
|| defined(__ARMEB__) \
|
|
59
|
+
|| defined(__THUMBEL__) \
|
|
60
|
+
|| defined(__THUMBEB__)
|
|
61
|
+
#define MY_CPU_ARM
|
|
62
|
+
#define MY_CPU_NAME "arm"
|
|
63
|
+
#define MY_CPU_32BIT
|
|
64
|
+
#endif
|
|
65
|
+
|
|
66
|
+
|
|
67
|
+
#if defined(_M_IA64) \
|
|
68
|
+
|| defined(__ia64__)
|
|
69
|
+
#define MY_CPU_IA64
|
|
70
|
+
#define MY_CPU_NAME "ia64"
|
|
71
|
+
#define MY_CPU_64BIT
|
|
72
|
+
#endif
|
|
73
|
+
|
|
74
|
+
|
|
75
|
+
#if defined(__mips64) \
|
|
76
|
+
|| defined(__mips64__) \
|
|
77
|
+
|| (defined(__mips) && (__mips == 64 || __mips == 4 || __mips == 3))
|
|
78
|
+
#define MY_CPU_NAME "mips64"
|
|
79
|
+
#define MY_CPU_64BIT
|
|
80
|
+
#elif defined(__mips__)
|
|
81
|
+
#define MY_CPU_NAME "mips"
|
|
82
|
+
/* #define MY_CPU_32BIT */
|
|
83
|
+
#endif
|
|
84
|
+
|
|
85
|
+
|
|
86
|
+
#if defined(__ppc64__) \
|
|
87
|
+
|| defined(__powerpc64__)
|
|
88
|
+
#ifdef __ILP32__
|
|
89
|
+
#define MY_CPU_NAME "ppc64-32"
|
|
90
|
+
#else
|
|
91
|
+
#define MY_CPU_NAME "ppc64"
|
|
92
|
+
#endif
|
|
93
|
+
#define MY_CPU_64BIT
|
|
94
|
+
#elif defined(__ppc__) \
|
|
95
|
+
|| defined(__powerpc__)
|
|
96
|
+
#define MY_CPU_NAME "ppc"
|
|
97
|
+
#define MY_CPU_32BIT
|
|
98
|
+
#endif
|
|
99
|
+
|
|
100
|
+
|
|
101
|
+
#if defined(__sparc64__)
|
|
102
|
+
#define MY_CPU_NAME "sparc64"
|
|
103
|
+
#define MY_CPU_64BIT
|
|
104
|
+
#elif defined(__sparc__)
|
|
105
|
+
#define MY_CPU_NAME "sparc"
|
|
106
|
+
/* #define MY_CPU_32BIT */
|
|
107
|
+
#endif
|
|
108
|
+
|
|
109
|
+
|
|
110
|
+
#if defined(MY_CPU_X86) || defined(MY_CPU_AMD64)
|
|
111
|
+
#define MY_CPU_X86_OR_AMD64
|
|
112
|
+
#endif
|
|
113
|
+
|
|
114
|
+
|
|
115
|
+
#ifdef _WIN32
|
|
116
|
+
|
|
117
|
+
#ifdef MY_CPU_ARM
|
|
118
|
+
#define MY_CPU_ARM_LE
|
|
119
|
+
#endif
|
|
120
|
+
|
|
121
|
+
#ifdef MY_CPU_ARM64
|
|
122
|
+
#define MY_CPU_ARM64_LE
|
|
123
|
+
#endif
|
|
124
|
+
|
|
125
|
+
#ifdef _M_IA64
|
|
126
|
+
#define MY_CPU_IA64_LE
|
|
127
|
+
#endif
|
|
128
|
+
|
|
129
|
+
#endif
|
|
130
|
+
|
|
131
|
+
|
|
132
|
+
#if defined(MY_CPU_X86_OR_AMD64) \
|
|
133
|
+
|| defined(MY_CPU_ARM_LE) \
|
|
134
|
+
|| defined(MY_CPU_ARM64_LE) \
|
|
135
|
+
|| defined(MY_CPU_IA64_LE) \
|
|
136
|
+
|| defined(__LITTLE_ENDIAN__) \
|
|
137
|
+
|| defined(__ARMEL__) \
|
|
138
|
+
|| defined(__THUMBEL__) \
|
|
139
|
+
|| defined(__AARCH64EL__) \
|
|
140
|
+
|| defined(__MIPSEL__) \
|
|
141
|
+
|| defined(__MIPSEL) \
|
|
142
|
+
|| defined(_MIPSEL) \
|
|
143
|
+
|| defined(__BFIN__) \
|
|
144
|
+
|| (defined(__BYTE_ORDER__) && (__BYTE_ORDER__ == __ORDER_LITTLE_ENDIAN__))
|
|
145
|
+
#define MY_CPU_LE
|
|
146
|
+
#endif
|
|
147
|
+
|
|
148
|
+
#if defined(__BIG_ENDIAN__) \
|
|
149
|
+
|| defined(__ARMEB__) \
|
|
150
|
+
|| defined(__THUMBEB__) \
|
|
151
|
+
|| defined(__AARCH64EB__) \
|
|
152
|
+
|| defined(__MIPSEB__) \
|
|
153
|
+
|| defined(__MIPSEB) \
|
|
154
|
+
|| defined(_MIPSEB) \
|
|
155
|
+
|| defined(__m68k__) \
|
|
156
|
+
|| defined(__s390__) \
|
|
157
|
+
|| defined(__s390x__) \
|
|
158
|
+
|| defined(__zarch__) \
|
|
159
|
+
|| (defined(__BYTE_ORDER__) && (__BYTE_ORDER__ == __ORDER_BIG_ENDIAN__))
|
|
160
|
+
#define MY_CPU_BE
|
|
161
|
+
#endif
|
|
162
|
+
|
|
163
|
+
|
|
164
|
+
#if defined(MY_CPU_LE) && defined(MY_CPU_BE)
|
|
165
|
+
#error Stop_Compiling_Bad_Endian
|
|
166
|
+
#endif
|
|
167
|
+
|
|
168
|
+
|
|
169
|
+
#if defined(MY_CPU_32BIT) && defined(MY_CPU_64BIT)
|
|
170
|
+
#error Stop_Compiling_Bad_32_64_BIT
|
|
171
|
+
#endif
|
|
172
|
+
|
|
173
|
+
|
|
174
|
+
#ifndef MY_CPU_NAME
|
|
175
|
+
#ifdef MY_CPU_LE
|
|
176
|
+
#define MY_CPU_NAME "LE"
|
|
177
|
+
#elif defined(MY_CPU_BE)
|
|
178
|
+
#define MY_CPU_NAME "BE"
|
|
179
|
+
#else
|
|
180
|
+
/*
|
|
181
|
+
#define MY_CPU_NAME ""
|
|
182
|
+
*/
|
|
183
|
+
#endif
|
|
184
|
+
#endif
|
|
185
|
+
|
|
186
|
+
|
|
187
|
+
|
|
188
|
+
|
|
189
|
+
|
|
190
|
+
#ifdef MY_CPU_LE
|
|
191
|
+
#if defined(MY_CPU_X86_OR_AMD64) \
|
|
192
|
+
|| defined(MY_CPU_ARM64) \
|
|
193
|
+
|| defined(__ARM_FEATURE_UNALIGNED)
|
|
194
|
+
#define MY_CPU_LE_UNALIGN
|
|
195
|
+
#endif
|
|
196
|
+
#endif
|
|
197
|
+
|
|
198
|
+
|
|
199
|
+
#ifdef MY_CPU_LE_UNALIGN
|
|
200
|
+
|
|
201
|
+
#define GetUi16(p) (*(const UInt16 *)(const void *)(p))
|
|
202
|
+
#define GetUi32(p) (*(const UInt32 *)(const void *)(p))
|
|
203
|
+
#define GetUi64(p) (*(const UInt64 *)(const void *)(p))
|
|
204
|
+
|
|
205
|
+
#define SetUi16(p, v) { *(UInt16 *)(p) = (v); }
|
|
206
|
+
#define SetUi32(p, v) { *(UInt32 *)(p) = (v); }
|
|
207
|
+
#define SetUi64(p, v) { *(UInt64 *)(p) = (v); }
|
|
208
|
+
|
|
209
|
+
#else
|
|
210
|
+
|
|
211
|
+
#define GetUi16(p) ( (UInt16) ( \
|
|
212
|
+
((const Byte *)(p))[0] | \
|
|
213
|
+
((UInt16)((const Byte *)(p))[1] << 8) ))
|
|
214
|
+
|
|
215
|
+
#define GetUi32(p) ( \
|
|
216
|
+
((const Byte *)(p))[0] | \
|
|
217
|
+
((UInt32)((const Byte *)(p))[1] << 8) | \
|
|
218
|
+
((UInt32)((const Byte *)(p))[2] << 16) | \
|
|
219
|
+
((UInt32)((const Byte *)(p))[3] << 24))
|
|
220
|
+
|
|
221
|
+
#define GetUi64(p) (GetUi32(p) | ((UInt64)GetUi32(((const Byte *)(p)) + 4) << 32))
|
|
222
|
+
|
|
223
|
+
#define SetUi16(p, v) { Byte *_ppp_ = (Byte *)(p); UInt32 _vvv_ = (v); \
|
|
224
|
+
_ppp_[0] = (Byte)_vvv_; \
|
|
225
|
+
_ppp_[1] = (Byte)(_vvv_ >> 8); }
|
|
226
|
+
|
|
227
|
+
#define SetUi32(p, v) { Byte *_ppp_ = (Byte *)(p); UInt32 _vvv_ = (v); \
|
|
228
|
+
_ppp_[0] = (Byte)_vvv_; \
|
|
229
|
+
_ppp_[1] = (Byte)(_vvv_ >> 8); \
|
|
230
|
+
_ppp_[2] = (Byte)(_vvv_ >> 16); \
|
|
231
|
+
_ppp_[3] = (Byte)(_vvv_ >> 24); }
|
|
232
|
+
|
|
233
|
+
#define SetUi64(p, v) { Byte *_ppp2_ = (Byte *)(p); UInt64 _vvv2_ = (v); \
|
|
234
|
+
SetUi32(_ppp2_ , (UInt32)_vvv2_); \
|
|
235
|
+
SetUi32(_ppp2_ + 4, (UInt32)(_vvv2_ >> 32)); }
|
|
236
|
+
|
|
237
|
+
#endif
|
|
238
|
+
|
|
239
|
+
#ifdef __has_builtin
|
|
240
|
+
#define MY__has_builtin(x) __has_builtin(x)
|
|
241
|
+
#else
|
|
242
|
+
#define MY__has_builtin(x) 0
|
|
243
|
+
#endif
|
|
244
|
+
|
|
245
|
+
#if defined(MY_CPU_LE_UNALIGN) && /* defined(_WIN64) && */ (_MSC_VER >= 1300)
|
|
246
|
+
|
|
247
|
+
/* Note: we use bswap instruction, that is unsupported in 386 cpu */
|
|
248
|
+
|
|
249
|
+
#include <stdlib.h>
|
|
250
|
+
|
|
251
|
+
#pragma intrinsic(_byteswap_ushort)
|
|
252
|
+
#pragma intrinsic(_byteswap_ulong)
|
|
253
|
+
#pragma intrinsic(_byteswap_uint64)
|
|
254
|
+
|
|
255
|
+
/* #define GetBe16(p) _byteswap_ushort(*(const UInt16 *)(const Byte *)(p)) */
|
|
256
|
+
#define GetBe32(p) _byteswap_ulong(*(const UInt32 *)(const Byte *)(p))
|
|
257
|
+
#define GetBe64(p) _byteswap_uint64(*(const UInt64 *)(const Byte *)(p))
|
|
258
|
+
|
|
259
|
+
#define SetBe32(p, v) (*(UInt32 *)(void *)(p)) = _byteswap_ulong(v)
|
|
260
|
+
|
|
261
|
+
#elif defined(MY_CPU_LE_UNALIGN) && ( \
|
|
262
|
+
(defined(__GNUC__) && (__GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 3))) \
|
|
263
|
+
|| (defined(__clang__) && MY__has_builtin(__builtin_bswap16)) )
|
|
264
|
+
|
|
265
|
+
/* #define GetBe16(p) __builtin_bswap16(*(const UInt16 *)(const Byte *)(p)) */
|
|
266
|
+
#define GetBe32(p) __builtin_bswap32(*(const UInt32 *)(const Byte *)(p))
|
|
267
|
+
#define GetBe64(p) __builtin_bswap64(*(const UInt64 *)(const Byte *)(p))
|
|
268
|
+
|
|
269
|
+
#define SetBe32(p, v) (*(UInt32 *)(void *)(p)) = __builtin_bswap32(v)
|
|
270
|
+
|
|
271
|
+
#else
|
|
272
|
+
|
|
273
|
+
#define GetBe32(p) ( \
|
|
274
|
+
((UInt32)((const Byte *)(p))[0] << 24) | \
|
|
275
|
+
((UInt32)((const Byte *)(p))[1] << 16) | \
|
|
276
|
+
((UInt32)((const Byte *)(p))[2] << 8) | \
|
|
277
|
+
((const Byte *)(p))[3] )
|
|
278
|
+
|
|
279
|
+
#define GetBe64(p) (((UInt64)GetBe32(p) << 32) | GetBe32(((const Byte *)(p)) + 4))
|
|
280
|
+
|
|
281
|
+
#define SetBe32(p, v) { Byte *_ppp_ = (Byte *)(p); UInt32 _vvv_ = (v); \
|
|
282
|
+
_ppp_[0] = (Byte)(_vvv_ >> 24); \
|
|
283
|
+
_ppp_[1] = (Byte)(_vvv_ >> 16); \
|
|
284
|
+
_ppp_[2] = (Byte)(_vvv_ >> 8); \
|
|
285
|
+
_ppp_[3] = (Byte)_vvv_; }
|
|
286
|
+
|
|
287
|
+
#endif
|
|
288
|
+
|
|
289
|
+
|
|
290
|
+
#ifndef GetBe16
|
|
291
|
+
|
|
292
|
+
#define GetBe16(p) ( (UInt16) ( \
|
|
293
|
+
((UInt16)((const Byte *)(p))[0] << 8) | \
|
|
294
|
+
((const Byte *)(p))[1] ))
|
|
295
|
+
|
|
296
|
+
#endif
|
|
297
|
+
|
|
298
|
+
|
|
299
|
+
|
|
300
|
+
#ifdef MY_CPU_X86_OR_AMD64
|
|
301
|
+
|
|
302
|
+
typedef struct
|
|
303
|
+
{
|
|
304
|
+
UInt32 maxFunc;
|
|
305
|
+
UInt32 vendor[3];
|
|
306
|
+
UInt32 ver;
|
|
307
|
+
UInt32 b;
|
|
308
|
+
UInt32 c;
|
|
309
|
+
UInt32 d;
|
|
310
|
+
} Cx86cpuid;
|
|
311
|
+
|
|
312
|
+
enum
|
|
313
|
+
{
|
|
314
|
+
CPU_FIRM_INTEL,
|
|
315
|
+
CPU_FIRM_AMD,
|
|
316
|
+
CPU_FIRM_VIA
|
|
317
|
+
};
|
|
318
|
+
|
|
319
|
+
void MyCPUID(UInt32 function, UInt32 *a, UInt32 *b, UInt32 *c, UInt32 *d);
|
|
320
|
+
|
|
321
|
+
BoolInt x86cpuid_CheckAndRead(Cx86cpuid *p);
|
|
322
|
+
int x86cpuid_GetFirm(const Cx86cpuid *p);
|
|
323
|
+
|
|
324
|
+
#define x86cpuid_GetFamily(ver) (((ver >> 16) & 0xFF0) | ((ver >> 8) & 0xF))
|
|
325
|
+
#define x86cpuid_GetModel(ver) (((ver >> 12) & 0xF0) | ((ver >> 4) & 0xF))
|
|
326
|
+
#define x86cpuid_GetStepping(ver) (ver & 0xF)
|
|
327
|
+
|
|
328
|
+
BoolInt CPU_Is_InOrder();
|
|
329
|
+
BoolInt CPU_Is_Aes_Supported();
|
|
330
|
+
BoolInt CPU_IsSupported_PageGB();
|
|
331
|
+
|
|
332
|
+
#endif
|
|
333
|
+
|
|
334
|
+
EXTERN_C_END
|
|
335
|
+
|
|
336
|
+
#endif
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
/* Delta.h -- Delta converter
|
|
2
|
+
2013-01-18 : Igor Pavlov : Public domain */
|
|
3
|
+
|
|
4
|
+
#ifndef __DELTA_H
|
|
5
|
+
#define __DELTA_H
|
|
6
|
+
|
|
7
|
+
#include "7zTypes.h"
|
|
8
|
+
|
|
9
|
+
EXTERN_C_BEGIN
|
|
10
|
+
|
|
11
|
+
#define DELTA_STATE_SIZE 256
|
|
12
|
+
|
|
13
|
+
void Delta_Init(Byte *state);
|
|
14
|
+
void Delta_Encode(Byte *state, unsigned delta, Byte *data, SizeT size);
|
|
15
|
+
void Delta_Decode(Byte *state, unsigned delta, Byte *data, SizeT size);
|
|
16
|
+
|
|
17
|
+
EXTERN_C_END
|
|
18
|
+
|
|
19
|
+
#endif
|
|
@@ -0,0 +1,121 @@
|
|
|
1
|
+
/* LzFind.h -- Match finder for LZ algorithms
|
|
2
|
+
2017-06-10 : Igor Pavlov : Public domain */
|
|
3
|
+
|
|
4
|
+
#ifndef __LZ_FIND_H
|
|
5
|
+
#define __LZ_FIND_H
|
|
6
|
+
|
|
7
|
+
#include "7zTypes.h"
|
|
8
|
+
|
|
9
|
+
EXTERN_C_BEGIN
|
|
10
|
+
|
|
11
|
+
typedef UInt32 CLzRef;
|
|
12
|
+
|
|
13
|
+
typedef struct _CMatchFinder
|
|
14
|
+
{
|
|
15
|
+
Byte *buffer;
|
|
16
|
+
UInt32 pos;
|
|
17
|
+
UInt32 posLimit;
|
|
18
|
+
UInt32 streamPos;
|
|
19
|
+
UInt32 lenLimit;
|
|
20
|
+
|
|
21
|
+
UInt32 cyclicBufferPos;
|
|
22
|
+
UInt32 cyclicBufferSize; /* it must be = (historySize + 1) */
|
|
23
|
+
|
|
24
|
+
Byte streamEndWasReached;
|
|
25
|
+
Byte btMode;
|
|
26
|
+
Byte bigHash;
|
|
27
|
+
Byte directInput;
|
|
28
|
+
|
|
29
|
+
UInt32 matchMaxLen;
|
|
30
|
+
CLzRef *hash;
|
|
31
|
+
CLzRef *son;
|
|
32
|
+
UInt32 hashMask;
|
|
33
|
+
UInt32 cutValue;
|
|
34
|
+
|
|
35
|
+
Byte *bufferBase;
|
|
36
|
+
ISeqInStream *stream;
|
|
37
|
+
|
|
38
|
+
UInt32 blockSize;
|
|
39
|
+
UInt32 keepSizeBefore;
|
|
40
|
+
UInt32 keepSizeAfter;
|
|
41
|
+
|
|
42
|
+
UInt32 numHashBytes;
|
|
43
|
+
size_t directInputRem;
|
|
44
|
+
UInt32 historySize;
|
|
45
|
+
UInt32 fixedHashSize;
|
|
46
|
+
UInt32 hashSizeSum;
|
|
47
|
+
SRes result;
|
|
48
|
+
UInt32 crc[256];
|
|
49
|
+
size_t numRefs;
|
|
50
|
+
|
|
51
|
+
UInt64 expectedDataSize;
|
|
52
|
+
} CMatchFinder;
|
|
53
|
+
|
|
54
|
+
#define Inline_MatchFinder_GetPointerToCurrentPos(p) ((p)->buffer)
|
|
55
|
+
|
|
56
|
+
#define Inline_MatchFinder_GetNumAvailableBytes(p) ((p)->streamPos - (p)->pos)
|
|
57
|
+
|
|
58
|
+
#define Inline_MatchFinder_IsFinishedOK(p) \
|
|
59
|
+
((p)->streamEndWasReached \
|
|
60
|
+
&& (p)->streamPos == (p)->pos \
|
|
61
|
+
&& (!(p)->directInput || (p)->directInputRem == 0))
|
|
62
|
+
|
|
63
|
+
int MatchFinder_NeedMove(CMatchFinder *p);
|
|
64
|
+
Byte *MatchFinder_GetPointerToCurrentPos(CMatchFinder *p);
|
|
65
|
+
void MatchFinder_MoveBlock(CMatchFinder *p);
|
|
66
|
+
void MatchFinder_ReadIfRequired(CMatchFinder *p);
|
|
67
|
+
|
|
68
|
+
void MatchFinder_Construct(CMatchFinder *p);
|
|
69
|
+
|
|
70
|
+
/* Conditions:
|
|
71
|
+
historySize <= 3 GB
|
|
72
|
+
keepAddBufferBefore + matchMaxLen + keepAddBufferAfter < 511MB
|
|
73
|
+
*/
|
|
74
|
+
int MatchFinder_Create(CMatchFinder *p, UInt32 historySize,
|
|
75
|
+
UInt32 keepAddBufferBefore, UInt32 matchMaxLen, UInt32 keepAddBufferAfter,
|
|
76
|
+
ISzAllocPtr alloc);
|
|
77
|
+
void MatchFinder_Free(CMatchFinder *p, ISzAllocPtr alloc);
|
|
78
|
+
void MatchFinder_Normalize3(UInt32 subValue, CLzRef *items, size_t numItems);
|
|
79
|
+
void MatchFinder_ReduceOffsets(CMatchFinder *p, UInt32 subValue);
|
|
80
|
+
|
|
81
|
+
UInt32 * GetMatchesSpec1(UInt32 lenLimit, UInt32 curMatch, UInt32 pos, const Byte *buffer, CLzRef *son,
|
|
82
|
+
UInt32 _cyclicBufferPos, UInt32 _cyclicBufferSize, UInt32 _cutValue,
|
|
83
|
+
UInt32 *distances, UInt32 maxLen);
|
|
84
|
+
|
|
85
|
+
/*
|
|
86
|
+
Conditions:
|
|
87
|
+
Mf_GetNumAvailableBytes_Func must be called before each Mf_GetMatchLen_Func.
|
|
88
|
+
Mf_GetPointerToCurrentPos_Func's result must be used only before any other function
|
|
89
|
+
*/
|
|
90
|
+
|
|
91
|
+
typedef void (*Mf_Init_Func)(void *object);
|
|
92
|
+
typedef UInt32 (*Mf_GetNumAvailableBytes_Func)(void *object);
|
|
93
|
+
typedef const Byte * (*Mf_GetPointerToCurrentPos_Func)(void *object);
|
|
94
|
+
typedef UInt32 (*Mf_GetMatches_Func)(void *object, UInt32 *distances);
|
|
95
|
+
typedef void (*Mf_Skip_Func)(void *object, UInt32);
|
|
96
|
+
|
|
97
|
+
typedef struct _IMatchFinder
|
|
98
|
+
{
|
|
99
|
+
Mf_Init_Func Init;
|
|
100
|
+
Mf_GetNumAvailableBytes_Func GetNumAvailableBytes;
|
|
101
|
+
Mf_GetPointerToCurrentPos_Func GetPointerToCurrentPos;
|
|
102
|
+
Mf_GetMatches_Func GetMatches;
|
|
103
|
+
Mf_Skip_Func Skip;
|
|
104
|
+
} IMatchFinder;
|
|
105
|
+
|
|
106
|
+
void MatchFinder_CreateVTable(CMatchFinder *p, IMatchFinder *vTable);
|
|
107
|
+
|
|
108
|
+
void MatchFinder_Init_LowHash(CMatchFinder *p);
|
|
109
|
+
void MatchFinder_Init_HighHash(CMatchFinder *p);
|
|
110
|
+
void MatchFinder_Init_3(CMatchFinder *p, int readData);
|
|
111
|
+
void MatchFinder_Init(CMatchFinder *p);
|
|
112
|
+
|
|
113
|
+
UInt32 Bt3Zip_MatchFinder_GetMatches(CMatchFinder *p, UInt32 *distances);
|
|
114
|
+
UInt32 Hc3Zip_MatchFinder_GetMatches(CMatchFinder *p, UInt32 *distances);
|
|
115
|
+
|
|
116
|
+
void Bt3Zip_MatchFinder_Skip(CMatchFinder *p, UInt32 num);
|
|
117
|
+
void Hc3Zip_MatchFinder_Skip(CMatchFinder *p, UInt32 num);
|
|
118
|
+
|
|
119
|
+
EXTERN_C_END
|
|
120
|
+
|
|
121
|
+
#endif
|
|
@@ -0,0 +1,57 @@
|
|
|
1
|
+
/* LzHash.h -- HASH functions for LZ algorithms
|
|
2
|
+
2015-04-12 : Igor Pavlov : Public domain */
|
|
3
|
+
|
|
4
|
+
#ifndef __LZ_HASH_H
|
|
5
|
+
#define __LZ_HASH_H
|
|
6
|
+
|
|
7
|
+
#define kHash2Size (1 << 10)
|
|
8
|
+
#define kHash3Size (1 << 16)
|
|
9
|
+
#define kHash4Size (1 << 20)
|
|
10
|
+
|
|
11
|
+
#define kFix3HashSize (kHash2Size)
|
|
12
|
+
#define kFix4HashSize (kHash2Size + kHash3Size)
|
|
13
|
+
#define kFix5HashSize (kHash2Size + kHash3Size + kHash4Size)
|
|
14
|
+
|
|
15
|
+
#define HASH2_CALC hv = cur[0] | ((UInt32)cur[1] << 8);
|
|
16
|
+
|
|
17
|
+
#define HASH3_CALC { \
|
|
18
|
+
UInt32 temp = p->crc[cur[0]] ^ cur[1]; \
|
|
19
|
+
h2 = temp & (kHash2Size - 1); \
|
|
20
|
+
hv = (temp ^ ((UInt32)cur[2] << 8)) & p->hashMask; }
|
|
21
|
+
|
|
22
|
+
#define HASH4_CALC { \
|
|
23
|
+
UInt32 temp = p->crc[cur[0]] ^ cur[1]; \
|
|
24
|
+
h2 = temp & (kHash2Size - 1); \
|
|
25
|
+
temp ^= ((UInt32)cur[2] << 8); \
|
|
26
|
+
h3 = temp & (kHash3Size - 1); \
|
|
27
|
+
hv = (temp ^ (p->crc[cur[3]] << 5)) & p->hashMask; }
|
|
28
|
+
|
|
29
|
+
#define HASH5_CALC { \
|
|
30
|
+
UInt32 temp = p->crc[cur[0]] ^ cur[1]; \
|
|
31
|
+
h2 = temp & (kHash2Size - 1); \
|
|
32
|
+
temp ^= ((UInt32)cur[2] << 8); \
|
|
33
|
+
h3 = temp & (kHash3Size - 1); \
|
|
34
|
+
temp ^= (p->crc[cur[3]] << 5); \
|
|
35
|
+
h4 = temp & (kHash4Size - 1); \
|
|
36
|
+
hv = (temp ^ (p->crc[cur[4]] << 3)) & p->hashMask; }
|
|
37
|
+
|
|
38
|
+
/* #define HASH_ZIP_CALC hv = ((cur[0] | ((UInt32)cur[1] << 8)) ^ p->crc[cur[2]]) & 0xFFFF; */
|
|
39
|
+
#define HASH_ZIP_CALC hv = ((cur[2] | ((UInt32)cur[0] << 8)) ^ p->crc[cur[1]]) & 0xFFFF;
|
|
40
|
+
|
|
41
|
+
|
|
42
|
+
#define MT_HASH2_CALC \
|
|
43
|
+
h2 = (p->crc[cur[0]] ^ cur[1]) & (kHash2Size - 1);
|
|
44
|
+
|
|
45
|
+
#define MT_HASH3_CALC { \
|
|
46
|
+
UInt32 temp = p->crc[cur[0]] ^ cur[1]; \
|
|
47
|
+
h2 = temp & (kHash2Size - 1); \
|
|
48
|
+
h3 = (temp ^ ((UInt32)cur[2] << 8)) & (kHash3Size - 1); }
|
|
49
|
+
|
|
50
|
+
#define MT_HASH4_CALC { \
|
|
51
|
+
UInt32 temp = p->crc[cur[0]] ^ cur[1]; \
|
|
52
|
+
h2 = temp & (kHash2Size - 1); \
|
|
53
|
+
temp ^= ((UInt32)cur[2] << 8); \
|
|
54
|
+
h3 = temp & (kHash3Size - 1); \
|
|
55
|
+
h4 = (temp ^ (p->crc[cur[3]] << 5)) & (kHash4Size - 1); }
|
|
56
|
+
|
|
57
|
+
#endif
|
|
@@ -0,0 +1,111 @@
|
|
|
1
|
+
/* Lzma86.h -- LZMA + x86 (BCJ) Filter
|
|
2
|
+
2013-01-18 : Igor Pavlov : Public domain */
|
|
3
|
+
|
|
4
|
+
#ifndef __LZMA86_H
|
|
5
|
+
#define __LZMA86_H
|
|
6
|
+
|
|
7
|
+
#include "7zTypes.h"
|
|
8
|
+
|
|
9
|
+
EXTERN_C_BEGIN
|
|
10
|
+
|
|
11
|
+
#define LZMA86_SIZE_OFFSET (1 + 5)
|
|
12
|
+
#define LZMA86_HEADER_SIZE (LZMA86_SIZE_OFFSET + 8)
|
|
13
|
+
|
|
14
|
+
/*
|
|
15
|
+
It's an example for LZMA + x86 Filter use.
|
|
16
|
+
You can use .lzma86 extension, if you write that stream to file.
|
|
17
|
+
.lzma86 header adds one additional byte to standard .lzma header.
|
|
18
|
+
.lzma86 header (14 bytes):
|
|
19
|
+
Offset Size Description
|
|
20
|
+
0 1 = 0 - no filter, pure LZMA
|
|
21
|
+
= 1 - x86 filter + LZMA
|
|
22
|
+
1 1 lc, lp and pb in encoded form
|
|
23
|
+
2 4 dictSize (little endian)
|
|
24
|
+
6 8 uncompressed size (little endian)
|
|
25
|
+
|
|
26
|
+
|
|
27
|
+
Lzma86_Encode
|
|
28
|
+
-------------
|
|
29
|
+
level - compression level: 0 <= level <= 9, the default value for "level" is 5.
|
|
30
|
+
|
|
31
|
+
dictSize - The dictionary size in bytes. The maximum value is
|
|
32
|
+
128 MB = (1 << 27) bytes for 32-bit version
|
|
33
|
+
1 GB = (1 << 30) bytes for 64-bit version
|
|
34
|
+
The default value is 16 MB = (1 << 24) bytes, for level = 5.
|
|
35
|
+
It's recommended to use the dictionary that is larger than 4 KB and
|
|
36
|
+
that can be calculated as (1 << N) or (3 << N) sizes.
|
|
37
|
+
For better compression ratio dictSize must be >= inSize.
|
|
38
|
+
|
|
39
|
+
filterMode:
|
|
40
|
+
SZ_FILTER_NO - no Filter
|
|
41
|
+
SZ_FILTER_YES - x86 Filter
|
|
42
|
+
SZ_FILTER_AUTO - it tries both alternatives to select best.
|
|
43
|
+
Encoder will use 2 or 3 passes:
|
|
44
|
+
2 passes when FILTER_NO provides better compression.
|
|
45
|
+
3 passes when FILTER_YES provides better compression.
|
|
46
|
+
|
|
47
|
+
Lzma86Encode allocates Data with MyAlloc functions.
|
|
48
|
+
RAM Requirements for compressing:
|
|
49
|
+
RamSize = dictionarySize * 11.5 + 6MB + FilterBlockSize
|
|
50
|
+
filterMode FilterBlockSize
|
|
51
|
+
SZ_FILTER_NO 0
|
|
52
|
+
SZ_FILTER_YES inSize
|
|
53
|
+
SZ_FILTER_AUTO inSize
|
|
54
|
+
|
|
55
|
+
|
|
56
|
+
Return code:
|
|
57
|
+
SZ_OK - OK
|
|
58
|
+
SZ_ERROR_MEM - Memory allocation error
|
|
59
|
+
SZ_ERROR_PARAM - Incorrect paramater
|
|
60
|
+
SZ_ERROR_OUTPUT_EOF - output buffer overflow
|
|
61
|
+
SZ_ERROR_THREAD - errors in multithreading functions (only for Mt version)
|
|
62
|
+
*/
|
|
63
|
+
|
|
64
|
+
enum ESzFilterMode
|
|
65
|
+
{
|
|
66
|
+
SZ_FILTER_NO,
|
|
67
|
+
SZ_FILTER_YES,
|
|
68
|
+
SZ_FILTER_AUTO
|
|
69
|
+
};
|
|
70
|
+
|
|
71
|
+
SRes Lzma86_Encode(Byte *dest, size_t *destLen, const Byte *src, size_t srcLen,
|
|
72
|
+
int level, UInt32 dictSize, int filterMode);
|
|
73
|
+
|
|
74
|
+
|
|
75
|
+
/*
|
|
76
|
+
Lzma86_GetUnpackSize:
|
|
77
|
+
In:
|
|
78
|
+
src - input data
|
|
79
|
+
srcLen - input data size
|
|
80
|
+
Out:
|
|
81
|
+
unpackSize - size of uncompressed stream
|
|
82
|
+
Return code:
|
|
83
|
+
SZ_OK - OK
|
|
84
|
+
SZ_ERROR_INPUT_EOF - Error in headers
|
|
85
|
+
*/
|
|
86
|
+
|
|
87
|
+
SRes Lzma86_GetUnpackSize(const Byte *src, SizeT srcLen, UInt64 *unpackSize);
|
|
88
|
+
|
|
89
|
+
/*
|
|
90
|
+
Lzma86_Decode:
|
|
91
|
+
In:
|
|
92
|
+
dest - output data
|
|
93
|
+
destLen - output data size
|
|
94
|
+
src - input data
|
|
95
|
+
srcLen - input data size
|
|
96
|
+
Out:
|
|
97
|
+
destLen - processed output size
|
|
98
|
+
srcLen - processed input size
|
|
99
|
+
Return code:
|
|
100
|
+
SZ_OK - OK
|
|
101
|
+
SZ_ERROR_DATA - Data error
|
|
102
|
+
SZ_ERROR_MEM - Memory allocation error
|
|
103
|
+
SZ_ERROR_UNSUPPORTED - unsupported file
|
|
104
|
+
SZ_ERROR_INPUT_EOF - it needs more bytes in input buffer
|
|
105
|
+
*/
|
|
106
|
+
|
|
107
|
+
SRes Lzma86_Decode(Byte *dest, SizeT *destLen, const Byte *src, SizeT *srcLen);
|
|
108
|
+
|
|
109
|
+
EXTERN_C_END
|
|
110
|
+
|
|
111
|
+
#endif
|