VR-Vantage 2.5 API Documentation
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Groups Pages
Classes | Macros | Typedefs | Functions | Variables
lz4.h File Reference

Go to the source code of this file.

Classes

struct  LZ4_stream_t_internal
struct  LZ4_streamDecode_t_internal
union  LZ4_stream_u
union  LZ4_streamDecode_u

Macros

#define LZ4LIB_API
 Introduction.
#define LZ4_VERSION_MAJOR   1 /* for breaking interface changes */
#define LZ4_VERSION_MINOR   7 /* for new (non-breaking) interface capabilities */
#define LZ4_VERSION_RELEASE   5 /* for tweaks, bug-fixes, or development */
#define LZ4_VERSION_NUMBER   (LZ4_VERSION_MAJOR *100*100 + LZ4_VERSION_MINOR *100 + LZ4_VERSION_RELEASE)
#define LZ4_LIB_VERSION   LZ4_VERSION_MAJOR.LZ4_VERSION_MINOR.LZ4_VERSION_RELEASE
#define LZ4_QUOTE(str)   #str
#define LZ4_EXPAND_AND_QUOTE(str)   LZ4_QUOTE(str)
#define LZ4_VERSION_STRING   LZ4_EXPAND_AND_QUOTE(LZ4_LIB_VERSION)
#define LZ4_MEMORY_USAGE   14
#define LZ4_MAX_INPUT_SIZE   0x7E000000 /* 2 113 929 216 bytes */
#define LZ4_COMPRESSBOUND(isize)   ((unsigned)(isize) > (unsigned)LZ4_MAX_INPUT_SIZE ? 0 : (isize) + ((isize)/255) + 16)
#define LZ4_HASHLOG   (LZ4_MEMORY_USAGE-2)
#define LZ4_HASHTABLESIZE   (1 << LZ4_MEMORY_USAGE)
#define LZ4_HASH_SIZE_U32   (1 << LZ4_HASHLOG) /* required as macro for static allocation */
#define LZ4_STREAMSIZE_U64   ((1 << (LZ4_MEMORY_USAGE-3)) + 4)
#define LZ4_STREAMSIZE   (LZ4_STREAMSIZE_U64 * sizeof(unsigned long long))
#define LZ4_STREAMDECODESIZE_U64   4
#define LZ4_STREAMDECODESIZE   (LZ4_STREAMDECODESIZE_U64 * sizeof(unsigned long long))
#define LZ4_GCC_VERSION   (__GNUC__ * 100 + __GNUC_MINOR__)
#define LZ4_DEPRECATED(message)

Typedefs

typedef union LZ4_stream_u LZ4_stream_t
typedef union LZ4_streamDecode_u LZ4_streamDecode_t

Functions

LZ4LIB_API int LZ4_versionNumber (void)
 library version number; to be used when checking dll version
LZ4LIB_API const char * LZ4_versionString (void)
 library version string; to be used when checking dll version
LZ4LIB_API int LZ4_compress_default (const char *source, char *dest, int sourceSize, int maxDestSize)
LZ4LIB_API int LZ4_decompress_safe (const char *source, char *dest, int compressedSize, int maxDecompressedSize)
LZ4LIB_API int LZ4_compressBound (int inputSize)
LZ4LIB_API int LZ4_compress_fast (const char *source, char *dest, int sourceSize, int maxDestSize, int acceleration)
LZ4LIB_API int LZ4_sizeofState (void)
LZ4LIB_API int LZ4_compress_fast_extState (void *state, const char *source, char *dest, int inputSize, int maxDestSize, int acceleration)
LZ4LIB_API int LZ4_compress_destSize (const char *source, char *dest, int *sourceSizePtr, int targetDestSize)
LZ4LIB_API int LZ4_decompress_fast (const char *source, char *dest, int originalSize)
LZ4LIB_API int LZ4_decompress_safe_partial (const char *source, char *dest, int compressedSize, int targetOutputSize, int maxDecompressedSize)
LZ4LIB_API LZ4_stream_tLZ4_createStream (void)
LZ4LIB_API int LZ4_freeStream (LZ4_stream_t *streamPtr)
LZ4LIB_API void LZ4_resetStream (LZ4_stream_t *streamPtr)
LZ4LIB_API int LZ4_loadDict (LZ4_stream_t *streamPtr, const char *dictionary, int dictSize)
LZ4LIB_API int LZ4_compress_fast_continue (LZ4_stream_t *streamPtr, const char *src, char *dst, int srcSize, int maxDstSize, int acceleration)
LZ4LIB_API int LZ4_saveDict (LZ4_stream_t *streamPtr, char *safeBuffer, int dictSize)
LZ4LIB_API LZ4_streamDecode_tLZ4_createStreamDecode (void)
LZ4LIB_API int LZ4_freeStreamDecode (LZ4_streamDecode_t *LZ4_stream)
LZ4LIB_API int LZ4_setStreamDecode (LZ4_streamDecode_t *LZ4_streamDecode, const char *dictionary, int dictSize)
LZ4LIB_API int LZ4_decompress_safe_continue (LZ4_streamDecode_t *LZ4_streamDecode, const char *source, char *dest, int compressedSize, int maxDecompressedSize)
LZ4LIB_API int LZ4_decompress_fast_continue (LZ4_streamDecode_t *LZ4_streamDecode, const char *source, char *dest, int originalSize)
LZ4LIB_API int LZ4_decompress_safe_usingDict (const char *source, char *dest, int compressedSize, int maxDecompressedSize, const char *dictStart, int dictSize)
LZ4LIB_API int LZ4_decompress_fast_usingDict (const char *source, char *dest, int originalSize, const char *dictStart, int dictSize)
 LZ4_DEPRECATED ("use LZ4_compress_default() instead") int LZ4_compress(const char *source
 LZ4_DEPRECATED ("use LZ4_compress_fast_extState() instead") int LZ4_compress_withState(void *state
 LZ4_DEPRECATED ("use LZ4_compress_fast_continue() instead") int LZ4_compress_continue(LZ4_stream_t *LZ4_streamPtr
 LZ4_DEPRECATED ("use LZ4_createStream() instead") void *LZ4_create(char *inputBuffer)
 LZ4_DEPRECATED ("use LZ4_resetStream() instead") int LZ4_resetStreamState(void *state
 LZ4_DEPRECATED ("use LZ4_saveDict() instead") char *LZ4_slideInputBuffer(void *state)
 LZ4_DEPRECATED ("use LZ4_decompress_safe_usingDict() instead") int LZ4_decompress_safe_withPrefix64k(const char *src
 LZ4_DEPRECATED ("use LZ4_decompress_fast_usingDict() instead") int LZ4_decompress_fast_withPrefix64k(const char *src

Variables

char * dest
char int sourceSize
char int int maxOutputSize
const char * source
const char char int inputSize
char * inputBuffer
char * dst
char int compressedSize
char int int maxDstSize
char int originalSize

Macro Definition Documentation

#define LZ4LIB_API

Introduction.

LZ4 is lossless compression algorithm, providing compression speed at 400 MB/s per core, scalable with multi-cores CPU. It features an extremely fast decoder, with speed in multiple GB/s per core, typically reaching RAM speed limits on multi-core systems.

The LZ4 compression library provides in-memory compression and decompression functions. Compression can be done in:

  • a single step (described as Simple Functions)
  • a single step, reusing a context (described in Advanced Functions)
  • unbounded multiple steps (described as Streaming compression)

lz4.h provides block compression functions. It gives full buffer control to user. Decompressing an lz4-compressed block also requires metadata (such as compressed size). Each application is free to encode such metadata in whichever way it wants.

An additional format, called LZ4 frame specification (doc/lz4_Frame_format.md), take care of encoding standard metadata alongside LZ4-compressed blocks. If your application requires interoperability, it's recommended to use it. A library is provided to take care of it, see lz4frame.h.

#define LZ4_VERSION_MAJOR   1 /* for breaking interface changes */
#define LZ4_VERSION_MINOR   7 /* for new (non-breaking) interface capabilities */
#define LZ4_VERSION_RELEASE   5 /* for tweaks, bug-fixes, or development */
#define LZ4_VERSION_NUMBER   (LZ4_VERSION_MAJOR *100*100 + LZ4_VERSION_MINOR *100 + LZ4_VERSION_RELEASE)
#define LZ4_QUOTE (   str)    #str
#define LZ4_EXPAND_AND_QUOTE (   str)    LZ4_QUOTE(str)
#define LZ4_VERSION_STRING   LZ4_EXPAND_AND_QUOTE(LZ4_LIB_VERSION)
#define LZ4_MEMORY_USAGE   14

LZ4_MEMORY_USAGE : Memory usage formula : N->2^N Bytes (examples : 10 -> 1KB; 12 -> 4KB ; 16 -> 64KB; 20 -> 1MB; etc.) Increasing memory usage improves compression ratio Reduced memory usage can improve speed, due to cache effect Default value is 14, for 16KB, which nicely fits into Intel x86 L1 cache

#define LZ4_MAX_INPUT_SIZE   0x7E000000 /* 2 113 929 216 bytes */
#define LZ4_COMPRESSBOUND (   isize)    ((unsigned)(isize) > (unsigned)LZ4_MAX_INPUT_SIZE ? 0 : (isize) + ((isize)/255) + 16)
#define LZ4_HASHLOG   (LZ4_MEMORY_USAGE-2)
#define LZ4_HASHTABLESIZE   (1 << LZ4_MEMORY_USAGE)
#define LZ4_HASH_SIZE_U32   (1 << LZ4_HASHLOG) /* required as macro for static allocation */
#define LZ4_STREAMSIZE_U64   ((1 << (LZ4_MEMORY_USAGE-3)) + 4)

LZ4_stream_t : information structure to track an LZ4 stream. init this structure before first use. note : only use in association with static linking ! this definition is not API/ABI safe, and may change in a future version !

#define LZ4_STREAMSIZE   (LZ4_STREAMSIZE_U64 * sizeof(unsigned long long))
#define LZ4_STREAMDECODESIZE_U64   4

LZ4_streamDecode_t : information structure to track an LZ4 stream during decompression. init this structure using LZ4_setStreamDecode (or memset()) before first use note : only use in association with static linking ! this definition is not API/ABI safe, and may change in a future version !

#define LZ4_STREAMDECODESIZE   (LZ4_STREAMDECODESIZE_U64 * sizeof(unsigned long long))
#define LZ4_GCC_VERSION   (__GNUC__ * 100 + __GNUC_MINOR__)

Deprecation warnings Should deprecation warnings be a problem, it is generally possible to disable them, typically with -Wno-deprecated-declarations for gcc or _CRT_SECURE_NO_WARNINGS in Visual. Otherwise, it's also possible to define LZ4_DISABLE_DEPRECATE_WARNINGS

#define LZ4_DEPRECATED (   message)

Typedef Documentation

typedef union LZ4_stream_u LZ4_stream_t

Function Documentation

LZ4LIB_API int LZ4_versionNumber ( void  )

library version number; to be used when checking dll version

LZ4LIB_API const char* LZ4_versionString ( void  )

library version string; to be used when checking dll version

LZ4LIB_API int LZ4_compress_default ( const char *  source,
char *  dest,
int  sourceSize,
int  maxDestSize 
)

LZ4_compress_default() : Compresses 'sourceSize' bytes from buffer 'source' into already allocated 'dest' buffer of size 'maxDestSize'. Compression is guaranteed to succeed if 'maxDestSize' >= LZ4_compressBound(sourceSize). It also runs faster, so it's a recommended setting. If the function cannot compress 'source' into a more limited 'dest' budget, compression stops immediately, and the function result is zero. As a consequence, 'dest' content is not valid. This function never writes outside 'dest' buffer, nor read outside 'source' buffer. sourceSize : Max supported value is LZ4_MAX_INPUT_VALUE maxDestSize : full or partial size of buffer 'dest' (which must be already allocated) return : the number of bytes written into buffer 'dest' (necessarily <= maxOutputSize) or 0 if compression fails

LZ4LIB_API int LZ4_decompress_safe ( const char *  source,
char *  dest,
int  compressedSize,
int  maxDecompressedSize 
)

LZ4_decompress_safe() : compressedSize : is the precise full size of the compressed block. maxDecompressedSize : is the size of destination buffer, which must be already allocated. return : the number of bytes decompressed into destination buffer (necessarily <= maxDecompressedSize) If destination buffer is not large enough, decoding will stop and output an error code (<0). If the source stream is detected malformed, the function will stop decoding and return a negative result. This function is protected against buffer overflow exploits, including malicious data packets. It never writes outside output buffer, nor reads outside input buffer.

LZ4LIB_API int LZ4_compressBound ( int  inputSize)

LZ4_compressBound() : Provides the maximum size that LZ4 compression may output in a "worst case" scenario (input data not compressible) This function is primarily useful for memory allocation purposes (destination buffer size). Macro LZ4_COMPRESSBOUND() is also provided for compilation-time evaluation (stack memory allocation for example). Note that LZ4_compress_default() compress faster when dest buffer size is >= LZ4_compressBound(srcSize) inputSize : max supported value is LZ4_MAX_INPUT_SIZE return : maximum output size in a "worst case" scenario or 0, if input size is too large ( > LZ4_MAX_INPUT_SIZE)

LZ4LIB_API int LZ4_compress_fast ( const char *  source,
char *  dest,
int  sourceSize,
int  maxDestSize,
int  acceleration 
)

LZ4_compress_fast() : Same as LZ4_compress_default(), but allows to select an "acceleration" factor. The larger the acceleration value, the faster the algorithm, but also the lesser the compression. It's a trade-off. It can be fine tuned, with each successive value providing roughly +~3% to speed. An acceleration value of "1" is the same as regular LZ4_compress_default() Values <= 0 will be replaced by ACCELERATION_DEFAULT (see lz4.c), which is 1.

LZ4LIB_API int LZ4_sizeofState ( void  )

LZ4_compress_fast_extState() : Same compression function, just using an externally allocated memory space to store compression state. Use LZ4_sizeofState() to know how much memory must be allocated, and allocate it on 8-bytes boundaries (using malloc() typically). Then, provide it as 'void* state' to compression function.

LZ4LIB_API int LZ4_compress_fast_extState ( void state,
const char *  source,
char *  dest,
int  inputSize,
int  maxDestSize,
int  acceleration 
)
LZ4LIB_API int LZ4_compress_destSize ( const char *  source,
char *  dest,
int sourceSizePtr,
int  targetDestSize 
)

LZ4_compress_destSize() : Reverse the logic, by compressing as much data as possible from 'source' buffer into already allocated buffer 'dest' of size 'targetDestSize'. This function either compresses the entire 'source' content into 'dest' if it's large enough, or fill 'dest' buffer completely with as much data as possible from 'source'. *sourceSizePtr : will be modified to indicate how many bytes where read from 'source' to fill 'dest'. New value is necessarily <= old value. return : Nb bytes written into 'dest' (necessarily <= targetDestSize) or 0 if compression fails

LZ4LIB_API int LZ4_decompress_fast ( const char *  source,
char *  dest,
int  originalSize 
)

LZ4_decompress_fast() : originalSize : is the original and therefore uncompressed size return : the number of bytes read from the source buffer (in other words, the compressed size) If the source stream is detected malformed, the function will stop decoding and return a negative result. Destination buffer must be already allocated. Its size must be a minimum of 'originalSize' bytes. note : This function fully respect memory boundaries for properly formed compressed data. It is a bit faster than LZ4_decompress_safe(). However, it does not provide any protection against intentionally modified data stream (malicious input). Use this function in trusted environment only (data to decode comes from a trusted source).

LZ4LIB_API int LZ4_decompress_safe_partial ( const char *  source,
char *  dest,
int  compressedSize,
int  targetOutputSize,
int  maxDecompressedSize 
)

LZ4_decompress_safe_partial() : This function decompress a compressed block of size 'compressedSize' at position 'source' into destination buffer 'dest' of size 'maxDecompressedSize'. The function tries to stop decompressing operation as soon as 'targetOutputSize' has been reached, reducing decompression time. return : the number of bytes decoded in the destination buffer (necessarily <= maxDecompressedSize) Note : this number can be < 'targetOutputSize' should the compressed block to decode be smaller. Always control how many bytes were decoded. If the source stream is detected malformed, the function will stop decoding and return a negative result. This function never writes outside of output buffer, and never reads outside of input buffer. It is therefore protected against malicious data packets

LZ4LIB_API LZ4_stream_t* LZ4_createStream ( void  )

LZ4_createStream() and LZ4_freeStream() : LZ4_createStream() will allocate and initialize an LZ4_stream_t structure. LZ4_freeStream() releases its memory.

LZ4LIB_API int LZ4_freeStream ( LZ4_stream_t streamPtr)
LZ4LIB_API void LZ4_resetStream ( LZ4_stream_t streamPtr)

LZ4_resetStream() : An LZ4_stream_t structure can be allocated once and re-used multiple times. Use this function to init an allocated LZ4_stream_t structure and start a new compression.

LZ4LIB_API int LZ4_loadDict ( LZ4_stream_t streamPtr,
const char *  dictionary,
int  dictSize 
)

LZ4_loadDict() : Use this function to load a static dictionary into LZ4_stream. Any previous data will be forgotten, only 'dictionary' will remain in memory. Loading a size of 0 is allowed. Return : dictionary size, in bytes (necessarily <= 64 KB)

LZ4LIB_API int LZ4_compress_fast_continue ( LZ4_stream_t streamPtr,
const char *  src,
char *  dst,
int  srcSize,
int  maxDstSize,
int  acceleration 
)

LZ4_compress_fast_continue() : Compress buffer content 'src', using data from previously compressed blocks as dictionary to improve compression ratio. Important : Previous data blocks are assumed to still be present and unmodified ! 'dst' buffer must be already allocated. If maxDstSize >= LZ4_compressBound(srcSize), compression is guaranteed to succeed, and runs faster. If not, and if compressed data cannot fit into 'dst' buffer size, compression stops, and function returns a zero.

LZ4LIB_API int LZ4_saveDict ( LZ4_stream_t streamPtr,
char *  safeBuffer,
int  dictSize 
)

LZ4_saveDict() : If previously compressed data block is not guaranteed to remain available at its memory location, save it into a safer place (char* safeBuffer). Note : you don't need to call LZ4_loadDict() afterwards, dictionary is immediately usable, you can therefore call LZ4_compress_fast_continue(). Return : saved dictionary size in bytes (necessarily <= dictSize), or 0 if error.

LZ4LIB_API LZ4_streamDecode_t* LZ4_createStreamDecode ( void  )

LZ4_createStreamDecode() and LZ4_freeStreamDecode() : creation / destruction of streaming decompression tracking structure

LZ4LIB_API int LZ4_freeStreamDecode ( LZ4_streamDecode_t LZ4_stream)
LZ4LIB_API int LZ4_setStreamDecode ( LZ4_streamDecode_t LZ4_streamDecode,
const char *  dictionary,
int  dictSize 
)

LZ4_setStreamDecode() : Use this function to instruct where to find the dictionary. Setting a size of 0 is allowed (same effect as reset).

Returns
: 1 if OK, 0 if error
LZ4LIB_API int LZ4_decompress_safe_continue ( LZ4_streamDecode_t LZ4_streamDecode,
const char *  source,
char *  dest,
int  compressedSize,
int  maxDecompressedSize 
)

LZ4_decompress_*_continue() : These decoding functions allow decompression of multiple blocks in "streaming" mode. Previously decoded blocks must remain available at the memory position where they were decoded (up to 64 KB) In the case of a ring buffers, decoding buffer must be either :

  • Exactly same size as encoding buffer, with same update rule (block boundaries at same positions) In which case, the decoding & encoding ring buffer can have any size, including very small ones ( < 64 KB).
  • Larger than encoding buffer, by a minimum of maxBlockSize more bytes. maxBlockSize is implementation dependent. It's the maximum size you intend to compress into a single block. In which case, encoding and decoding buffers do not need to be synchronized, and encoding ring buffer can have any size, including small ones ( < 64 KB).
  • At least 64 KB + 8 bytes + maxBlockSize. In which case, encoding and decoding buffers do not need to be synchronized, and encoding ring buffer can have any size, including larger than decoding buffer. Whenever these conditions are not possible, save the last 64KB of decoded data into a safe buffer, and indicate where it is saved using LZ4_setStreamDecode()
LZ4LIB_API int LZ4_decompress_fast_continue ( LZ4_streamDecode_t LZ4_streamDecode,
const char *  source,
char *  dest,
int  originalSize 
)
LZ4LIB_API int LZ4_decompress_safe_usingDict ( const char *  source,
char *  dest,
int  compressedSize,
int  maxDecompressedSize,
const char *  dictStart,
int  dictSize 
)

LZ4_decompress_*_usingDict() : These decoding functions work the same as a combination of LZ4_setStreamDecode() followed by LZ4_decompress_*_continue() They are stand-alone, and don't need an LZ4_streamDecode_t structure.

LZ4LIB_API int LZ4_decompress_fast_usingDict ( const char *  source,
char *  dest,
int  originalSize,
const char *  dictStart,
int  dictSize 
)
LZ4_DEPRECATED ( "use LZ4_compress_default() instead"  ) const
LZ4_DEPRECATED ( "use LZ4_compress_fast_extState() instead"  )
LZ4_DEPRECATED ( "use LZ4_compress_fast_continue() instead"  )
LZ4_DEPRECATED ( "use LZ4_createStream() instead"  )
LZ4_DEPRECATED ( "use LZ4_resetStream() instead"  )
LZ4_DEPRECATED ( "use LZ4_saveDict() instead"  )
LZ4_DEPRECATED ( "use LZ4_decompress_safe_usingDict() instead"  ) const
LZ4_DEPRECATED ( "use LZ4_decompress_fast_usingDict() instead"  ) const

Variable Documentation

const char char * dest
char int sourceSize
const char char int int maxOutputSize

Referenced by LZ4HC_compress_optimal().

const char* source
const char char int inputSize

Referenced by LZ4HC_compress_optimal().

char* inputBuffer
char* dst
char int compressedSize
char int int maxDstSize
char int originalSize


Copyright © 2005-2019 VT MAK. All Rights Reserved (www.mak.com)