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