xref: /freebsd/sys/contrib/zstd/doc/educational_decoder/zstd_decompress.h (revision f6a3b357e9be4c6423c85eff9a847163a0d307c8)
1 /*
2  * Copyright (c) 2016-present, Facebook, Inc.
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  */
9 
10 /******* EXPOSED TYPES ********************************************************/
11 /*
12 * Contains the parsed contents of a dictionary
13 * This includes Huffman and FSE tables used for decoding and data on offsets
14 */
15 typedef struct dictionary_s dictionary_t;
16 /******* END EXPOSED TYPES ****************************************************/
17 
18 /******* DECOMPRESSION FUNCTIONS **********************************************/
19 /// Zstandard decompression functions.
20 /// `dst` must point to a space at least as large as the reconstructed output.
21 size_t ZSTD_decompress(void *const dst, const size_t dst_len,
22                     const void *const src, const size_t src_len);
23 
24 /// If `dict != NULL` and `dict_len >= 8`, does the same thing as
25 /// `ZSTD_decompress` but uses the provided dict
26 size_t ZSTD_decompress_with_dict(void *const dst, const size_t dst_len,
27                               const void *const src, const size_t src_len,
28                               dictionary_t* parsed_dict);
29 
30 /// Get the decompressed size of an input stream so memory can be allocated in
31 /// advance
32 /// Returns -1 if the size can't be determined
33 /// Assumes decompression of a single frame
34 size_t ZSTD_get_decompressed_size(const void *const src, const size_t src_len);
35 /******* END DECOMPRESSION FUNCTIONS ******************************************/
36 
37 /******* DICTIONARY MANAGEMENT ***********************************************/
38 /*
39  * Return a valid dictionary_t pointer for use with dictionary initialization
40  * or decompression
41  */
42 dictionary_t* create_dictionary();
43 
44 /*
45  * Parse a provided dictionary blob for use in decompression
46  * `src` -- must point to memory space representing the dictionary
47  * `src_len` -- must provide the dictionary size
48  * `dict` -- will contain the parsed contents of the dictionary and
49  *        can be used for decompression
50  */
51 void parse_dictionary(dictionary_t *const dict, const void *src,
52                              size_t src_len);
53 
54 /*
55  * Free internal Huffman tables, FSE tables, and dictionary content
56  */
57 void free_dictionary(dictionary_t *const dict);
58 /******* END DICTIONARY MANAGEMENT *******************************************/
59