Function report |
Source Code:lib\lz4\lz4_decompress.c |
Create Date:2022-07-28 07:01:14 |
Last Modify:2020-03-12 14:18:49 | Copyright©Brick |
home page | Tree |
Annotation kernel can get tool activity | Download SCCT | Chinese |
Name:LZ4_decompress_generic() :* This generic decompression function covers all use cases.* It shall be instantiated several times, using different sets of directives.* Note that it is important for performance that this function really get inlined,
Proto:static inline __attribute__((__always_inline__)) int LZ4_decompress_generic(const char *const src, char *const dst, int srcSize, int outputSize, endCondition_directive endOnInput, earlyEnd_directive partialDecoding, dict_directive dict, const BYTE *const lowPrefix, const BYTE *const dictStart, const size_t dictSize)
Type:int
Parameter:
Type | Parameter | Name |
---|---|---|
const char *const | src | |
char *const | dst | |
int | srcSize | |
int | outputSize | If endOnInput == endOnInputSize,* this value is `dstCapacity` |
endCondition_directive | endOnInput | dOnOutputSize, endOnInputSize |
earlyEnd_directive | partialDecoding | ull, partial |
dict_directive | dict | Dict, withPrefix64k, usingExtDict |
const BYTE *const | lowPrefix | always <= dst, == dst when no prefix |
const BYTE *const | dictStart | ly if dict == usingExtDict |
const size_t | dictSize | : = 0 if noDict |
91 | static const unsigned int inc32table[8] = {0, 1, 2, 1, 0, 4, 4, 4} |
92 | static const int dec64table[8] = {0, 0, 0, - 1, - 4, 1, 2, 3} |
95 | checkOffset = safeDecode && : = 0 if noDict < 64 * KB |
98 | shortiend = iend - If dOnOutputSize, endOnInputSize Then 14 Else 8 - 2 |
100 | shortoend = oend - If dOnOutputSize, endOnInputSize Then 14 Else 8 - 18 |
111 | If dOnOutputSize, endOnInputSize && Value for the false possibility is greater at compile time(If endOnInput == endOnInputSize,* this value is `dstCapacity` == 0) Then Return If srcSize == 1 && ip == 0 Then 0 Else -1 |
114 | If Not dOnOutputSize, endOnInputSize && Value for the false possibility is greater at compile time(If endOnInput == endOnInputSize,* this value is `dstCapacity` == 0) Then Return If ip == 0 Then 1 Else -1 |
117 | If dOnOutputSize, endOnInputSize && Value for the false possibility is greater at compile time(srcSize == 0) Then Return -1 |
121 | When 1 cycle |
131 | assert(!dOnOutputSize, endOnInputSize || ip <= iend) |
145 | If If dOnOutputSize, endOnInputSize Then length != RUN_MASK Else length <= 8 && Value is more likely to compile time((dOnOutputSize, endOnInputSize ? ip < shortiend : 1) & (op <= shortoend)) Then |
153 | No 3D Now!(op, ip, dOnOutputSize, endOnInputSize ? 16 : 8) |
162 | offset = LZ4_readLE16(ip) |
163 | ip += 2 |
168 | If length != ML_MASK && offset >= 8 && ( Dict, withPrefix64k, usingExtDict == withPrefix64k || match >= always <= dst, == dst when no prefix ) Then |
172 | No 3D Now!(op + 0, match + 0, 8) |
173 | No 3D Now!(op + 8, match + 8, 8) |
174 | No 3D Now!(op + 16, match + 16, 2) |
177 | Continue |
185 | Go to _copy_match |
192 | If Value for the false possibility is greater at compile time(dOnOutputSize, endOnInputSize ? ip >= iend - RUN_MASK : 0) Then |
194 | Go to _output_error |
196 | Do |
199 | When Value is more likely to compile time(dOnOutputSize, endOnInputSize ? ip < iend - RUN_MASK : 1) & s == 255 cycle |
203 | If safeDecode && Value for the false possibility is greater at compile time((uptrval)(op) + length < (uptrval)(op)) Then |
207 | Go to _output_error |
209 | If safeDecode && Value for the false possibility is greater at compile time((uptrval)(ip) + length < (uptrval)(ip)) Then |
213 | Go to _output_error |
219 | LZ4_STATIC_ASSERT(MFLIMIT >= WILDCOPYLENGTH) |
221 | If dOnOutputSize, endOnInputSize && ( cpy > oend - MFLIMIT || ip + length > iend - 2 + 1 + LASTLITERALS ) || Not dOnOutputSize, endOnInputSize && cpy > oend - WILDCOPYLENGTH Then |
224 | If ull, partial Then |
233 | If dOnOutputSize, endOnInputSize && ip + length > iend Then |
240 | Go to _output_error |
242 | Else |
243 | If Not dOnOutputSize, endOnInputSize && cpy != oend Then |
250 | Go to _output_error |
259 | Go to _output_error |
263 | No 3D Now!(op, ip, length) |
268 | If Not ull, partial || cpy == oend Then Break |
270 | Else |
278 | offset = LZ4_readLE16(ip) |
279 | ip += 2 |
285 | _copy_match : |
288 | Go to _output_error |
296 | If Not ull, partial Then |
306 | Do |
309 | If dOnOutputSize, endOnInputSize && ip > iend - LASTLITERALS Then Go to _output_error |
315 | If safeDecode && Value for the false possibility is greater at compile time((uptrval)(op) + length < (uptrval)op) Then |
319 | Go to _output_error |
326 | If Dict, withPrefix64k, usingExtDict == usingExtDict && match < always <= dst, == dst when no prefix Then |
327 | If Value for the false possibility is greater at compile time(op + length > oend - LASTLITERALS) Then |
329 | If Not ull, partial Then Go to _output_error |
334 | If length <= always <= dst, == dst when no prefix - match Then |
342 | Else |
350 | No 3D Now!(op, dictEnd - copySize, copySize) |
352 | If restSize > op - always <= dst, == dst when no prefix Then |
354 | endOfMatch = op + restSize |
357 | When op < endOfMatch cycle |
359 | Else |
364 | Continue |
377 | mlen = min - return minimum of two values of the same or compatible types*@x: first value*@y: second value(length, (size_t)(oend - op)) |
385 | Else |
386 | No 3D Now!(op, match, mlen) |
391 | Continue |
394 | If Value for the false possibility is greater at compile time(offset < 8) Then |
402 | Else |
407 | op += 8 |
410 | oCopyLimit = oend - WILDCOPYLENGTH - 1 |
412 | If cpy > oend - LASTLITERALS Then |
417 | Go to _output_error |
420 | If op < oCopyLimit Then |
422 | match += oCopyLimit - op |
423 | op = oCopyLimit |
427 | Else |
436 | If dOnOutputSize, endOnInputSize Then |
439 | Else |
445 | _output_error : |
Name | Describe |
---|---|
LZ4_decompress_safe | |
LZ4_decompress_safe_partial | |
LZ4_decompress_fast | |
LZ4_decompress_safe_withPrefix64k | ===== Instantiate a few more decoding cases, used more than once. ===== |
LZ4_decompress_safe_withSmallPrefix | |
LZ4_decompress_safe_forceExtDict | |
LZ4_decompress_fast_extDict | |
LZ4_decompress_safe_doubleDict | The "double dictionary" mode, for use with e.g. ring buffers: the first part* of the dictionary is passed as prefix, and the second via dictStart + dictSize.* These routines are used only once, in LZ4_decompress_*_continue(). |
LZ4_decompress_fast_doubleDict |
Source code conversion tool public plug-in interface | X |
---|---|
Support c/c++/esqlc/java Oracle/Informix/Mysql Plug-in can realize: logical Report Code generation and batch code conversion |