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