1e0c1b49fSNick Terrell /* 2e0c1b49fSNick Terrell * Copyright (c) Yann Collet, Facebook, Inc. 3e0c1b49fSNick Terrell * All rights reserved. 4e0c1b49fSNick Terrell * 5e0c1b49fSNick Terrell * This source code is licensed under both the BSD-style license (found in the 6e0c1b49fSNick Terrell * LICENSE file in the root directory of this source tree) and the GPLv2 (found 7e0c1b49fSNick Terrell * in the COPYING file in the root directory of this source tree). 8e0c1b49fSNick Terrell * You may select, at your option, one of the above-listed licenses. 9e0c1b49fSNick Terrell */ 10e0c1b49fSNick Terrell 11e0c1b49fSNick Terrell 12e0c1b49fSNick Terrell #ifndef ZSTD_DEC_BLOCK_H 13e0c1b49fSNick Terrell #define ZSTD_DEC_BLOCK_H 14e0c1b49fSNick Terrell 15e0c1b49fSNick Terrell /*-******************************************************* 16e0c1b49fSNick Terrell * Dependencies 17e0c1b49fSNick Terrell *********************************************************/ 18e0c1b49fSNick Terrell #include "../common/zstd_deps.h" /* size_t */ 19e0c1b49fSNick Terrell #include <linux/zstd.h> /* DCtx, and some public functions */ 20e0c1b49fSNick Terrell #include "../common/zstd_internal.h" /* blockProperties_t, and some public functions */ 21e0c1b49fSNick Terrell #include "zstd_decompress_internal.h" /* ZSTD_seqSymbol */ 22e0c1b49fSNick Terrell 23e0c1b49fSNick Terrell 24e0c1b49fSNick Terrell /* === Prototypes === */ 25e0c1b49fSNick Terrell 26e0c1b49fSNick Terrell /* note: prototypes already published within `zstd.h` : 27e0c1b49fSNick Terrell * ZSTD_decompressBlock() 28e0c1b49fSNick Terrell */ 29e0c1b49fSNick Terrell 30e0c1b49fSNick Terrell /* note: prototypes already published within `zstd_internal.h` : 31e0c1b49fSNick Terrell * ZSTD_getcBlockSize() 32e0c1b49fSNick Terrell * ZSTD_decodeSeqHeaders() 33e0c1b49fSNick Terrell */ 34e0c1b49fSNick Terrell 35e0c1b49fSNick Terrell 36*2aa14b1aSNick Terrell /* Streaming state is used to inform allocation of the literal buffer */ 37*2aa14b1aSNick Terrell typedef enum { 38*2aa14b1aSNick Terrell not_streaming = 0, 39*2aa14b1aSNick Terrell is_streaming = 1 40*2aa14b1aSNick Terrell } streaming_operation; 41*2aa14b1aSNick Terrell 42e0c1b49fSNick Terrell /* ZSTD_decompressBlock_internal() : 43e0c1b49fSNick Terrell * decompress block, starting at `src`, 44e0c1b49fSNick Terrell * into destination buffer `dst`. 45e0c1b49fSNick Terrell * @return : decompressed block size, 46e0c1b49fSNick Terrell * or an error code (which can be tested using ZSTD_isError()) 47e0c1b49fSNick Terrell */ 48e0c1b49fSNick Terrell size_t ZSTD_decompressBlock_internal(ZSTD_DCtx* dctx, 49e0c1b49fSNick Terrell void* dst, size_t dstCapacity, 50*2aa14b1aSNick Terrell const void* src, size_t srcSize, const int frame, const streaming_operation streaming); 51e0c1b49fSNick Terrell 52e0c1b49fSNick Terrell /* ZSTD_buildFSETable() : 53e0c1b49fSNick Terrell * generate FSE decoding table for one symbol (ll, ml or off) 54e0c1b49fSNick Terrell * this function must be called with valid parameters only 55e0c1b49fSNick Terrell * (dt is large enough, normalizedCounter distribution total is a power of 2, max is within range, etc.) 56e0c1b49fSNick Terrell * in which case it cannot fail. 57e0c1b49fSNick Terrell * The workspace must be 4-byte aligned and at least ZSTD_BUILD_FSE_TABLE_WKSP_SIZE bytes, which is 58e0c1b49fSNick Terrell * defined in zstd_decompress_internal.h. 59e0c1b49fSNick Terrell * Internal use only. 60e0c1b49fSNick Terrell */ 61e0c1b49fSNick Terrell void ZSTD_buildFSETable(ZSTD_seqSymbol* dt, 62e0c1b49fSNick Terrell const short* normalizedCounter, unsigned maxSymbolValue, 63*2aa14b1aSNick Terrell const U32* baseValue, const U8* nbAdditionalBits, 64e0c1b49fSNick Terrell unsigned tableLog, void* wksp, size_t wkspSize, 65e0c1b49fSNick Terrell int bmi2); 66e0c1b49fSNick Terrell 67e0c1b49fSNick Terrell 68e0c1b49fSNick Terrell #endif /* ZSTD_DEC_BLOCK_H */ 69