44# define LZ4_HEAPMODE 0
51#define LZ4_ACCELERATION_DEFAULT 1
57#define LZ4_ACCELERATION_MAX 65537
76#ifndef LZ4_FORCE_MEMORY_ACCESS
77# if defined(__GNUC__) && \
78 ( defined(__ARM_ARCH_6__) || defined(__ARM_ARCH_6J__) || defined(__ARM_ARCH_6K__) \
79 || defined(__ARM_ARCH_6Z__) || defined(__ARM_ARCH_6ZK__) || defined(__ARM_ARCH_6T2__) )
80# define LZ4_FORCE_MEMORY_ACCESS 2
81# elif (defined(__INTEL_COMPILER) && !defined(_WIN32)) || defined(__GNUC__)
82# define LZ4_FORCE_MEMORY_ACCESS 1
90#if defined(_MSC_VER) && defined(_WIN32_WCE)
91# undef LZ4_FORCE_SW_BITCOUNT
92# define LZ4_FORCE_SW_BITCOUNT
104#ifndef LZ4_SRC_INCLUDED
105# define LZ4_SRC_INCLUDED 1
108#ifndef LZ4_STATIC_LINKING_ONLY
109#define LZ4_STATIC_LINKING_ONLY
112#ifndef LZ4_DISABLE_DEPRECATE_WARNINGS
113#define LZ4_DISABLE_DEPRECATE_WARNINGS
116#define LZ4_STATIC_LINKING_ONLY
124#if defined(_MSC_VER) && (_MSC_VER >= 1400)
126# pragma warning(disable : 4127)
127# pragma warning(disable : 6237)
130#ifndef LZ4_FORCE_INLINE
132# define LZ4_FORCE_INLINE static __forceinline
134# if defined (__cplusplus) || defined (__STDC_VERSION__) && __STDC_VERSION__ >= 199901L
136# define LZ4_FORCE_INLINE static inline __attribute__((always_inline))
138# define LZ4_FORCE_INLINE static inline
141# define LZ4_FORCE_INLINE static
160#if defined(__PPC64__) && defined(__LITTLE_ENDIAN__) && defined(__GNUC__) && !defined(__clang__)
161# define LZ4_FORCE_O2 __attribute__((optimize("O2")))
162# undef LZ4_FORCE_INLINE
163# define LZ4_FORCE_INLINE static __inline __attribute__((optimize("O2"),always_inline))
168#if (defined(__GNUC__) && (__GNUC__ >= 3)) || (defined(__INTEL_COMPILER) && (__INTEL_COMPILER >= 800)) || defined(__clang__)
169# define expect(expr,value) (__builtin_expect ((expr),(value)) )
171# define expect(expr,value) (expr)
175#define likely(expr) expect(int(expr) != 0, 1)
178#define unlikely(expr) expect(int(expr) != 0, 0)
183#ifndef LZ4_ALIGN_TEST
184# define LZ4_ALIGN_TEST 1
207#if defined(LZ4_STATIC_LINKING_ONLY_DISABLE_MEMORY_ALLOCATION)
208# define ALLOC(s) lz4_error_memory_allocation_is_disabled
209# define ALLOC_AND_ZERO(s) lz4_error_memory_allocation_is_disabled
210# define FREEMEM(p) lz4_error_memory_allocation_is_disabled
211#elif defined(LZ4_USER_MEMORY_FUNCTIONS)
218# define ALLOC(s) LZ4_malloc(s)
219# define ALLOC_AND_ZERO(s) LZ4_calloc(1,s)
220# define FREEMEM(p) LZ4_free(p)
222# define ALLOC(s) malloc(s)
223# define ALLOC_AND_ZERO(s) calloc(1,s)
224# define FREEMEM(p) free(p)
227#define MEM_INIT(p,v,s) FPlatformMemory::Memset((p),(v),(s))
235#define WILDCOPYLENGTH 8
236#define LASTLITERALS 5
238#define MATCH_SAFEGUARD_DISTANCE ((2*WILDCOPYLENGTH) - MINMATCH)
239#define FASTLOOP_SAFE_DISTANCE 64
240static const int LZ4_minLength = (
MFLIMIT+1);
246#define LZ4_DISTANCE_ABSOLUTE_MAX 65535
247#if (LZ4_DISTANCE_MAX > LZ4_DISTANCE_ABSOLUTE_MAX)
248# error "LZ4_DISTANCE_MAX is too big : must be <= 65535"
252#define ML_MASK ((1U<<ML_BITS)-1)
253#define RUN_BITS (8-ML_BITS)
254#define RUN_MASK ((1U<<RUN_BITS)-1)
260#if defined(LZ4_DEBUG) && (LZ4_DEBUG>=1)
262# define assert(condition) check(condition)
266# define assert(condition) ((void)0)
270#define LZ4_STATIC_ASSERT(c) { enum { LZ4_static_assert = 1/(int)(!!(c)) }; }
272#if defined(LZ4_DEBUG) && (LZ4_DEBUG>=2)
274# define DEBUGLOG(l, ...) { \
275 if ((g_debuglog_enable) && (l<=LZ4_DEBUG)) { \
276 fprintf(stderr, __FILE__ ": "); \
277 fprintf(stderr, __VA_ARGS__); \
278 fprintf(stderr, " \n"); \
281# define DEBUGLOG(l, ...) {}
284static int LZ4_isAligned(
const void* ptr,
size_t alignment)
286 return ((
size_t)ptr & (
alignment -1)) == 0;
294#if defined(__cplusplus) || (defined (__STDC_VERSION__) && (__STDC_VERSION__ >= 199901L) )
302# if UINT_MAX != 4294967295UL
303# error "LZ4 code (when not C++ or C99) assumes that sizeof(int) == 4"
306 typedef unsigned short U16;
309 typedef unsigned long long U64;
313#if defined(__x86_64__)
338#if !defined(LZ4_memcpy)
339# if defined(__GNUC__) && (__GNUC__ >= 4)
340# define LZ4_memcpy(dst, src, size) __builtin_memcpy(dst, src, size)
342# define LZ4_memcpy(dst, src, size) memcpy(dst, src, size)
346#if !defined(LZ4_memmove)
347# if defined(__GNUC__) && (__GNUC__ >= 4)
348# define LZ4_memmove __builtin_memmove
350# define LZ4_memmove memmove
354static unsigned LZ4_isLittleEndian(
void)
356 const union {
U32 u;
BYTE c[4]; }
one = { 1 };
361#if defined(LZ4_FORCE_MEMORY_ACCESS) && (LZ4_FORCE_MEMORY_ACCESS==2)
371#elif defined(LZ4_FORCE_MEMORY_ACCESS) && (LZ4_FORCE_MEMORY_ACCESS==1)
377static U16 LZ4_read16(
const void* ptr) {
return ((
const LZ4_unalign*)ptr)->u16; }
378static U32 LZ4_read32(
const void* ptr) {
return ((
const LZ4_unalign*)ptr)->u32; }
379static reg_t LZ4_read_ARCH(
const void* ptr) {
return ((
const LZ4_unalign*)ptr)->uArch; }
401static void LZ4_write16(
void*
memPtr,
U16 value)
406static void LZ4_write32(
void*
memPtr,
U32 value)
414static U16 LZ4_readLE16(
const void*
memPtr)
416 if (LZ4_isLittleEndian()) {
417 return LZ4_read16(
memPtr);
420 return (
U16)((
U16)p[0] + (p[1]<<8));
424static void LZ4_writeLE16(
void*
memPtr,
U16 value)
426 if (LZ4_isLittleEndian()) {
427 LZ4_write16(
memPtr, value);
431 p[1] = (
BYTE)(value>>8);
443 do {
LZ4_memcpy(d,s,8); d+=8; s+=8; }
while (d<e);
446static const unsigned inc32table[8] = {0, 1, 2, 1, 0, 4, 4, 4};
447static const int dec64table[8] = {0, 0, 0, -1, -4, 1, 2, 3};
450#ifndef LZ4_FAST_DEC_LOOP
451# if defined __i386__ || defined _M_IX86 || defined __x86_64__ || defined _M_X64
452# define LZ4_FAST_DEC_LOOP 1
453# elif defined(__aarch64__) && defined(__APPLE__)
454# define LZ4_FAST_DEC_LOOP 1
455# elif defined(__aarch64__) && !defined(__clang__)
459# define LZ4_FAST_DEC_LOOP 1
461# define LZ4_FAST_DEC_LOOP 0
477 srcPtr += inc32table[offset];
479 srcPtr -= dec64table[offset];
520#if defined(_MSC_VER) && (_MSC_VER <= 1933)
521# pragma warning(push)
522# pragma warning(disable : 6385)
526#if defined(_MSC_VER) && (_MSC_VER <= 1933)
552static unsigned LZ4_NbCommonBytes (
reg_t val)
555 if (LZ4_isLittleEndian()) {
557 if (
sizeof(val) == 8) {
558# if defined(_MSC_VER) && (_MSC_VER >= 1800) && (defined(_M_AMD64) && !defined(_M_ARM64EC)) && !defined(LZ4_FORCE_SW_BITCOUNT)
564# if defined(__clang__) && (__clang_major__ < 10)
572# elif defined(_MSC_VER) && defined(_WIN64) && !defined(LZ4_FORCE_SW_BITCOUNT)
575 return (
unsigned)r >> 3;
576# elif (defined(__clang__) || (defined(__GNUC__) && ((__GNUC__ > 3) || \
577 ((__GNUC__ == 3) && (__GNUC_MINOR__ >= 4))))) && \
578 !defined(LZ4_FORCE_SW_BITCOUNT)
581 const U64 m = 0x0101010101010101ULL;
583 return (
unsigned)(((
U64)((val & (
m - 1)) *
m)) >> 56);
586# if defined(_MSC_VER) && (_MSC_VER >= 1400) && !defined(LZ4_FORCE_SW_BITCOUNT)
589 return (
unsigned)r >> 3;
590# elif (defined(__clang__) || (defined(__GNUC__) && ((__GNUC__ > 3) || \
591 ((__GNUC__ == 3) && (__GNUC_MINOR__ >= 4))))) && \
592 !defined(__TINYC__) && !defined(LZ4_FORCE_SW_BITCOUNT)
595 const U32 m = 0x01010101;
596 return (
unsigned)((((val - 1) ^ val) & (
m - 1)) *
m) >> 24;
601 if (
sizeof(val)==8) {
602# if (defined(__clang__) || (defined(__GNUC__) && ((__GNUC__ > 3) || \
603 ((__GNUC__ == 3) && (__GNUC_MINOR__ >= 4))))) && \
604 !defined(__TINYC__) && !defined(LZ4_FORCE_SW_BITCOUNT)
610 static const unsigned char ctz7_tab[128] = {
611 7, 0, 1, 0, 2, 0, 1, 0, 3, 0, 1, 0, 2, 0, 1, 0,
612 4, 0, 1, 0, 2, 0, 1, 0, 3, 0, 1, 0, 2, 0, 1, 0,
613 5, 0, 1, 0, 2, 0, 1, 0, 3, 0, 1, 0, 2, 0, 1, 0,
614 4, 0, 1, 0, 2, 0, 1, 0, 3, 0, 1, 0, 2, 0, 1, 0,
615 6, 0, 1, 0, 2, 0, 1, 0, 3, 0, 1, 0, 2, 0, 1, 0,
616 4, 0, 1, 0, 2, 0, 1, 0, 3, 0, 1, 0, 2, 0, 1, 0,
617 5, 0, 1, 0, 2, 0, 1, 0, 3, 0, 1, 0, 2, 0, 1, 0,
618 4, 0, 1, 0, 2, 0, 1, 0, 3, 0, 1, 0, 2, 0, 1, 0,
620 U64 const mask = 0x0101010101010101ULL;
621 U64 const t = (((val >> 8) - mask) | val) & mask;
622 return ctz7_tab[(t * 0x0080402010080402ULL) >> 57];
627 static const U32 by32 =
sizeof(val)*4;
631 if (!(val>>
by32)) { r=4; }
else { r=0; val>>=
by32; }
632 if (!(val>>16)) { r+=2; val>>=8; }
else { val>>=24; }
638# if (defined(__clang__) || (defined(__GNUC__) && ((__GNUC__ > 3) || \
639 ((__GNUC__ == 3) && (__GNUC_MINOR__ >= 4))))) && \
640 !defined(LZ4_FORCE_SW_BITCOUNT)
644 val = ((((val + 0x00FFFF00) | 0x00FFFFFF) + val) |
645 (val + 0x00FF0000)) >> 24;
646 return (
unsigned)val ^ 3;
653#define STEPSIZE sizeof(reg_t)
664 return LZ4_NbCommonBytes(
diff);
670 pIn += LZ4_NbCommonBytes(
diff);
682#ifndef LZ4_COMMONDEFS_ONLY
686static const int LZ4_64Klimit = ((64
KB) + (
MFLIMIT-1));
687static const U32 LZ4_skipTrigger = 6;
734#if defined (__cplusplus)
742 const void* dictStart,
size_t dictSize);
745 const void* dictStart,
size_t dictSize);
746#if defined (__cplusplus)
755 if (tableType ==
byU16)
764 if (LZ4_isLittleEndian()) {
776 if ((
sizeof(
reg_t)==8) && (tableType !=
byU16))
return LZ4_hash5(LZ4_read_ARCH(p), tableType);
777 return LZ4_hash4(LZ4_read32(p), tableType);
832 if (tableType ==
byU32) {
837 if (tableType ==
byU16) {
847 if (tableType ==
byPtr) {
const BYTE*
const* hashTable = (
const BYTE*
const*)
tableBase;
return hashTable[h]; }
873 || ((tableType ==
byU32) &&
cctx->currentOffset > 1
GB)
874 || tableType ==
byPtr
877 DEBUGLOG(4,
"LZ4_prepareTable: Resetting table in %p",
cctx);
879 cctx->currentOffset = 0;
882 DEBUGLOG(4,
"LZ4_prepareTable: Re-use hash table (no reset)");
891 if (
cctx->currentOffset != 0 && tableType ==
byU32) {
892 DEBUGLOG(5,
"LZ4_prepareTable: adding 64KB to currentOffset");
893 cctx->currentOffset += 64
KB;
926 const BYTE* lowLimit;
929 const BYTE*
const dictionary =
937 const BYTE*
const dictEnd = dictionary ? dictionary + dictSize : dictionary;
956 DEBUGLOG(5,
"LZ4_compress_generic_validated: srcSize=%i, tableType=%u",
inputSize, tableType);
961 if ((tableType ==
byU16) && (
inputSize>=LZ4_64Klimit)) {
return 0; }
977 cctx->tableType = (
U32)tableType;
992 if (tableType ==
byPtr) {
1005 match = LZ4_getPositionOnHash(h,
cctx->hashTable, tableType, base);
1010 || (LZ4_read32(
match) != LZ4_read32(
ip)) );
1037 lowLimit = dictionary;
1048 lowLimit = dictionary;
1068 if (LZ4_read32(
match) == LZ4_read32(
ip)) {
1095 for(; len >= 255 ; len-=255) *
op++ = 255;
1103 DEBUGLOG(6,
"seq.start:%i, literals=%u, match.start:%i",
1127 LZ4_writeLE16(
op, (
U16)offset);
op+=2;
1138 && (lowLimit==dictionary) ) {
1185 LZ4_write32(
op, 0xFFFFFFFF);
1188 LZ4_write32(
op, 0xFFFFFFFF);
1208 if (tableType ==
byPtr) {
1213 && (LZ4_read32(
match) == LZ4_read32(
ip)) )
1219 U32 const current = (
U32)(
ip-base);
1227 lowLimit = dictionary;
1237 lowLimit = dictionary;
1249 && (LZ4_read32(
match) == LZ4_read32(
ip)) ) {
1253 DEBUGLOG(6,
"seq.start:%i, literals=%u, match.start:%i",
1296 result = (int)(((
char*)
op) -
dest);
1298 DEBUGLOG(5,
"LZ4_compress_generic: compressed %i bytes into %i bytes",
inputSize, result);
1308 const char*
const src,
1319 DEBUGLOG(5,
"LZ4_compress_generic: srcSize=%i, dstCapacity=%i",
1325 DEBUGLOG(5,
"Generating an empty block");
1352 return LZ4_compress_generic(ctx,
source,
dest,
inputSize,
NULL, 0,
notLimited,
byU16,
noDict,
noDictIssue,
acceleration);
1355 return LZ4_compress_generic(ctx,
source,
dest,
inputSize,
NULL, 0,
notLimited, tableType,
noDict,
noDictIssue,
acceleration);
1359 return LZ4_compress_generic(ctx,
source,
dest,
inputSize,
NULL,
maxOutputSize,
limitedOutput,
byU16,
noDict,
noDictIssue,
acceleration);
1362 return LZ4_compress_generic(ctx,
source,
dest,
inputSize,
NULL,
maxOutputSize,
limitedOutput, tableType,
noDict,
noDictIssue,
acceleration);
1387 return LZ4_compress_generic(ctx, src,
dst,
srcSize,
NULL, 0,
notLimited, tableType,
noDict,
dictSmall,
acceleration);
1389 return LZ4_compress_generic(ctx, src,
dst,
srcSize,
NULL, 0,
notLimited, tableType,
noDict,
noDictIssue,
acceleration);
1394 return LZ4_compress_generic(ctx, src,
dst,
srcSize,
NULL, 0,
notLimited, tableType,
noDict,
noDictIssue,
acceleration);
1401 return LZ4_compress_generic(ctx, src,
dst,
srcSize,
NULL,
dstCapacity,
limitedOutput, tableType,
noDict,
dictSmall,
acceleration);
1403 return LZ4_compress_generic(ctx, src,
dst,
srcSize,
NULL,
dstCapacity,
limitedOutput, tableType,
noDict,
noDictIssue,
acceleration);
1408 return LZ4_compress_generic(ctx, src,
dst,
srcSize,
NULL,
dstCapacity,
limitedOutput, tableType,
noDict,
noDictIssue,
acceleration);
1451 return LZ4_compress_generic(&state->
internal_donotuse, src,
dst, *
srcSizePtr,
srcSizePtr,
targetDstSize,
fillOutput,
byU16,
noDict,
noDictIssue, 1);
1454 return LZ4_compress_generic(&state->
internal_donotuse, src,
dst, *
srcSizePtr,
srcSizePtr,
targetDstSize,
fillOutput,
addrMode,
noDict,
noDictIssue, 1);
1463 if (ctx ==
NULL)
return 0;
1483#if !defined(LZ4_STATIC_LINKING_ONLY_DISABLE_MEMORY_ALLOCATION)
1495static size_t LZ4_stream_t_alignment(
void)
1508 if (buffer ==
NULL) {
return NULL; }
1510 if (!LZ4_isAligned(buffer, LZ4_stream_t_alignment()))
return NULL;
1527#if !defined(LZ4_STATIC_LINKING_ONLY_DISABLE_MEMORY_ALLOCATION)
1538#define HASH_UNIT sizeof(reg_t)
1543 const BYTE* p = (
const BYTE*)dictionary;
1547 DEBUGLOG(4,
"LZ4_loadDict (%i bytes from %p into %p)", dictSize, dictionary,
LZ4_dict);
1561 dict->currentOffset += 64
KB;
1569 dict->dictionary = p;
1571 dict->tableType = (
U32)tableType;
1578 return (
int)
dict->dictSize;
1586 DEBUGLOG(4,
"LZ4_attach_dictionary (%p, %p, size %u)",
1590 if (dictCtx !=
NULL) {
1671 return LZ4_compress_generic(
streamPtr,
source,
dest,
inputSize,
NULL,
maxOutputSize,
limitedOutput, tableType,
withPrefix64k,
dictSmall,
acceleration);
1673 return LZ4_compress_generic(
streamPtr,
source,
dest,
inputSize,
NULL,
maxOutputSize,
limitedOutput, tableType,
withPrefix64k,
noDictIssue,
acceleration);
1691 result =
LZ4_compress_generic(
streamPtr,
source,
dest,
inputSize,
NULL,
maxOutputSize,
limitedOutput, tableType,
usingExtDict,
noDictIssue,
acceleration);
1693 result =
LZ4_compress_generic(
streamPtr,
source,
dest,
inputSize,
NULL,
maxOutputSize,
limitedOutput, tableType,
usingDictCtx,
noDictIssue,
acceleration);
1697 result =
LZ4_compress_generic(
streamPtr,
source,
dest,
inputSize,
NULL,
maxOutputSize,
limitedOutput, tableType,
usingExtDict,
dictSmall,
acceleration);
1699 result =
LZ4_compress_generic(
streamPtr,
source,
dest,
inputSize,
NULL,
maxOutputSize,
limitedOutput, tableType,
usingExtDict,
noDictIssue,
acceleration);
1718 result =
LZ4_compress_generic(
streamPtr,
source,
dest,
srcSize,
NULL, 0,
notLimited,
byU32,
usingExtDict,
dictSmall, 1);
1720 result =
LZ4_compress_generic(
streamPtr,
source,
dest,
srcSize,
NULL, 0,
notLimited,
byU32,
usingExtDict,
noDictIssue, 1);
1743 if ((
U32)dictSize > 64
KB) { dictSize = 64
KB; }
1744 if ((
U32)dictSize >
dict->dictSize) { dictSize = (int)
dict->dictSize; }
1754 dict->dictSize = (
U32)dictSize;
1768#define MIN(a,b) ( (a) < (b) ? (a) : (b) )
1778 do { b = **
pp; (*pp)++; l += b; }
while (b==255);
1779 DEBUGLOG(6,
"read_long_length_no_check: +length=%zu using %zu input bytes", l, l/255 + 1)
1799 const BYTE*
const dictStart,
1800 const size_t dictSize
1806 const BYTE*
const prefixStart =
ostart - prefixSize;
1808 DEBUGLOG(5,
"LZ4_decompress_unsafe_generic");
1809 if (dictStart ==
NULL)
assert(dictSize == 0);
1813 unsigned token = *
ip++;
1821 if ((
size_t)(
oend-
op) <
ll)
return -1;
1827 DEBUGLOG(5,
"invalid: literals end at distance %zi from end of block",
oend-
op);
1834 {
size_t ml = token & 15;
1835 size_t const offset = LZ4_readLE16(
ip);
1844 if ((
size_t)(
oend-
op) <
ml)
return -1;
1849 if (offset > (
size_t)(
op - prefixStart) + dictSize) {
1850 DEBUGLOG(6,
"offset out of range");
1855 if (offset > (
size_t)(
op - prefixStart)) {
1871 match = prefixStart;
1876 for (u=0; u<
ml; u++) {
1881 DEBUGLOG(5,
"invalid: match ends at distance %zi from end of block",
oend-
op);
1905 Rvl_t s, length = 0;
1920 if ((
sizeof(length)<8) &&
unlikely(length > ((
Rvl_t)(-1)/2)) ) {
1936 const char*
const src,
1944 const BYTE*
const dictStart,
1945 const size_t dictSize
1979 return ((
srcSize==1) && (*
ip==0)) ? 0 : -1;
1987#if LZ4_FAST_DEC_LOOP
1989 DEBUGLOG(6,
"skip fast decode loop");
2017 DEBUGLOG(7,
"copy %u bytes in a 16-bytes stripe", (
unsigned)length);
2026 offset = LZ4_readLE16(
ip);
ip+=2;
2069 DEBUGLOG(7,
"partialDecoding: dictionary match, close to dstEnd");
2070 length =
MIN(length, (
size_t)(
oend-
op));
2131 op += length;
ip += length;
2136 offset = LZ4_readLE16(
ip);
ip += 2;
2169#if LZ4_FAST_DEC_LOOP
2183 DEBUGLOG(7,
"partialDecoding: copying literals, close to input or output end")
2184 DEBUGLOG(7,
"partialDecoding: literal length = %u", (
unsigned)length);
2185 DEBUGLOG(7,
"partialDecoding: remaining space in dstBuffer : %i", (
int)(
oend -
op));
2186 DEBUGLOG(7,
"partialDecoding: remaining space in srcBuffer : %i", (
int)(
iend -
ip));
2207 DEBUGLOG(6,
"should have been last run of literals")
2208 DEBUGLOG(6,
"ip(%p) + length(%i) = %p != iend (%p)",
ip, (
int)length,
ip+length,
iend);
2230 offset = LZ4_readLE16(
ip);
ip+=2;
2245#if LZ4_FAST_DEC_LOOP
2285 size_t const mlen =
MIN(length, (
size_t)(
oend-
op));
2294 if (
op ==
oend) {
break; }
2304 match += inc32table[offset];
2306 match -= dec64table[offset];
2331 return (
int) (((
char*)
op)-
dst);
2335 return (
int) (-(((
const char*)
ip)-src))-1;
2362 DEBUGLOG(5,
"LZ4_decompress_fast");
2417 const void* dictStart,
size_t dictSize)
2427 const void* dictStart,
size_t dictSize)
2437 const void* dictStart,
size_t dictSize)
2441 0, (
const BYTE*)dictStart, dictSize);
2450 size_t prefixSize,
const void* dictStart,
size_t dictSize)
2454 (
BYTE*)
dest-prefixSize, (
const BYTE*)dictStart, dictSize);
2459#if !defined(LZ4_STATIC_LINKING_ONLY_DISABLE_MEMORY_ALLOCATION)
2486 lz4sd->prefixEnd = (
const BYTE*) dictionary + dictSize;
2488 lz4sd->prefixEnd = (
const BYTE*) dictionary;
2491 lz4sd->extDictSize = 0;
2527 if (
lz4sd->prefixSize == 0) {
2531 if (result <= 0)
return result;
2536 if (
lz4sd->prefixSize >= 64
KB - 1)
2538 else if (
lz4sd->extDictSize == 0)
2544 if (result <= 0)
return result;
2546 lz4sd->prefixEnd += result;
2553 if (result <= 0)
return result;
2572 if (
lz4sd->prefixSize == 0) {
2573 DEBUGLOG(5,
"first invocation : no prefix nor extDict");
2576 if (result <= 0)
return result;
2580 DEBUGLOG(5,
"continue using existing prefix");
2585 if (result <= 0)
return result;
2589 DEBUGLOG(5,
"prefix becomes extDict");
2594 if (result <= 0)
return result;
2614 if (dictStart+dictSize ==
dest) {
2615 if (dictSize >= 64
KB - 1) {
2629 if (dictStart+dictSize ==
dest) {
2630 if (dictSize >= 64
KB - 1) {
2642 if (dictSize==0 || dictStart+dictSize ==
dest)
2645 (
size_t)dictSize,
NULL, 0);
2706#if !defined(LZ4_STATIC_LINKING_ONLY_DISABLE_MEMORY_ALLOCATION)
OODEFFUNC typedef void(OODLE_CALLBACK t_fp_OodleCore_Plugin_Free)(void *ptr)
#define NULL
Definition oodle2base.h:134
RAD_U32 U32
Definition egttypes.h:501
RAD_U64 U64
Definition egttypes.h:511
RAD_U16 U16
Definition egttypes.h:491
#define CA_SUPPRESS(WarningNumber)
Definition CoreMiscDefines.h:125
#define LZ4_HASHTABLESIZE
Definition lz4.h:641
#define LZ4_COMPRESSBOUND(isize)
Definition lz4.h:198
#define LZ4_MEMORY_USAGE
Definition lz4.h:147
#define LZ4_VERSION_STRING
Definition lz4.h:126
union LZ4_stream_u LZ4_stream_t
Definition lz4.h:298
#define LZ4_HASH_SIZE_U32
Definition lz4.h:642
#define LZ4_DECODER_RING_BUFFER_SIZE(maxBlockSize)
Definition lz4.h:430
#define LZ4_MAX_INPUT_SIZE
Definition lz4.h:197
#define LZ4_VERSION_NUMBER
Definition lz4.h:121
#define LZ4_HASHLOG
Definition lz4.h:640
UE_FORCEINLINE_HINT TSharedRef< CastToType, Mode > StaticCastSharedRef(TSharedRef< CastFromType, Mode > const &InSharedRef)
Definition SharedPointer.h:127
float swift_float2 __attribute__((__ext_vector_type__(2)))
Definition MarketplaceKitWrapper.h:67
const char * source
Definition lz4.h:711
char int srcSize
Definition lz4.h:709
char int compressedSize
Definition lz4.h:735
char * inputBuffer
Definition lz4.h:731
const char char int inputSize
Definition lz4.h:711
char * dst
Definition lz4.h:735
char int int maxOutputSize
Definition lz4.h:710
char int originalSize
Definition lz4.h:736
char int outputSize
Definition lz4.h:717
char int isize
Definition lz4.h:718
char * dest
Definition lz4.h:709
LZ4_FORCE_INLINE int LZ4_decompress_unsafe_generic(const BYTE *const istart, BYTE *const ostart, int decompressedSize, size_t prefixSize, const BYTE *const dictStart, const size_t dictSize)
Definition lz4.cpp:1793
LZ4_FORCE_INLINE void LZ4_wildCopy8(void *dstPtr, const void *srcPtr, void *dstEnd)
Definition lz4.cpp:437
#define STEPSIZE
Definition lz4.cpp:653
LZ4_FORCE_INLINE void LZ4_putPositionOnHash(const BYTE *p, U32 h, void *tableBase, tableType_t const tableType, const BYTE *srcBase)
Definition lz4.cpp:804
#define KB
Definition lz4.cpp:242
int LZ4_compress_fast_extState(void *state, const char *source, char *dest, int inputSize, int maxOutputSize, int acceleration)
Definition lz4.cpp:1344
int LZ4_decompress_fast_usingDict(const char *source, char *dest, int originalSize, const char *dictStart, int dictSize)
Definition lz4.cpp:2640
#define LZ4_STATIC_ASSERT(c)
Definition lz4.cpp:270
unsigned long long U64
Definition lz4.cpp:309
earlyEnd_directive
Definition lz4.cpp:1765
@ partial_decode
Definition lz4.cpp:1765
@ decode_full_block
Definition lz4.cpp:1765
size_t reg_t
Definition lz4.cpp:316
int LZ4_compressBound(int isize)
Definition lz4.cpp:727
int LZ4_loadDict(LZ4_stream_t *LZ4_dict, const char *dictionary, int dictSize)
Definition lz4.cpp:1539
LZ4_FORCE_INLINE int LZ4_compress_generic(LZ4_stream_t_internal *const cctx, const char *const src, char *const dst, const int srcSize, int *inputConsumed, const int dstCapacity, const limitedOutput_directive outputDirective, const tableType_t tableType, const dict_directive dictDirective, const dictIssue_directive dictIssue, const int acceleration)
Definition lz4.cpp:1306
LZ4_FORCE_O2 int LZ4_decompress_safe_withPrefix64k(const char *source, char *dest, int compressedSize, int maxOutputSize)
Definition lz4.cpp:2371
#define MINMATCH
Definition lz4.cpp:233
int LZ4_decompress_safe_partial_forceExtDict(const char *source, char *dest, int compressedSize, int targetOutputSize, int dstCapacity, const void *dictStart, size_t dictSize)
Definition lz4.cpp:2425
int LZ4_decompress_safe_usingDict(const char *source, char *dest, int compressedSize, int maxOutputSize, const char *dictStart, int dictSize)
Definition lz4.cpp:2610
#define MIN(a, b)
Definition lz4.cpp:1768
#define GB
Definition lz4.cpp:244
int LZ4_compress_limitedOutput(const char *source, char *dest, int inputSize, int maxOutputSize)
Definition lz4.cpp:2655
int LZ4_decoderRingBufferSize(int maxBlockSize)
Definition lz4.cpp:2506
int LZ4_compress_default(const char *src, char *dst, int srcSize, int maxOutputSize)
Definition lz4.cpp:1433
int LZ4_compress_limitedOutput_continue(LZ4_stream_t *LZ4_stream, const char *src, char *dst, int srcSize, int dstCapacity)
Definition lz4.cpp:2671
unsigned char BYTE
Definition lz4.cpp:305
LZ4_FORCE_INLINE U32 LZ4_hash4(U32 sequence, tableType_t const tableType)
Definition lz4.cpp:753
LZ4_FORCE_INLINE Rvl_t read_variable_length(const BYTE **ip, const BYTE *ilimit, int initial_check)
Definition lz4.cpp:1902
LZ4_FORCE_INLINE U32 LZ4_getIndexOnHash(U32 h, const void *tableBase, tableType_t tableType)
Definition lz4.cpp:829
int LZ4_compress_destSize(const char *src, char *dst, int *srcSizePtr, int targetDstSize)
Definition lz4.cpp:1459
int LZ4_sizeofState(void)
Definition lz4.cpp:728
signed int S32
Definition lz4.cpp:308
LZ4_FORCE_O2 int LZ4_decompress_fast_continue(LZ4_streamDecode_t *LZ4_streamDecode, const char *source, char *dest, int originalSize)
Definition lz4.cpp:2562
int LZ4_compress(const char *src, char *dest, int srcSize)
Definition lz4.cpp:2659
#define LZ4_memcpy(dst, src, size)
Definition lz4.cpp:342
void LZ4_resetStream(LZ4_stream_t *LZ4_stream)
Definition lz4.cpp:1517
#define LZ4_DISTANCE_ABSOLUTE_MAX
Definition lz4.cpp:246
void LZ4_resetStream_fast(LZ4_stream_t *ctx)
Definition lz4.cpp:1523
int LZ4_freeStream(LZ4_stream_t *LZ4_stream)
Definition lz4.cpp:1528
#define MFLIMIT
Definition lz4.cpp:237
const char * LZ4_versionString(void)
Definition lz4.cpp:726
LZ4_FORCE_INLINE void LZ4_putPosition(const BYTE *p, void *tableBase, tableType_t tableType, const BYTE *srcBase)
Definition lz4.cpp:817
int LZ4_compress_fast(const char *source, char *dest, int inputSize, int maxOutputSize, int acceleration)
Definition lz4.cpp:1414
int LZ4_uncompress(const char *source, char *dest, int outputSize)
Definition lz4.cpp:2686
char * LZ4_slideInputBuffer(void *state)
Definition lz4.cpp:2714
int LZ4_compress_continue(LZ4_stream_t *LZ4_stream, const char *source, char *dest, int inputSize)
Definition lz4.cpp:2675
LZ4_stream_t * LZ4_initStream(void *buffer, size_t size)
Definition lz4.cpp:1505
#define LASTLITERALS
Definition lz4.cpp:236
int LZ4_uncompress_unknownOutputSize(const char *source, char *dest, int isize, int maxOutputSize)
Definition lz4.cpp:2690
#define DEBUGLOG(l,...)
Definition lz4.cpp:281
LZ4_FORCE_INLINE void LZ4_prepareTable(LZ4_stream_t_internal *const cctx, const int inputSize, const tableType_t tableType)
Definition lz4.cpp:862
LZ4_FORCE_INLINE int LZ4_decompress_safe_doubleDict(const char *source, char *dest, int compressedSize, int maxOutputSize, size_t prefixSize, const void *dictStart, size_t dictSize)
Definition lz4.cpp:2449
int LZ4_sizeofStreamState(void)
Definition lz4.cpp:2697
LZ4_FORCE_INLINE unsigned LZ4_count(const BYTE *pIn, const BYTE *pMatch, const BYTE *pInLimit)
Definition lz4.cpp:655
int LZ4_setStreamDecode(LZ4_streamDecode_t *LZ4_streamDecode, const char *dictionary, int dictSize)
Definition lz4.cpp:2480
#define ALLOC(s)
Definition lz4.cpp:222
#define FREEMEM(p)
Definition lz4.cpp:224
int LZ4_versionNumber(void)
Definition lz4.cpp:725
dictIssue_directive
Definition lz4.cpp:719
@ noDictIssue
Definition lz4.cpp:719
@ dictSmall
Definition lz4.cpp:719
LZ4_stream_t * LZ4_createStream(void)
Definition lz4.cpp:1484
int LZ4_compress_withState(void *state, const char *src, char *dst, int srcSize)
Definition lz4.cpp:2667
LZ4_FORCE_O2 int LZ4_decompress_safe_continue(LZ4_streamDecode_t *LZ4_streamDecode, const char *source, char *dest, int compressedSize, int maxOutputSize)
Definition lz4.cpp:2522
#define likely(expr)
Definition lz4.cpp:175
int LZ4_compress_forceExtDict(LZ4_stream_t *LZ4_dict, const char *source, char *dest, int srcSize)
Definition lz4.cpp:1710
LZ4_FORCE_INLINE void LZ4_putIndexOnHash(U32 idx, U32 h, void *tableBase, tableType_t const tableType)
Definition lz4.cpp:792
#define FASTLOOP_SAFE_DISTANCE
Definition lz4.cpp:239
LZ4_FORCE_INLINE void LZ4_clearHash(U32 h, void *tableBase, tableType_t const tableType)
Definition lz4.cpp:780
#define ML_BITS
Definition lz4.cpp:251
#define ML_MASK
Definition lz4.cpp:252
#define ALLOC_AND_ZERO(s)
Definition lz4.cpp:223
#define MEM_INIT(p, v, s)
Definition lz4.cpp:227
LZ4_FORCE_INLINE const BYTE * LZ4_getPosition(const BYTE *p, const void *tableBase, tableType_t tableType, const BYTE *srcBase)
Definition lz4.cpp:853
#define HASH_UNIT
Definition lz4.cpp:1538
LZ4_FORCE_INLINE int LZ4_compress_generic_validated(LZ4_stream_t_internal *const cctx, const char *const source, char *const dest, const int inputSize, int *inputConsumed, const int maxOutputSize, const limitedOutput_directive outputDirective, const tableType_t tableType, const dict_directive dictDirective, const dictIssue_directive dictIssue, const int acceleration)
Definition lz4.cpp:908
dict_directive
Definition lz4.cpp:718
@ noDict
Definition lz4.cpp:718
@ withPrefix64k
Definition lz4.cpp:718
@ usingExtDict
Definition lz4.cpp:718
@ usingDictCtx
Definition lz4.cpp:718
LZ4_FORCE_O2 int LZ4_decompress_fast(const char *source, char *dest, int originalSize)
Definition lz4.cpp:2360
limitedOutput_directive
Definition lz4.cpp:319
@ limitedOutput
Definition lz4.cpp:321
@ fillOutput
Definition lz4.cpp:322
@ notLimited
Definition lz4.cpp:320
int LZ4_compress_limitedOutput_withState(void *state, const char *src, char *dst, int srcSize, int dstSize)
Definition lz4.cpp:2663
LZ4_FORCE_O2 int LZ4_decompress_safe_partial(const char *src, char *dst, int compressedSize, int targetOutputSize, int dstCapacity)
Definition lz4.cpp:2351
int LZ4_saveDict(LZ4_stream_t *LZ4_dict, char *safeBuffer, int dictSize)
Definition lz4.cpp:1737
size_t Rvl_t
Definition lz4.cpp:1899
#define LZ4_FORCE_INLINE
Definition lz4.cpp:141
int LZ4_compress_fast_continue(LZ4_stream_t *LZ4_stream, const char *source, char *dest, int inputSize, int maxOutputSize, int acceleration)
Definition lz4.cpp:1630
LZ4_FORCE_INLINE U32 LZ4_hashPosition(const void *const p, tableType_t const tableType)
Definition lz4.cpp:773
unsigned int U32
Definition lz4.cpp:307
#define LZ4_ACCELERATION_MAX
Definition lz4.cpp:57
LZ4_FORCE_INLINE int LZ4_decompress_generic(const char *const src, char *const dst, int srcSize, int outputSize, earlyEnd_directive partialDecoding, dict_directive dict, const BYTE *const lowPrefix, const BYTE *const dictStart, const size_t dictSize)
Definition lz4.cpp:1935
int LZ4_resetStreamState(void *state, char *inputBuffer)
Definition lz4.cpp:2699
#define MATCH_SAFEGUARD_DISTANCE
Definition lz4.cpp:238
#define assert(condition)
Definition lz4.cpp:266
int LZ4_decompress_safe_partial_usingDict(const char *source, char *dest, int compressedSize, int targetOutputSize, int dstCapacity, const char *dictStart, int dictSize)
Definition lz4.cpp:2625
int LZ4_decompress_safe_forceExtDict(const char *source, char *dest, int compressedSize, int maxOutputSize, const void *dictStart, size_t dictSize)
Definition lz4.cpp:2415
#define unlikely(expr)
Definition lz4.cpp:178
int LZ4_compress_fast_extState_fastReset(void *state, const char *src, char *dst, int srcSize, int dstCapacity, int acceleration)
Definition lz4.cpp:1376
LZ4_FORCE_INLINE U32 LZ4_hash5(U64 sequence, tableType_t const tableType)
Definition lz4.cpp:761
#define WILDCOPYLENGTH
Definition lz4.cpp:235
#define LZ4_ACCELERATION_DEFAULT
Definition lz4.cpp:51
unsigned short U16
Definition lz4.cpp:306
void LZ4_attach_dictionary(LZ4_stream_t *workingStream, const LZ4_stream_t *dictionaryStream)
Definition lz4.cpp:1581
LZ4_FORCE_O2 int LZ4_decompress_safe(const char *source, char *dest, int compressedSize, int maxDecompressedSize)
Definition lz4.cpp:2343
tableType_t
Definition lz4.cpp:693
@ clearedTable
Definition lz4.cpp:693
@ byU16
Definition lz4.cpp:693
@ byPtr
Definition lz4.cpp:693
@ byU32
Definition lz4.cpp:693
#define RUN_MASK
Definition lz4.cpp:254
#define LZ4_FORCE_O2
Definition lz4.cpp:165
int LZ4_decompress_fast_withPrefix64k(const char *source, char *dest, int originalSize)
Definition lz4.cpp:2388
SIZE_T uptrval
Definition lz4.cpp:310
size_t read_long_length_no_check(const BYTE **pp)
Definition lz4.cpp:1775
#define LZ4_memmove
Definition lz4.cpp:350
int LZ4_freeStreamDecode(LZ4_streamDecode_t *LZ4_stream)
Definition lz4.cpp:2466
LZ4_streamDecode_t * LZ4_createStreamDecode(void)
Definition lz4.cpp:2460
void * LZ4_create(char *inputBuffer)
Definition lz4.cpp:2707
float v
Definition radaudio_mdct.cpp:62
SIZE_T prefixSize
Definition lz4.h:706
LZ4_u32 currentOffset
Definition lz4.h:667
const LZ4_byte * dictionary
Definition lz4.h:665
const LZ4_stream_t_internal * dictCtx
Definition lz4.h:666
LZ4_u32 dictSize
Definition lz4.h:669
LZ4_u32 hashTable[LZ4_HASH_SIZE_U32]
Definition lz4.h:664
LZ4_stream_t_internal internal_donotuse
Definition lz4.h:676